matlabプログラムで関数を作りたい場合、
matlab
1function b = a(x, y) 2 m = length(x); 3 n = length(y); 4 L = zeros(m + n - 1, n); 5 k = 0; 6 for i = 1 : m 7 for j = 1 : n 8 L(j+k, i) = l(j); 9 j = j+1; 10 end 11 i = i+1; 12 k = k+1; 13end
で関数でがつくれますが、
例えば、最後に行列の掛け算を行う場合、xとyが与えられた行列として
matlab1
1function ~ 2・ 3・ 4・ 5end 6b = x*y;
matlab2
1function ~ 2・ 3・ 4・ 5b = x*y; 6end
とした場合、matlab1プログラムの方ではendの外側にb = x*y;がありますが、これは関数を作成したと言えるのでしょうか。
教えていただけると幸いです。よろしくお願いいたします。
「matlab1」で、「function...」の行と「end」の行の間には、何か書かれてるのですか?
> matlab1プログラムの方ではendの外側にy = a*b;があります
「matlab1」のような、関数定義より後(下)に(関数定義以外の)何かを実行する行がある「*.m」ファイルを書いたら、実行時にエラーになりませんか?
https://jp.mathworks.com/help/matlab/matlab_prog/local-functions-in-scripts.html
には、「すべてのローカル関数を、ファイルの末尾、スクリプト コードの後に追加します。」って書いてありますけど
「matlab1」で、「function...」の行と「end」の行の間には何も書かれてないとして、そのような場合に関数作成がされるかという観点で、以下書きます
質問内容とズレてたら、スルーしてください
ファイルの内容が
function ret = hoge(x)
end
だけの「hoge.m」というファイルを作ってから、MATLABで
hoge(0)
を実行したら、(何も起きないけど)エラーにはならないので、(何もしない)hogeという関数は作成されてるはずです
質問が抽象的だった点、申し訳ございません。
ソースコードを追加いたしました。
このように、例えばたたみ こみの関数aを作成するといった場合、matlabの内容に、matlab1(endの前)またはmatlab2(endの後)にb=x*yを入れてもどちらからも正しい実行結果が出ます。
その時、「関数を作成する」といった場合にはどちらの方が良いのでしょうか。
> どちらからも正しい実行結果が出ます。
具体的に、どのように実行してるのでしょうか?
「関数a」は、いつどこで実行してるのでしょうか?
それとも、実行してないのでしょうか?
コマンドウィンドウから、xとyの行列を与え、b=a(x,y)で実行しています。
よろしくお願いいたします。
質問の最初のコード(関数内の計算コードが追記されたもの)の「関数a」では、bの計算は全くされてないので、そのコードはbを計算するという意味では全く不要で、実質的には
function b = a(x, y)
end
と同じです
つまり、私が三つ目のコメントに書いた、「何もしない関数」と実質同じです
「関数a」を、上記の「何もしない関数」に置き換えたら、以下のように分かりやすくなると思います
「matlab1」ではその関数は「何もしない」ので関数定義は不要になり、単に
b = x*y;
を実行してるだけ
「matlab2」は、上記「何もしない関数」に「b = x*y;」を追加してるのだから、「関数a」は
function b = a(x, y)
b = x*y;
end
となります
「matlab2」の場合で「関数a」を実行してるのならば、関数内の唯一のコード「b = x*y;」が実行されます
つまり、実質意味が無い不要なコードを全部削除したら、下記のようになります
「matlab1」は「b = x*y;」をただ実行してるだけ(関数は無関係)
「matlab2」は「b = x*y;」だけを計算する関数を定義して、それを実行してる
> 「関数を作成する」といった場合にはどちらの方が良いのでしょうか。
「matlab1」は、bを計算するという意味では関数を作成すらしてないのだから、「関数を作成する」のが必須なら、「matlab2」しか選択肢はありません
上記を補足します
ファイルの内容が、
b = x*y;
だけの、「hogehoge.m」というファイルを作ってください
次に、MATLAB内で「x」と「y」にデータを格納してから、
hogehoge
を実行してみてください
そうしたら、「b」が得られますよね
「b=a(x,y)」を実行しなくても
「matlab1」は、実質的に上記と同じことです
関数定義は「b」の計算には意味が無いので、定義して無いのと同じです
上記の例のような、「b = x*y;」をただ実行してるだけ(関数は無関係)と実質同じです
詳しく説明していただきありがとうございます。
理解することができました。
回答1件
あなたの回答
tips
プレビュー