質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

Q&A

解決済

1回答

862閲覧

matalab 関数作成

kun_monimoni

総合スコア26

MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

0グッド

0クリップ

投稿2021/10/11 12:18

編集2021/10/12 02:18

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 ~ 2345end 6b = x*y;

matlab2

1function ~ 2345b = x*y; 6end

とした場合、matlab1プログラムの方ではendの外側にb = x*y;がありますが、これは関数を作成したと言えるのでしょうか。
教えていただけると幸いです。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2021/10/12 01:06

「matlab1」で、「function...」の行と「end」の行の間には、何か書かれてるのですか?
jbpb0

2021/10/12 01:33 編集

> matlab1プログラムの方ではendの外側にy = a*b;があります 「matlab1」のような、関数定義より後(下)に(関数定義以外の)何かを実行する行がある「*.m」ファイルを書いたら、実行時にエラーになりませんか? https://jp.mathworks.com/help/matlab/matlab_prog/local-functions-in-scripts.html には、「すべてのローカル関数を、ファイルの末尾、スクリプト コードの後に追加します。」って書いてありますけど
jbpb0

2021/10/12 01:34 編集

「matlab1」で、「function...」の行と「end」の行の間には何も書かれてないとして、そのような場合に関数作成がされるかという観点で、以下書きます 質問内容とズレてたら、スルーしてください ファイルの内容が function ret = hoge(x) end だけの「hoge.m」というファイルを作ってから、MATLABで hoge(0) を実行したら、(何も起きないけど)エラーにはならないので、(何もしない)hogeという関数は作成されてるはずです
kun_monimoni

2021/10/12 02:17

質問が抽象的だった点、申し訳ございません。 ソースコードを追加いたしました。 このように、例えばたたみ こみの関数aを作成するといった場合、matlabの内容に、matlab1(endの前)またはmatlab2(endの後)にb=x*yを入れてもどちらからも正しい実行結果が出ます。 その時、「関数を作成する」といった場合にはどちらの方が良いのでしょうか。
jbpb0

2021/10/12 02:32

> どちらからも正しい実行結果が出ます。 具体的に、どのように実行してるのでしょうか? 「関数a」は、いつどこで実行してるのでしょうか? それとも、実行してないのでしょうか?
kun_monimoni

2021/10/12 02:39

コマンドウィンドウから、xとyの行列を与え、b=a(x,y)で実行しています。 よろしくお願いいたします。
jbpb0

2021/10/12 02:46

質問の最初のコード(関数内の計算コードが追記されたもの)の「関数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」しか選択肢はありません
jbpb0

2021/10/12 03:04

上記を補足します ファイルの内容が、 b = x*y; だけの、「hogehoge.m」というファイルを作ってください 次に、MATLAB内で「x」と「y」にデータを格納してから、 hogehoge を実行してみてください そうしたら、「b」が得られますよね 「b=a(x,y)」を実行しなくても 「matlab1」は、実質的に上記と同じことです 関数定義は「b」の計算には意味が無いので、定義して無いのと同じです 上記の例のような、「b = x*y;」をただ実行してるだけ(関数は無関係)と実質同じです
kun_monimoni

2021/10/12 03:06

詳しく説明していただきありがとうございます。 理解することができました。
guest

回答1

0

ベストアンサー

質問の最初のコード(関数内の計算コードが追記されたもの)の「関数a」では、bの計算は全くされてないので、そのコードはbを計算するという意味では全く不要で、実質的には

matlab

1function b = a(x, y) 2end

と同じです
つまり、実質的には「何もしない関数」です

「関数a」を、上記の「何もしない関数」に置き換えたら、以下のように分かりやすくなると思います

「matlab1」ではその関数は「何もしない」ので関数定義は不要になり、単に
b = x*y;
を実行してるだけ

「matlab2」は、上記「何もしない関数」に「b = x*y;」を追加してるのだから、「関数a」は

matlab

1function b = a(x, y) 2b = x*y; 3end

となります
「matlab2」の場合で「関数a」を実行すれば、関数内の唯一のコード「b = x*y;」が実行されます

つまり、実質意味が無い不要なコードを全部削除したら、下記のようになります
「matlab1」は「b = xy;」をただ実行してるだけ(関数は無関係)
「matlab2」は「b = x
y;」だけを計算する関数を定義して、それを実行してる

「関数を作成する」といった場合にはどちらの方が良いのでしょうか。

「matlab1」は、bを計算するという意味では関数を作成すらしてないのだから、「関数を作成する」のが必須なら、「matlab2」しか選択肢はありません

投稿2021/10/14 09:01

jbpb0

総合スコア7653

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問