関数ハンドルのハンドルの渡し方について

3 ビュー (過去 30 日間)
kazuma kaneda
kazuma kaneda 2021 年 11 月 19 日
回答済み: Atsushi Ueno 2021 年 11 月 22 日
下のように、ωについての積分をするコードを書きました。
・・・・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
Atsushi Ueno 2021 年 11 月 22 日
すなわち「無名関数の入れ子」の考え方が必要ですね

サインインしてコメントする。

採用された回答

Atsushi Ueno
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)
K = function_handle with value:
@(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 件)

製品


リリース

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!