matlab出现untitled11,用1stOpt解出非线性方程组的解作为初值用Matlab求解,解不出来 - 计算模拟 - 小木虫 - 学术 科研 互动社区...

用1stOpt解出非线性方程组的解作为初值用Matlab求解,解不出来

这是一个非线性方程组(Matlab表示):CODE:

function  f= solveMagneticDipoleEquation(x)

%UNTITLED Summary of this function goes here

%   Detailed explanation goes here

%已知数

a=-150;

b=150;

Bx=-48030;

By=29370;

Bz=-19077.3;

%未知数

Bt=x(1);

c=x(2);

m=x(3);

n=x(4);

p=x(5);

Rl=sqrt(a.^2+b.^2+c.^2);

f(1)=Bt*(3*(m*a+n*b+p*c)*a/Rl.^5-m/Rl.^3)/Bx-1;

f(2)=Bt*(3*(m*a+n*b+p*c)*b/Rl.^5-n/Rl.^3)/By-1;

f(3)=Bt*(3*(m*a+n*b+p*c)*c/Rl.^5-p/Rl.^3)/Bz-1;

f(4)=m.^2+n.^2+p.^2-1;

end

用一开始建模型的人给的粗略的初始值范围,用默认设置选项,解出的解明显不对,警告提示要用Levenberg-Marquardt算法,后改用这种算法options=optimset('Display','iter','Algorithm','Levenberg-Marquardt'); 结果还是一样。

于是使用1stOpt软件,网上只能下载到免安装的1.5版本,使用如下代码:CODE:

Parameters Bt[10^10,10^12];

Parameters c[160,200];

Parameters m[-0.55,0.54];

Parameters n[-0.52,0.54];

Parameters p[0.65,1];

Parameters Rl;

Constant a=-150;

Constant b=150;

Constant Bx=-48030; //Bx,By,Bz是变参数,从文件中读出一行再解一次方程,对于每一组Bx,By,Bz需要求一次方程组

Constant By=29370;

Constant Bz=-19077.3;

//BatchFileModel;

//VarConstant Bx="Sheet1[A1:A240]";

//VarConstant By="Sheet1[B1:B240]";

//VarConstant Bz="Sheet1[C1:C240]";

//DataFile "D:\Mag1230.xls[Sheet1[A1:A240]]";

//RowDataSet;

//Bx="Sheet1[A1:A240]";

//By="Sheet1[B1:B240]";

//Bz="Sheet1[C1:C240]";

//EndRowDataSet;

Function Bt*(3*(m*a+n*b+p*c)*a/Rl^5-m/Rl^3)/Bx-1=0;

Bt*(3*(m*a+n*b+p*c)*b/Rl^5-n/Rl^3)/By-1=0;

Bt*(3*(m*a+n*b+p*c)*c/Rl^5-p/Rl^3)/Bz-1=0;

m^2+n^2+p^2-1=0;

Rl-sqrt(a^2+b^2+c^2)=0;

结果为:

====== 结果 ======

迭代数: 148

计算用时(时:分:秒:毫秒): 00:00:00:482

计算中止原因: 达到收敛判定标准

优化算法: 最大继承法

函数表达式 1: bt*(3*(m*(-150)+n*150+p*c)*(-150)/rl^5-m/rl^3)/(-48030)-1-(0)

2: bt*(3*(m*(-150)+n*150+p*c)*150/rl^5-n/rl^3)/29370-1-(0)

3: bt*(3*(m*(-150)+n*150+p*c)*c/rl^5-p/rl^3)/(-19077.3)-1-(0)

4: m^2+n^2+p^2-1-(0)

5: rl-sqrt((-150)^2+150^2+c^2)-(0)

目标函数值: 0

Bt: 999812590445.556

c: 161.888089867363

m: 0.401079546362512

n: -0.0464426102549249

p: 0.914865171182263

Rl: 266.847809885904

====== 计算结束 ======

当然每次运行结果都会有点不同,但大致都在这个范围内。

因为我要继续一步作分析,Bx, By, Bz是测试数据,要从表格中读出的,对应每一组数据求一次方程组,相当于变常量,按照上面注释中采用的两种方法,都没有达到我预期的效果,软件把它也当做变量去求解了,也有可能是用的方法不对,但我从手册中找不到其它方法了。因为Matlab编程方便,可以实现我的需求,于是我又转回Matlab,用1stOpt解出非线性方程组的解作为初值用Matlab求解,依然求不出解,除了算法的设置,误差和迭代次数的设置都是因为解不出正确的解,自己调的,但是依然没用。

结果为:

====== 结果 ======

迭代数: 148

计算用时(时:分:秒:毫秒): 00:00:00:482

计算中止原因: 达到收敛判定标准

优化算法: 最大继承法

函数表达式 1: bt*(3*(m*(-150)+n*150+p*c)*(-150)/rl^5-m/rl^3)/(-48030)-1-(0)

2: bt*(3*(m*(-150)+n*150+p*c)*150/rl^5-n/rl^3)/29370-1-(0)

3: bt*(3*(m*(-150)+n*150+p*c)*c/rl^5-p/rl^3)/(-19077.3)-1-(0)

4: m^2+n^2+p^2-1-(0)

5: rl-sqrt((-150)^2+150^2+c^2)-(0)

目标函数值: 0

Bt: 999812590445.556

c: 161.888089867363

m: 0.401079546362512

n: -0.0464426102549249

p: 0.914865171182263

Rl: 266.847809885904

====== 计算结束 ======

当然每次运行结果都会有点不同,但大致都在这个范围内。

因为我要继续一步作分析,Bx, By, Bz是测试数据,要从表格中读出的,对应每一组数据求一次方程组,相当于变常量,按照上面注释中采用的两种方法,都没有达到我预期的效果,软件把它也当做变量去求解了,也有可能是用的方法不对,但我从手册中找不到其它方法了。因为Matlab编程方便,可以实现我的需求,于是我又转回Matlab,用1stOpt解出非线性方程组的解作为初值用Matlab求解,依然求不出解,除了算法的设置,误差和迭代次数的设置都是因为解不出正确的解,自己调的,但是依然没用。CODE:

x0=[999999999999 161.9 0.401 -0.0465 0.9148 266.856];

options=optimset('Display','iter','MaxFunEvals',10^5,'TolFun',1e-18,'TolX',1e-18,'MaxIter',1e4,'Algorithm','Levenberg-Marquardt');

[x val]= fsolve(@solveMagneticDipoleEquation,x0,options);

请问:如何用Matlab可以解出这个方程组的解,或者用1stOpt可以实现我的分析需求?

有谁能给出一点建议,哪怕不一定是解决方法,Matlab里如何选择初值,用1stOpt解出的初值,为什么还是解不出来?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值