2015-04-21 168 views
1

我做了計算定積分與限制的腳本集成限正確(Matlab的):如何使用

0 <= x <= 2 and 0 <= y <= 1 

但現在我想改變限制:

0 <= x <= 2 and 0 <= y <= sin((pi*x)/2) 

功能:

function f = inte(x,y) 

dz = 10; 

f = exp(-dz*((x-1.25).^2+y.^2)).*cos(y.*(x-1.25)); 

end 

這是我的腳本較早限制:

L = 100; M = L/2; 

hx = (2)/L; hy = (1)/M; 

x=[0:L]*hx; 
y=[0:M]*hy; 

Fx=[]; 

for i = 1:L+1 

    Fy=[]; 

    for j = 1:M+1 

     f = inte(x(i),y(j)); 
     Fy = [Fy f]; 

    end 

    ycor = hy*(sum(Fy) - Fy(1)/2 - Fy(end)/2); 
    Fx = [Fx ycor]; 

end 

ans = hx*(sum(Fx) - Fx(1)/2 - Fx(end)/2); 

disp (ans) 

當我嘗試更改代碼時,我似乎無法得到正確的答案。正確的答案應該是0.1560949 ...

L是x方向的步數,y方向的M數。 hx和hy是步長。 這真的讓我感到困擾。沒有,我只能使用命令integral2或陷阱作爲參考。

提前致謝!

+1

您已經發布了原始第一個案例的腳本。在y是x的函數的第二種情況下,你嘗試了什麼? –

回答

1

在您的本代碼,這些線

hy = (1)/M; 
y=[0:M]*hy; 

指的y變量。當y的限制取決於x時,這些行不能停留在x之外的循環之外:它們應該移入並使用值x(i)。像這樣:

for i = 1:L+1 % as in your code 

    hy = (sin(pi*x(i)/2))/M;  
    y = [0:M]*hy; 

    Fy=[]; % this and the rest as in your code 

我得到輸出0.1561,如你所願。