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

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 月 21 日
2行目の”@(w)”を先頭に移動すれば、ωに関するエラー無く動く事は間違いないです。
ただ、続くKの演算におけるgfunの中身(積分する式)が「ωを含む数式-(ωを引数とする関数ハンドル)」と、数式の内部で関数ハンドルを演算しており、この形が成立するのかどうかが疑問です
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 件)

カテゴリ

Help Center および File Exchange関数の基礎 についてさらに検索

製品


リリース

R2021b

Community Treasure Hunt

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

Start Hunting!