求解非线性方程老是出错
大家帮忙给看看吧,都折腾俺一个月的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 编辑 ] 如果编程功力不是多高,建议不要用太复杂的语句
尽量用简单的句法,容易理解,也容易排查错误 你代码中的符号变量的用法不对,我改正后调试了一下,发现没有解析积分。
所以建议用数值积分试试。
谢谢xjzuo
怎么改正符号变量的用法呢?我也考虑过用数值积分,可是积分里有未知量 a ,b, c,这样的情况也能用数值积分么?
我是刚学matlab的菜鸟,请多指教。 看来你没有理解你的代码:未知量 a ,b, c不正是你的输入量吗?
我没表达清楚
我是要用fsolve来解非线性方程组,未知量是a,b,c。但是他们现在都在积分符号里面,这是我搞不定的。 如果你理解了迭代的含义,就会明白 a ,b, c作为输入量在每次迭代中都是确定的。明白了,我的方程不能用数值积分解了,谢谢xjzuo。
:loveliness: 好东西
页:
[1]