声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1716|回复: 2

[应用数学] 想请教下关于fslove函数中我的错误有那几种可能

[复制链接]
发表于 2011-3-1 17:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
数学方程如下,用san.m表示的
function dx=san(x)
global m v ms hs i ixz lf lr l ixx cof cor co kof kor ko sf u Df Dr Bf Br d hf hr
o1=x(1)+lf*x(2)/v-sf;
o2=x(1)-lr*x(2)/v;
B1=(Ffl+Ffr+Frl+Frr+ms*hs*9.8*O10)/(m*v)-x(2);
O10=((ms*hs*9.8-ko)*x(3)+ms*hs*v*(B1+x(2))-co*x(4))/ixx;
as=v*(B1+x(2));
wf=ms*as*(hs/(1+(kor-ms*hs*9.8)/kof)+lr*hf/l)/d;
wr=ms*as*(hs/(1+(kof-ms*hs*9.8)/kor)+lf*hr/l)/d;
Nfl=lr*m*9.8/(2*l)-wf;
Nfr=lr*m*9.8/(2*l)+wf;
Nrl=lf*m*9.8/(2*l)-wr;
Nrr=lf*m*9.8/(2*l)+wr;
Ffl=-u*Nfl*sin(Df*atan(Bf*o1));
Ffr=-u*Nfr*sin(Df*atan(Bf*o1));
Frl=-u*Nrl*sin(Dr*atan(Br*o2));
Frr=-u*Nrr*sin(Dr*atan(Br*o2));
Ff=Ffl+Ffr;
Fr=Frl+Frr;
dx(1)=(Ff+Fr+ms*hs*O10)/(m*v)-x(2);
dx(2)=(Ff*lf-Fr*lr)*cos(x(1))/i;
dx(3)=x(4);
dx(4)=((ms*hs*9.8-ko)*x(3)+ms*hs*v*(B1+x(2))-co*x(4))/ixx;
dx=[dx(1);dx(2);dx(3);dx(4)];

解方程程序如下:
%hold on
global m v ms hs i ixz lf lr l ixx cof cor co kof kor ko sf u Df Dr Bf Br d hf hr
m=1704.7;ms=1526.9;hs=0.455;i=3048.1;ixz=0;ixx=744;lf=1.035;lr=1.655;l=lf+lr;
cof=2823;cor=2653;co=cof+cor;kof=47300;kor=43300;ko=kof+kor;Df=1.56;Dr=1.56;Bf=11.275;Br=18.631;
d=1.535;hf=0.13;hr=0.11;
v=20;u=0.3;sf=0.01;
x0=[0,0,0,0];
options=optimset('Display','iter');
[x,fval]=fsolve('san',x0,options);


结果是错误:
??? Undefined function or variable "Ffl".
Error in ==> san at 5
B1=(Ffl+Ffr+Frl+Frr+ms*hs*9.8*O10)/(m*v)-x(2);
Error in ==> fsolve at 180
        fuser = feval(funfcn{3},x,varargin{:});
Error in ==> jiesan at 9
[x,fval]=fsolve('san',x0,options);


想请教下可能是哪方面的错误。
回复
分享到:

使用道具 举报

发表于 2011-3-2 00:34 | 显示全部楼层
B1是否应等Ffl/Ffr/...算出后才可算!?
发表于 2011-3-2 12:49 | 显示全部楼层
本帖最后由 Rainyboy 于 2011-3-2 12:59 编辑

这错误提示不是很清楚么?
就是在B1=(Ffl+Ffr+Frl+Frr+ms*hs*9.8*O10)/(m*v)-x(2);语句之前没有定义Ffl变量。

而你所看到的下面提示:
  1. Error in ==> san at 5
  2. B1=(Ffl+Ffr+Frl+Frr+ms*hs*9.8*O10)/(m*v)-x(2);
  3. Error in ==> fsolve at 180
  4.         fuser = feval(funfcn{3},x,varargin{:});
  5. Error in ==> jiesan at 9
  6. [x,fval]=fsolve('san',x0,options);
复制代码
其实是一个调用堆栈(call stack)的error trace back 过程;即由于jiesan.m调用了fsolve.m,而fsolve.m又调用了san.m,则call stack的大致结构为:
--栈顶--
fsolve at 180 (及该处的运行时上下文)
jiesan at 9  (及该处的运行时上下文)
--栈底--
现在在san at 5 有错误,因此matlab不仅需要告诉你error occor in san at 5 而且需要告诉你是什么调用路径导致了这个错误,以便你检查参数,所以才有了上述错误信息。


因此,并不是错误报告中发现了fsolve字样,就一定是fsolve的问题。

点评

赞成: 5.0
赞成: 5
  发表于 2011-3-2 14:16
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-17 17:38 , Processed in 0.095761 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表