matlab 运行ode45出错,不知道什么原因,麻烦帮我找找什么错误

用文献中的一小段程序,计算发动机进气质量,但是积分一直出错,不知道怎么修改
运行后提示错误:
1、Error using odearguments (line 93)
FA returns a vector of length 0, but the length of initial conditions vector is 1. The vector returned
by FA and the initial conditions vector must have the same number of elements.
2、Error in ode45 (line 114)
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...
3、Error in Untitled3 (line 12)
[anng2,ma1]=ode45(@fa,t,mass0)
程序如下:

d=7.5;s=8;l=13;volc=188;R=287.1;Temp=298;angla=200*pi/180;qang=20;
vol0=fvol(d,s,l,(360-qang)*pi/180,volc);
mass0=0.1*vol0./(R*Temp);
t=(210-qang)*pi/180:0.1:220*pi/180;
[anng2,ma1]=ode45(@fa,t,mass0)

function dmassa=fa(angla,massa)
global n
global Temp
d=7.5;
s=8;
l=13;
dia=21.8;
beta=pi/4;
volc=188;
pre=0.1;
k=1.4;
R=287.1;
angla=200*pi/180;
ang=angla+150*pi/180;
vol=fvol(d,s,l,ang,volc);
ara=fara(dia,beta,angla);
if ara<=pi*dia^2/4
ara=fara(dia,beta,angla);
else
ara=pi*dia^2/4;
end
if vol*pre./(massa*R*Temp)<=(2/(k+1))^(k/(k-1))
G=(2/(k+1))^(1/(k-1))*sqrt(2*k/(k+1));
dmassa=-ara*sqrt(R*Temp)*massa./vol*G*(30./(pi*n));
else
G=sqrt((2*k/(k-1))*((( vol*pre./(massa*R*Temp))^(2/k)-...
( vol*pre./(massa*R*Temp))^((k+1)/k))));
dmassa=-ara*sqrt(R*Temp)*massa./vol*G*(30./(pi*n));
end

function area=fara(dia,beta,angla)
area=pi*fha(angla)*cos(beta)*(dia+fha(angla)*cos(beta)*sin(beta));

function volume=fvol(d,s,l,angle,volc)
volume=volc+pi/4*d^2*s/2*((1+2*l/s)-cos(angle)-sqrt((2*l/s)^2-sin(angle).^2));

第1个回答  2014-04-27
看看fa计算结果多少本回答被提问者采纳

matlab使用ode45函数一直报错,哪位大佬能帮帮忙?
1)时间区间设定错误,t=12000值设定偏大,不符合微分方程题意,所以t应取1.2。所以 tspan=[0 1.2]; 而不是tspan=[0 12000];2) for i=[1: (size(y,5))];...end 该循环语句没有作用 2、自定义微分方程函数 1)dTUdt=TMfunc(t,y)定义有误,与主程序 @TMfunc3函数名不统一 2...

为什么matlab r2016a用ode45会报错
为什么matlab r2016a用ode45会报错,其主要原因是ode45函数格式书写错误,应按下列格式修改 [t,x]=ode45(@odefun3,[0,4],[1,0])修改后运行可得到如下结果。

matlab中的ode45不知道错在哪里了?
function Prey_Predator% 羊与狼的初始种群数量% 求解微分方程[t, y] = ode45(@FuncODE_Predator,[0, 0.5],[900,200,15]);subplot(3,1,1)plot(t,y(:,1))xlabel('时间\/年');ylabel('草种群数')subplot(3,1,2)plot(t,y(:,2))xlabel('时间\/年');ylabel('羊种群数')subplot(3,...

matlab ode45计算出错,请问怎么改
“FUN 返回的向量的长度为 3,但初始条件向量的长度为6”的错误意思是,方程个数只有3个,而变量数有6个。也就是说,方程个数应等于变量数。解决的办法:再增加3个方程或把变量改为3个

急求各位帮我看看这个ode45()程序为什么出错了?
2) 放到另一个档案, 档名 rigid.m. 其余的三行看是要放到另一个档案, 或者是直接放到工作视窗.第二, 在 plot 命令列中, 大写的 T 要全部改成小写的 t, 因为你之前的 ode45 命令的返回值中, 自变数部份是以小写的 t 作为返回变数名的.然后你就可以执行了, 我试了一下, 没有任何问题.

Matlab的ode45函数出错,高分求解!!
因为你x=0时2\/x是无穷大呀,然后y'又是0,然后(2\/x)y'就是nan了,所以后面算的全是nan了。

matlab ode45解微分方程组
1、你贴出来的报错信息和代码对不上号:前面显示错误的那行代码和你贴出来的完全不一样;而后面的错误(Input argument 'u1' is undefined)也不可能是目前的代码所导致的——的确是有错,但错误应该是iL未定义才对。2、使用ode*系列函数解常微分方程,用于描述微分方程的函数(例如你这里的current)...

matlab ode45求解有错误
并给出了多个参考文献,如果有兴趣,可以进一步查阅。如果对于问题的性质比较清楚,也知道什么算法可能比较有效,可以直接选择适当的求解器。在没有对于问题是否刚性的先验知识的条件下,根据MATLAB的建议,ode45是大多数情况下应该尝试的首选,如果ode45求解失败或效率很低,次选就是ode15s。请采纳。

关于matlab ode45 使用中出现 undefined 错误
Input argument "Sigema_R0" is undefined.意思是你没对输入参数 Singema_RO进行定义,也就是说 Singema_RO是什么参数类型的,是整数?字符?字符串?

matlab ode45解方程有问题
最简单的方法是你在fun里把a定义为global 变量。然后在command window里给a赋一个值,不要作为fun的参数。楼上的方法应该也可行。

相似回答