24小时热门版块排行榜    

查看: 1294  |  回复: 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的回帖

月只蓝

主管区长 (职业作家)

【答案】应助回帖

感谢参与,应助指数 +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的回帖

kweewu

铜虫 (小有名气)

引用回帖:
4楼: Originally posted by 月只蓝 at 2015-08-11 16:00:32
如果要求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) ...

谢谢!那如此在您的代码上要怎样使x,y,z都是正数呢?
PEMFC
5楼2015-08-11 16:03:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)

【答案】应助回帖

引用回帖:
5楼: Originally posted by kweewu at 2015-08-11 16:03:34
谢谢!那如此在您的代码上要怎样使x,y,z都是正数呢?...

不再用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的约束。
MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
6楼2015-08-11 16:09:25
已阅   回复此楼   关注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的回帖

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的约束。...

改用有约束的非线性最优化函数,附加x y z大于0的约束,这个代码该怎么写呢?
PEMFC
8楼2015-08-11 16:30:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
kweewu: 金币+30, ★★★★★最佳答案, 非常感谢您的耐心帮助! 2015-08-11 17:07:24
引用回帖:
8楼: Originally posted by kweewu at 2015-08-11 16:30:11
改用有约束的非线性最优化函数,附加x y z大于0的约束,这个代码该怎么写呢?...

CODE:
function youhua
clear all;clc
format long


A=[-1 0 0
    0 -1 0
    0 0 -1];
b=[0 0 0];
x0=[1 1 1];

[x fval]=fmincon(@fun,x0,A,b)





function f=fun(u)
cos1=0.37461;
cos2=0.24192;
cos3=0.17365;

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



x=u(1);
y=u(2);
z=u(3);
f=(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分别=

   9.759125101118036   3.746323040238880  15.817108773681586


目标函数值fval =

    3.333691142391446e+003

上述代码须完整复制进一个新建的m文件中,运行即可,不能在主程序窗口运行。
MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
9楼2015-08-11 16:47:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 kweewu 的主题更新
信息提示
请填处理意见