使用ODE45 Matlab包时出错

时间:2014-02-16 13:46:02

标签: matlab math ode

我是matlab的新手,我正在尝试使用ODE45实现RungaKutta方法来求解三阶联立微分方程。以下代码是通过在线可用文章和论文提供帮助而编写的。我收到以下错误。有人可以看看吗?

我想解决的方程组是:Set of equations

文件:freeconvect.m

function Y=freeconvect(eta,X,Pr,Le)
% X=(F0; F1; F2; Theta0; Theta1; Phi0; Phi1)
Nb=0;
Nt=0;
dF0deta=X(2);
df1deta=X(3);
dF2deta=((X(2))^2)-(X(1)*X(3));%-3*X(1)*X(3)+2*(X(2))^2-X(4);
dTheta0deta=X(5);
%dTheta1deta=((-1)*Pr)*((X(1)*X(5))+(Nb*X(7)*X(5))+(Nt*(X(7))^2));%-3*Pr*X(1)*X(5);
dPhi0deta=X(7);
dPhi1deta=(-1)*((Le*X(1)*X(5))+((Nt/Nb)*((-1)*Pr)*((X(1)*X(5))+(Nb*X(7)*X(5))+(Nt*        (X(7))^2))));%-3*Pr*X(1)*X(5);
Y=[dF0deta; dF1deta; dF2deta; dTheta0deta; dPhi0deta; dPhi1deta];

文件:Untitled3.m

% ODE45 Solver for freeconvect.m
Pr=10;
Le=10;
etaspan=[0 10] ;
Xinit=[0;1;1;1;1;1;1];
[Eta,X]=ode45(@freeconvect,etaspan,Xinit,Pr,Le);
plot(Eta,X);

ERROR ------------------------------------------- ------------

>> Untitled3
Attempted to access X(7); index out of bounds because numel(X)=6.

Error in freeconvect (line 10)
dPhi0deta=X(7);

Error in odearguments (line 88)
f0 = feval(ode,t0,y0,args{:});   % ODE15I sets args{1} to yp0.

Error in ode45 (line 114)
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...

Error in Untitled3 (line 10)
[Eta,X]=ode45(@freeconvect,etaspan,Xinit,Pr,Le);

1 个答案:

答案 0 :(得分:1)

我不认为ode45是解决此问题的正确工具。 ode45旨在解决initial value problems问题。根据您的“边界条件”,您有一个boundary value problem。就Matlab而言,start here

您收到的错误是由freeconvect函数中的这一行引起的:

dPhi0deta=X(7);

根据X(7)顶部的评论Phi1,但您只指定了Xinit六个值。