首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用“`fsolve`”解n个未知数的m方程( n<m )

用“`fsolve`”解n个未知数的m方程( n<m )
EN

Stack Overflow用户
提问于 2019-04-24 14:17:11
回答 1查看 649关注 0票数 0

假设我有两个方程,其中一个未知,我想使用fsolve来解决这个问题:

代码语言:javascript
复制
0 = 0.5*x[0]**2-2
0 = 2-x

答案显然是x=2。我试过这个

代码语言:javascript
复制
import numpy as np; from scipy.optimize import fsolve
def f(x):
    r  = np.zeros(2)
    r[0] =  0.5*x[0]**2-2
    r[1] = 2-x[0]

    return r

fsolve(f,[0.5])

错误消息是“调用之间更改大小的函数返回的数组”

我看不出这里出了什么问题。我该如何解决这个问题?

一般情况下,当变量数小于方程数时,如何求解方程。

这是完整的信息

代码语言:javascript
复制
Traceback (most recent call last):

  File "<ipython-input-37-e4f77791f3f6>", line 12, in <module>
    fsolve(f,[0.5])

  File "... anaconda3/lib/python3.7/site-packages/scipy/optimize/minpack.py", line 148, in fsolve
    res = _root_hybr(func, x0, args, jac=fprime, **options)

  File ".... /anaconda3/lib/python3.7/site-packages/scipy/optimize/minpack.py", line 227, in _root_hybr
    ml, mu, epsfcn, factor, diag)

ValueError: The array returned by a function changed size between calls
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-26 00:52:01

对于过确定的系统(方程的数量大于变量的数量),您需要使用例如最小二乘法。在这种情况下,通常没有传统意义上的解决办法。我们需要定义,我们应该把什么作为系统的解决方案。

让你有一个有一个标量变量的两个方程组:

f(x) =0 g(x) =0

这种系统通常不一致,在传统意义上没有解决办法。

让我们将一些值eps1和eps2添加到系统的右侧:

f(x) =0+ eps1 g(x) =0+ eps2

eps1和eps2是一些价值;

现在,当x的最小值上升时,让我们找到这样的eps1^2 + eps2^2;这将是最小二乘意义上的系统的解决方案。

要获得这样的解决方案,您可以使用正方形函数。

让我们看一看下面的代码,它解决了您的方程组:

代码语言:javascript
复制
import numpy as np
from scipy.optimize import fsolve, least_squares
def f(x):
    r  = np.zeros(2)
    r[0] =  0.5*x**2-2
    r[1] = 2-x

    return r

least_squares(f, [0.0])

结果:

代码语言:javascript
复制
active_mask: array([0.])
        cost: 5.175333019854869e-20
         fun: array([ 2.87759150e-10, -1.43879575e-10])
        grad: array([7.19397879e-10])
         jac: array([[ 2.00000001],
       [-1.        ]])
     message: '`gtol` termination condition is satisfied.'
        nfev: 6
        njev: 6
  optimality: 7.193978788924559e-10
      status: 1
     success: True
           x: array([2.])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55832267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档