声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1258|回复: 8

[编程技巧] 求解非线性方程老是出错

[复制链接]
发表于 2007-11-22 10:24 | 显示全部楼层 |阅读模式

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

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

x
大家帮忙给看看吧,都折腾俺一个月的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=[0;0;0];
>> 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(:),[x.s '=(' a.s ')..(' b.s ')']),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 | 显示全部楼层
如果编程功力不是多高,建议不要用太复杂的语句

尽量用简单的句法,容易理解,也容易排查错误
发表于 2007-11-22 16:50 | 显示全部楼层
你代码中的符号变量的用法不对,我改正后调试了一下,发现没有解析积分。
所以建议用数值积分试试。
 楼主| 发表于 2007-11-23 00:56 | 显示全部楼层

谢谢xjzuo

怎么改正符号变量的用法呢?
我也考虑过用数值积分,可是积分里有未知量 a ,b, c,这样的情况也能用数值积分么?
我是刚学matlab的菜鸟,请多指教。
发表于 2007-11-23 11:10 | 显示全部楼层
看来你没有理解你的代码:未知量 a ,b, c不正是你的输入量吗?
 楼主| 发表于 2007-11-27 03:42 | 显示全部楼层

我没表达清楚

我是要用fsolve来解非线性方程组,未知量是a,b,c。但是他们现在都在积分符号里面,这是我搞不定的。
发表于 2007-11-27 16:22 | 显示全部楼层
如果你理解了迭代的含义,就会明白 a ,b, c作为输入量在每次迭代中都是确定的。
 楼主| 发表于 2007-11-27 20:08 | 显示全部楼层

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

发表于 2008-4-17 16:39 | 显示全部楼层
:loveliness: 好东西
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-26 04:23 , Processed in 0.062322 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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