24小时热门版块排行榜    

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

kweewu

铜虫 (小有名气)

[求助] 求助大神解一个非线性方程组 已有1人参与

方程组形式如下:

x^2+y^2-2xycosω1=a^2
y^2+z^2-2yzcosω2=b^2
z^2+x^2-2zxcosω3=c^2

除去x,y,z外,其他均为常数
cosω1=0.37461
cosω2=0.24192
cosω3=0.17365

a=7.2
b=14.2
c=18.1

小弟菜鸟一个,使用excel规划求解得出x=9.759132,y=3.746134,z=15.8171,
目标函数选择为f=(x^2+y^2-2xycosω1-a^2)^2+(y^2+z^2-2yzcosω2-b^2)^2+(z^2+x^2-2zxcosω3=c^2)^2
最终的函数值f应该为0,但当取以上解时f=3333.691;
所以应该还有更精确的解。
因为没用过MATLAB,所以希望求得能解该方程组的MATLAB代码。
谢谢!

求助大神解一个非线性方程组
eq.png
回复此楼
PEMFC
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

kweewu

铜虫 (小有名气)

引用回帖:
6楼: Originally posted by 月只蓝 at 2015-08-11 16:09:25
不再用fsolve函数了,改用有约束的非线性最优化函数,求目标函数;(x^2+y^2-2*x*y*cos1-a^2)^2+(y^2+z^2-2*y*z*cos2-b^2)^2+(z^2+x^2-2*z*x*cos3-c^2)^2的最小值,然后附加x y z大于0的约束。...

谢谢!我应该如何操作才能采用您的应助?找了一会儿没找到这个选项o(╯□╰)o
PEMFC
7楼2015-08-11 16:26:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 9 个回答

月只蓝

主管区长 (职业作家)

【答案】应助回帖

感谢参与,应助指数 +1
不存在满足f=0的解。

使得f尽量小的解:
   8.063894135668461
   0.049339384803544
-14.560697883414663

或者:
  -8.063894144363893
  -0.049339340193223
  14.560697881727988

MATLAB代码:
CODE:
function solve_eq
clear all;clc
format long
global a b c cos1 cos2 cos3

cos1=0.37461;
cos2=0.24192;
cos3=0.17365;

a=7.2;
b=14.2;
c=18.1;


x0=[-1 0 0];

options=optimset('TolFun',1e-9);
[x fval]=fsolve(@fun,x0,options);
[x;fval]'
x'


function f=fun(u)

global a b c cos1 cos2 cos3

x=u(1);
y=u(2);
z=u(3);

f(1)=x^2+y^2-2*x*y*cos1-a^2;
f(3)=y^2+z^2-2*y*z*cos2-b^2;
f(2)=z^2+x^2-2*z*x*cos3-c^2;

» 本帖已获得的红花(最新10朵)

MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
2楼2015-08-11 13:09:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

kweewu

铜虫 (小有名气)

送红花一朵
引用回帖:
2楼: Originally posted by 月只蓝 at 2015-08-11 13:09:22
不存在满足f=0的解。

使得f尽量小的解:
   8.063894135668461
   0.049339384803544
-14.560697883414663

或者:
  -8.063894144363893
  -0.049339340193223
  14.560697881727988

MATLAB代码:
...

您好!忘了说了,x,y,z均是正数,这样怎样相应的修改一下代码呢?
PEMFC
3楼2015-08-11 15:46:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)

【答案】应助回帖

引用回帖:
3楼: Originally posted by kweewu at 2015-08-11 15:46:12
您好!忘了说了,x,y,z均是正数,这样怎样相应的修改一下代码呢?...

如果要求x y z大于0,我想你的计算结果已经是最优了:
x= 9.75912727167921
y= 3.74632253182401
z=15.8171084695522
此时
(x^2+y^2-2*x*y*cos1-a^2)^2+(y^2+z^2-2*y*z*cos2-b^2)^2+(z^2+x^2-2*z*x*cos3-c^2)^2 =3333.69114238958;
MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
4楼2015-08-11 16:00:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见