2014-12-06 49 views
0

這個代碼是找到歐拉法MATLAB的實施歐拉解決微分法方程

function [x,y]=euler_forward(f,xinit,yinit,xfinal,n) 

h=(xfinal-xinit)/n; 
% Initialization of x and y as column vectors 
x=[xinit zeros(1,n)]; y=[yinit zeros(1,n)]; 
% Calculation of x and y 
for i=1:n 
x(i+1)=x(i)+h; 
y(i+1)=y(i)+h*f(x(i),y(i)); 
end 
end` 
'[email protected](x,y) (1+2*x)*sqrt(y); 
% Calculate exact solution 
[email protected](x,y) (1+2*x)*sqrt(y); 
xe=[0:0.01:1]; 
ye=g(xe); 
[x1,y1]=euler_forward(f,0,1,1,4); 

% Plot 
plot(xe,ye,'k-',x1,y1,'k-.') 
xlabel('x') 
ylabel('y') 
legend('Analytical','Forward') 
% Estimate errors 
error1=['Forward error: ' num2str(-100*(ye(end)-y1(end))/ye(end)) '%']; 

error={error1} 

所以我有這個迄今爲止的問題和它提供了一個錯誤說y不定義。我該怎麼辦?

+0

請在此添加語言標籤。 – csmckelvey 2014-12-06 01:10:22

+0

@Takendarkk:[標籤:matlab] *是一種語言標籤:「MATLAB®是一種用於數值計算,可視化和編程的高級語言和交互式環境...」(來自其主頁)。 – usr2564301 2014-12-07 00:36:43

回答

0

問題是這裏:

% Calculate exact solution 
[email protected](x,y) (1+2*x)*sqrt(y); 

精確的解決方案是一個變量,x的函數。據推測,你應該有紙和鉛筆(或與Wolfram Alpha的,等等),以找到它:它是

[email protected](x) .25*(x.^2+x+2).^2 

然後代碼工作正常,生產這種整齊圖:這是典型的歐拉法,數值解法滯後於精確解。

output