24小时热门版块排行榜    

查看: 3482  |  回复: 19
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

521438

铜虫 (初入文坛)

[求助] 求助!matlab用fsolve函数求解非线性方程组的问题!

我要用fsolve函数求解一个非线性方程组,程序代码如下:
function p=fsolveDemon1
x0=unifrnd(0.1,0.1);
options=optimset('MaxFunEvals',20000,'MaxIter',2000);
p=fsolve(@f,x0,options);
function F=f(x)
syms I1 I2
F=[I1*x(1)^2*(3*x(3)*(x(1)^2+x(3)^2)^(-7/2)-7*x(3)^3*(x(1)^2+x(3)^2)^(-9/2))+I2*x(2)^2*(3*x(3)*(x(2)^2+x(3)^2)^(-7/2)-7*x(3)^3*(x(2)^2+x(3)^2)^(-9/2));
I1*x(1)^2*(-5*x(3)*(x(1)^2+x(3)^2)^(-9/2)+30*x(3)^3*(x(1)^2+x(3)^2)^(-11/2)-33*x(3)^5*(x(1)^2+x(3)^2)^(-13/2))+I2*x(2)^2*(-5*x(3)*(x(2)^2+x(3)^2)^(-9/2)+30*x(3)^3*(x(2)^2+x(3)^2)^(-11/2)-33*x(3)^5*(x(2)^2+x(3)^2)^(-13/2));
I1*x(1)^2*(35*x(3)*(x(1)^2+x(3)^2)^(-11/2)-385*x(3)^3*(x(1)^2+x(3)^2)^(-13/2)+1001*x(3)^5*(x(1)^2+x(3)^2)^(-15/2)-715*x(3)^7*(x(1)^2+x(3)^2)^(-17/2))+I2*x(2)^2*(35*x(3)*(x(2)^2+x(3)^2)^(-11/2)-385*x(3)^3*(x(2)^2+x(3)^2)^(-13/2)+1001*x(3)^5*(x(2)^2+x(3)^2)^(-15/2)-715*x(3)^7*(x(2)^2+x(3)^2)^(-17/2))];
    end
end
可是运行总是出现错误,请求各位高手帮帮我,我刚开始学习matlab,发现这个论坛特别好,刚刚注册,还没有太多的金币送给大家!不胜感激!!!
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Bruce_lee

铜虫 (著名写手)

【答案】应助回帖

★ ★
xiegangmai: 金币+2, 谢谢参与! 2013-03-25 23:02:38
function F = fsolveDemon1(x,I)
%FUN Summary of this function goes here
%   Detailed explanation goes here
F=[I(1).*x(1).^2.*(3*x(3).*(x(1).^2+x(3).^2).^(-7/2)-7*x(3).^3*(x(1).^2+x(3).^2).^(-9/2))+I(2).*x(2).^2.*(3*x(3).*(x(2).^2+x(3).^2).^(-7/2)-7*x(3).^3.*(x(2).^2+x(3).^2).^(-9/2))
I(1).*x(1).^2*(-5*x(3).*(x(1).^2+x(3).^2).^(-9/2)+30*x(3).^3.*(x(1).^2+x(3).^2).^(-11/2)-33*x(3).^5.*(x(1).^2+x(3).^2).^(-13/2))+I(2).*x(2).^2.*(-5*x(3).*(x(2).^2+x(3).^2).^(-9/2)+30*x(3).^3.*(x(2).^2+x(3).^2).^(-11/2)-33*x(3).^5.*(x(2).^2+x(3).^2).^(-13/2))
I(1).*x(1).^2.*(35*x(3).*(x(1).^2+x(3).^2).^(-11/2)-385*x(3).^3.*(x(1).^2+x(3).^2).^(-13/2)+1001*x(3).^5.*(x(1).^2+x(3).^2).^(-15/2)-715*x(3).^7.*(x(1).^2+x(3).^2).^(-17/2))+I(2).*x(2).^2.*(35*x(3).*(x(2).^2+x(3).^2).^(-11/2)-385*x(3).^3.*(x(2).^2+x(3).^2).^(-13/2)+1001*x(3).^5.*(x(2).^2+x(3).^2).^(-15/2)-715*x(3).^7.*(x(2).^2+x(3).^2).^(-17/2))];
end
这是第一个函数。将其保存成fsolveDemon1.m文件。
function fsolveDemon2
x0=[0.1,0.1,0.1];  % x0中元素的个数与方程中x个数对应相等,这里取都取0.1,也可自己修改。
options=optimset('MaxFunEvals',20000,'MaxIter',2000);
I=[1,2];  % 向量I有两个值元素。这里权且取值1和2,自己可改成需要的数值。
X=fsolve(@(x)fsolveDemon1(x,I),x0,options);
for i=1:50   %迭代次数50次,可以自己修改。
    [X,fval,exitflag]=fsolve(@(x)fsolveDemon1(x,I),X,options);
end
clc;
X=vpa(X,8)   %显示8为数字结果,如果想多显示几位或少显示几位,可以自己修改数值。
fval
exitflag
end
这是第二个函数。将其保存成fsolveDemon2.m文件。
使用时先将两个文件拷贝到matlab能够调用的指定文件夹中,然后在命令窗口输入fsolveDemon2,回车即可。
结果中fval的值如果趋近于0,并且同时exitflag=1,这说明X就是所要求的解。
努力就有收获!
20楼2013-03-25 01:03:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 20 个回答

521438

铜虫 (初入文坛)

送鲜花一朵
有人看到我的帖子么?大家知道么?帮我看一下。十分感谢!
2楼2012-05-07 20:49:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jinpeng_6118

木虫 (正式写手)

LZ你好,请问下 MatLab  5.2 这个软件哪里能有下载的?谢谢
人生百态原为海,看破红尘方为岸!
3楼2012-05-08 16:01:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

521438

铜虫 (初入文坛)

引用回帖:
3楼: Originally posted by jinpeng_6118 at 2012-05-08 16:01:50:
LZ你好,请问下 MatLab  5.2 这个软件哪里能有下载的?谢谢

为什么要5.2的呢?我用的是7.0的!需要的话,可以发给你!我也不知道哪里有5.2的,不好意思啊!
4楼2012-05-08 17:15:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见