当前位置: 首页 > 程序语言 >复杂方程组求解

复杂方程组求解

作者 请叫我呼呼呼
来源: 小木虫 200 4 举报帖子
+关注

syms x1 x2 x3 x4 x5 x6 x7 x8

eqn1 = (x1-x2)*(1-x1-x3+x2+x4+x6+x7)-1.63734*10^(-13)*(1-2*x1-x3)^2;
eqn2 = (x2-x3)*(x2+x4+x7)-5752818*(x1-x2)*(1-x1-x3+x2+x4+x6+x7);
eqn3 = (x3-x4)*(1-x1-x3+x2+x4+x6+x7)-2.17528*10^(-12)*(x2-x3)*(1-2*x1-x3);
eqn4 = (x2+x4+x7)*(x4-x5)-285869.4*(x3-x4)*(1-x1-x3+x2+x4+x6+x7);
eqn5 = x5-x6-x7-8.26*10^(-5)*(x4-x5);
eqn6 = (x6-2*x8)*x6-1.10948*10^15*(x5-x6-x7)*(1-x1-x3+x2+x4+x6+x7);
eqn7 = x7*(x2+x4+x7)-4254857432*(x5-x6-x7)*(1-x1-x3+x2+x4+x6+x7);
eqn8 = x8^2-0.000750773*(x6-2*x8)^2;

eqn1=matlabFunction(eqn1)
eqn2=matlabFunction(eqn2)
eqn3=matlabFunction(eqn3)
eqn4=matlabFunction(eqn4)
eqn5=matlabFunction(eqn5)
eqn6=matlabFunction(eqn6)
eqn7=matlabFunction(eqn7)
eqn8=matlabFunction(eqn8)

f=@(x)[eqn1(x(1),x(2),x(3),x(4),x(6),x(7));
    eqn2(x(1),x(2),x(3),x(4),x(6),x(7));
    eqn3(x(1),x(2),x(3),x(4),x(6),x(7));
    eqn4(x(1),x(2),x(3),x(4),x(5),x(6),x(7));
    eqn5(x(4),x(5),x(6),x(7));
    eqn6(x(1),x(2),x(3),x(4),x(5),x(6),x(7),x(8));
    eqn7(x(1),x(2),x(3),x(4),x(5),x(6),x(7));
    eqn8(x(6),x(8))]

options = optimoptions('fsolve','algorithm','levenberg-marquardt')
[x,exitflag]=fsolve(f,[1 1 1 1 1 1 1 1],options)


这是程序,但是猜测的初始值不同解出来的结果就不同。我并不知道初始值的大概是多少。 有没有不用猜测初始值的方法。或者说怎么加一些不等式限制结果? 返回小木虫查看更多

今日热帖
  • 精华评论
  • Mr__Right

    这个严格来说,没有精确的实数解。只能在复数域上求精确的解。

    或者,求残差某种意义下最小的解,用最优化的办法

  • 请叫我呼呼呼

    引用回帖:
    2楼: Originally posted by Mr__Right at 2017-07-23 19:30:15
    这个严格来说,没有精确的实数解。只能在复数域上求精确的解。

    或者,求残差某种意义下最小的解,用最优化的办法

    解出来的是实数解,只不过修改了初始猜测后,结果就变了,我现在这个解出来的结果有些不符合实际。所以想试着看能不能再加上一些不等式对一些式子进行限制,这样结果可能会更符合我的需要。

  • Mr__Right

    转化为极值问题之后,这类问题常有多个局部极值点,所以,迭代法收敛到局部极值点或者鞍点很正常

    {x1=0.6355106711326112, x2=-0.1030334431563012,
    x3=0.35402353260730507, x4=0.3456964184083561,
    x5=-0.2531286421850123, x6=-0.46081051722303384,
    x7=0.2076817467914361, x8=-0.42714029617040405}

    {x1=0.9028736908415601, x2=0.48571680999216704,
    x3=-0.43455809512663685, x4=-0.9741912923385155,
    x5=-0.043209954815936744, x6=-0.03908048783795981,
    x7=-0.004129453990300291, x8=0.43950983982809383}

  • 请叫我呼呼呼

    引用回帖:
    4楼: Originally posted by Mr__Right at 2017-07-23 19:38:26
    转化为极值问题之后,这类问题常有多个局部极值点,所以,迭代法收敛到局部极值点或者鞍点很正常

    {x1=0.6355106711326112, x2=-0.1030334431563012,
    x3=0.35402353260730507, x4=0.3456964184083561,
    x5=- ...

    那有没有办法在这个里面再加一些不等式限制呢? 比如说让x1-x2)、(1-x1-x3+x2+x4+x6+x7)等等这些都大于0

猜你喜欢
下载小木虫APP
与700万科研达人随时交流
  • 二维码
  • IOS
  • 安卓