karllukas 发表于 2007-11-22 10:24

求解非线性方程老是出错

大家帮忙给看看吧,都折腾俺一个月的DD了。
要解个3元的非线性方程,未知数 a b c
function neu=fun(T)
a=T(1);
b=T(2);
c=T(3);
R=6400*10^3;
g=9.81;
E=2.1*10^11;
l=7.2*10^7;
rho=7850;
omega=2*pi/(24*3600);
syms x
u=a*sin(1*pi/l*x)+b*sin(3*pi/l*x)+c*sin(5*pi/l*x);
du=diff(u,x);
x=subs(x);
x=0:10^4:72*10^6;
p11=int((x.^2+u^2+R^2+2*x*R+2*x*u+2*R*u)*sin(1*pi/l*x),x,0,l);
p21=int((x.^2+u^2+R^2+2*x*R+2*x*u+2*R*u)*sin(3*pi/l*x),x,0,l);
p31=int((x.^2+u^2+R^2+2*x*R+2*x*u+2*R*u)*sin(5*pi/l*x),x,0,l);
p12=int(du*pi/l*cos(pi/l*x),x,0,l);
p22=int(du*3*pi/l*cos(3*pi/l*x),x,0,l);
p32=int(du*5*pi/l*cos(5*pi/l*x),x,0,l);
p13=int(sin(1*pi/l*x)/(x.^2+u^2+R^2+2*x*R+2*x*u+2*R*u),x,0,l);
p23=int(sin(3*pi/l*x)/(x.^2+u^2+R^2+2*x*R+2*x*u+2*R*u),x,0,l);
p33=int(sin(5*pi/l*x)/(x.^2+u^2+R^2+2*x*R+2*x*u+2*R*u),x,0,l);
neu=[rho*omega^2*p11-E*p12-rho*g*R^2*p13;
   rho*omega^2*p21-E*p22-rho*g*R^2*p23;
   rho*omega^2*p31-E*p32-rho*g*R^2*p33];
然后我在Command里引用
>> x0=;
>> options=optimset('Display','iter','Tolfun',1.0e-008, 'MaxFunEvals',1e20);
>> T=fsolve(@fun,x0,options);
一直有错误
??? Error using ==> sym.maple
Error, (in int) wrong number (or type) of arguments

Error in ==> sym.int at 51
   r = reshape(maple('map','int',f(:),),size(f));

Error in ==> fun at 16
p11=int((x.^2+u^2+R^2+2*x*R+2*x*u+2*R*u).*sin(1*pi/l*x),x,0,l);

Error in ==> fsolve at 180
      fuser = feval(funfcn{3},x,varargin{:});

[ 本帖最后由 eight 于 2007-11-22 11:31 编辑 ]

花如月 发表于 2007-11-22 10:26

如果编程功力不是多高,建议不要用太复杂的语句

尽量用简单的句法,容易理解,也容易排查错误

xjzuo 发表于 2007-11-22 16:50

你代码中的符号变量的用法不对,我改正后调试了一下,发现没有解析积分。
所以建议用数值积分试试。

karllukas 发表于 2007-11-23 00:56

谢谢xjzuo

怎么改正符号变量的用法呢?
我也考虑过用数值积分,可是积分里有未知量 a ,b, c,这样的情况也能用数值积分么?
我是刚学matlab的菜鸟,请多指教。

xjzuo 发表于 2007-11-23 11:10

看来你没有理解你的代码:未知量 a ,b, c不正是你的输入量吗?

karllukas 发表于 2007-11-27 03:42

我没表达清楚

我是要用fsolve来解非线性方程组,未知量是a,b,c。但是他们现在都在积分符号里面,这是我搞不定的。

xjzuo 发表于 2007-11-27 16:22

如果你理解了迭代的含义,就会明白 a ,b, c作为输入量在每次迭代中都是确定的。

karllukas 发表于 2007-11-27 20:08

明白了,我的方程不能用数值积分解了,谢谢xjzuo。

qa008001 发表于 2008-4-17 16:39

:loveliness: 好东西
页: [1]
查看完整版本: 求解非线性方程老是出错