関数ハンドルのハンドルの渡し方について
3 ビュー (過去 30 日間)
古いコメントを表示
下のように、ωについての積分をするコードを書きました。
・・・・1
とは以下の通りです。
・・・・2
以下がコードです。
A=1;m=1;s=1;wA=1;const=10^-10; %定数を決定
%2の計算 まず、eで積分
J=ffun(@(e)A.*exp(-(e-m).^2./(2*pi.*s.^2))./(w-e),-inf,w-const,w+const,inf)-@(w)1i*pi*A.*exp(-(w-m).^2./(2*pi.*s.^2));
%1の計算 次に、wで積分
K=@(t)gfun(@(w)exp(-1i*w.*t)./(w-wA-J),-inf,inf);
function f=ffun(fun,a,b,c,d)
f=integral(fun,a,b)+integral(fun,c,d);
end
function g=gfun(fun,a,b)
g=integral(fun,a,b);
end
こなままだと、まずωが変数として認識されません。また、ハンドルの渡し方についても違うと思うのですがわかる方がいましたらご教授お願いします。
2 件のコメント
Atsushi Ueno
2021 年 11 月 21 日
2行目の”@(w)”を先頭に移動すれば、ωに関するエラー無く動く事は間違いないです。
ただ、続くKの演算におけるgfunの中身(積分する式)が「ωを含む数式-(ωを引数とする関数ハンドル)」と、数式の内部で関数ハンドルを演算しており、この形が成立するのかどうかが疑問です
Atsushi Ueno
2021 年 11 月 22 日
すなわち「無名関数の入れ子」の考え方が必要ですね
採用された回答
Atsushi Ueno
2021 年 11 月 22 日
ηによる積分範囲を分割して下記のようにした理由が良く分かりませんが、とにかくそのように致します。
JとKを離せない問題があって長く見難いですが、これで引数t,ω,ηが入れ子になった無名関数として成立します。
A=1;m=1;s=1;wA=1;const=10^-10; %定数を決定
K=@(t)gfun(@(w)exp(-1i*w.*t)./(w-wA-ffun(@(e)A.*exp(-(e-m).^2./(2*pi.*s.^2))./(w-e),-inf,w-const,w+const,inf)-1i*pi*A.*exp(-(w-m).^2./(2*pi.*s.^2))),-inf,inf)
function f=ffun(fun,a,b,c,d)
f=integral(fun,a,b)+integral(fun,c,d);
end
function g=gfun(fun,a,b)
g=integral(fun,a,b);
end
0 件のコメント
その他の回答 (0 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!