MATLAB Answers

積分変数をベクトルと​して与える際の重積分​を行う際の関数とIn​tegral2の扱い​方

4 views (last 30 days)
のように与えた場合の,x1, x2についての積分になります.
fun = @(x, y) [x y] * [1 2; 3 4] * [x; y]
q = integral2(fun, 0, 1, 0, 1) %積分範囲はa=c=0, b=d=1として記述
を行うと,以下のようなエラーになります.
エラー: *
内部行列の次元は一致しなければなりません。
エラー: LiveEditorEvaluationHelperESectionEval>@(x1,x2)[x1,x2]*[1,2;3,4]*[x1;x2]
エラー: integral2Calc>integral2t/tensor (line 228)
Z = FUN(X,Y); NFE = NFE + 1;
エラー: integral2Calc>integral2t (line 55)
[Qsub,esub] = tensor(thetaL,thetaR,phiB,phiT);
エラー: integral2Calc (line 9)
[q,errbnd] = integral2t(fun,xmin,xmax,ymin,ymax,optionstruct);
エラー: integral2 (line 106)
Q = integral2Calc(fun,xmin,xmax,yminfun,ymaxfun,opstruct);
式を展開し,
fun = @(x1, x2) x1.^2 + 4 .*x2 .^2 + 5 .* x1 .* x2
q = integral2(fun, 0, 1, 0, 1)
>>
ans =
2.916666666666940
のようにすれば問題なく積分が可能なのですが,より複雑な式の積分を行いたいので,どのように関数を定義してあげればベクトルのまま積分関数(integralなど)に入力することが可能か教えていただきたいです.

Accepted Answer

Hernia Baby
Hernia Baby on 7 Jul 2021
integral2は行列の非積分関数には適用できないみたいです。
integralであれば'ArrayValue'オプションをtrueにすることでできそうです。
ということでintegralでやってみました。
clc,clear;
fun = @(x, y) [x y] * [1 2; 3 4] * [x; y];
q = integral(@(y) integral(@(x) fun(x,y),0,1,'ArrayValued',true),0,1,'ArrayValued',true);
format long
q
q =
2.916666666666667
  1 Comment
Mutsumi Yoshino
Mutsumi Yoshino on 7 Jul 2021
過去の質問を追いきれていませんでした.教えていただきありがとうございました.
また,解決策も提示していただき,ありがとうございました.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!