functionで関数を作る方法
85 ビュー (過去 30 日間)
古いコメントを表示
下記のようなやり方で
蔵本モデルの微分方程式を解いたのですが、一番最初のfunctionの所でエラーが出てきてしまいます。
function dydt=kuramotomodel(t,y)
↑
エラー: このコンテキストでは関数定義はサポートされません。コードファイルで関数を作成してください。
コードファイルで関数を作成とはどのようなやり方なのでしょうか?
やり方分かるいましたら解決策を伺いたいです。
よろしくお願いいたします。
function dydt=kuramotomodel(t,y) K=10; N=3; omega=0.5; domega=zeros(1,N); for k=1:length(domega) domega(k)=omega; for m=1:length(domega) domega(k)=domega(k)+K/N*sin(y(m)-y(k)); end end dydt = [domega(1); domega(2); domega(3)];
function dydt=kuramotomodel(t,y)
K=10;
N=2;
omega=0.5;
domega=zeros(1,N);
for k=1:length(domega)
domega(k)=omega;
for m=1:length(domega)
domega(k)=domega(k)+K/N*sin(y(m)-y(k));
end
end
dydt = [domega(1); domega(2)];function dydt=kuramotomodel(t,y)
0 件のコメント
採用された回答
Kojiro Saito
2020 年 7 月 13 日
コマンドウィンドウで上記の関数を定義されようとしていませんでしょうか?
コードファイルというのはスクリプトかライブスクリプトのことで、この中で関数を書く必要があります。
MATLABのホームタブから「新規スクリプト」をクリックしてエディターを開き、
上記の関数の定義をコピペし、kuramotomodel.mの名前で保存します。
するとkuramotomodelの関数が呼び出せるようになります。
または、MATLABのホームタブから「レイアウト」をクリックしてコマンド履歴を表示させ、コマンドウィンドウでじっこうしたコマンドを選択して右クリックでスクリプトの作成をクリックしてスクリプトにコピーさせることもできます。
5 件のコメント
Kojiro Saito
2020 年 7 月 13 日
エディターで実行を押すと、その関数が入力引数無しで実行されますので、tとyが与えられないまま処理が進み、yの部分でエラーが出てしまいます。
こちらのドキュメントのように、実行ボタンを押し下げて「コードを入力して実行」と押して、
t=0:0.1:1; y=[2/3*pi; 0; 4/3*pi]; kuramotomodel(t, y)
のように入力して実行すると入力引数を入れて実行できます。
コマンドウィンドウでも同様に
t=0:0.1:1;
y=[2/3*pi; 0; 4/3*pi];
kuramotomodel(t, y)
などで実行できます。
上記のode45の式ですが、
[t,y] = ode45(@kuramotomodel,[2/3*pi;0;4/3*pi]);
ode45のドキュメントによると ode45(odefun, tspan, y0)のように、積分区間tspanと初期条件y0の2変数が要になりますが、[2/3*pi;0;4/3*pi]がy0に該当しますでしょうか?積分区間tspanは分かりますでしょうか?
また、蔵本モデルですが、MATLABを使ったサンプルを見付けました。
ご参考になれば幸いです。
その他の回答 (1 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!