1

リンクの問題: http://i.imgur.com/4w9YWTb.png分析的に統合でき、答えは4ですが、分析的に統合できない問題と形が似ているため、Matlabを使用して数値的に統合することに興味があります。数値積分の難しさは、2 つの内部積分の関数が の関数でありxy因数z分解zできないために発生します。

4

2 に答える 2

1

決してエレガントではありません。誰かが私よりも matlab 関数をうまく利用できることを願っています。数値積分を練習するためだけに力ずくの方法を試しました。私は、z が乗算されているという事実を利用して、z = 0 での内部積分の極を回避しようとしました。私は3.9993を取得します。台形則よりも優れたものを使用して、誰かがより良い解を得る必要があります

function []=sofn
clear all

global x y z xx yy zz dx dy

dx=0.05;
x=0:dx:1;
dy=0.002;
dz=0.002;
y=0:dy:1;
z=0:dz:2;

xx=length(x);
yy=length(y);
zz=length(z);

s1=0;
for i=1:zz-1
    s1=s1+0.5*dz*(z(i+1)*exp(inte1(z(i+1)))+z(i)*exp(inte1(z(i))));
end
s1

end

function s2=inte1(localz)
global y yy dy

if localz==0
    s2=0;
else
s2=0;
for j=1:yy-1
    s2=s2+0.5*dy*(inte2(y(j),localz)+inte2(y(j+1),localz));
end
end

end

function s3=inte2(localy,localz)
global x xx dx

s3=0;
for k=1:xx-1
    s3=s3+0.5*dx*(2/(localy+localz));
end

end
于 2013-10-31T06:56:27.580 に答える
0

ポスターの同様の以前の質問で、これはできないと主張したので、これは奇妙です.Gudduの答えを見た後、それほど複雑ではないことに気付きました. 私が前に書いた、数値積分は関数ではなく数値になるということは真実ですが、要点は別として、与えられたすべてのパラメーターの積分を評価する関数を定義するだけで、この方法で効果的に関数を得ることができます。数値積分の結果として。

とにかく、ここに行きます:

function q = outer

    f = @(z) (z .* exp(inner(z)));
    q = quad(f, eps, 2);

end

function qs = inner(zs)
% compute \int_0^1 1 / (y + z) dy for given z

    qs = nan(size(zs));
    for i = 1 : numel(zs)
        z = zs(i);
        f = @(y) (1 ./ (y + z));
        qs(i) = quad(f, 0 , 1);
    end

end

コメントで自分が提案した単純化を適用し、x を削除しました。この関数innerは、y の内部積分の値を z の関数として計算します。次に、outer 関数は z の外部積分を計算します。eps積分を 0 の代わりに実行させることで、z = 0 の極を回避します。結果は次のようになります。

4.00000013663955

innerに指定された関数は、複数の引数値に対して同時にその値を返すことができる必要があるforため、ループを使用して実装する必要があります。quad

于 2013-10-31T19:46:20.770 に答える