首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带线性约束的非线性方程组(初学者)

带线性约束的非线性方程组(初学者)
EN

Stack Overflow用户
提问于 2015-05-21 16:00:32
回答 2查看 3.3K关注 0票数 1

我见过这个惊人的例子。但我需要求解X和F上的边界系统,例如:

代码语言:javascript
运行
复制
    f1 = x+y^2 = 0
    f2 = e^x+ xy = 0
-5.5< x <0.18
2.1< y < 10.6
   # 0.15< f1 <20.5 - not useful for this example
   # -10.5< f2 < -0.16 - not useful for this example

我怎样才能把这个边界约束设为f_() of scipy呢?或者可能还有别的方法?你能给我一个简单的代码示例吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-21 22:53:53

这取决于系统,但在这里您可以简单地检查约束之后。

首先求解非线性系统,得到形式(x,y)的一个/无/多个解。然后检查这些解决方案中的哪一个满足约束条件。

票数 1
EN

Stack Overflow用户

发布于 2015-05-22 07:59:51

我希望这能为你服务。都是那里干的。

代码语言:javascript
运行
复制
import numpy as np
from scipy.optimize import minimize

def my_fun(z):
    x = z[0]
    y = z[1]

    f = np.zeros(2)
    f[0] = x + y ** 2
    f[1] = np.exp(x) + x * y
    return np.dot(f,f)

def my_cons(z):
    x = z[0]
    y = z[1]
    f = np.zeros(4)
    f[0] = x + 5.5
    f[1] = 0.18 - x
    f[2] = y - 2.1
    f[3] = 10.6 - y
    return f

cons = {'type' : 'ineq', 'fun': my_cons}
res = minimize(my_fun, (2, 0), method='SLSQP',\
           constraints=cons)
res

status: 0 success: True njev: 7 nfev: 29 fun: 14.514193585986144 x: array([-0.86901099, 2.1 ]) message: 'Optimization terminated successfully.' jac: array([ -2.47001648e-04, 3.21871972e+01, 0.00000000e+00]) nit: 7

编辑:作为对注释的响应:如果您的函数值f1f2不是零,您只需重写方程,例如:

f1 = -6和f2 =3

您的最小化功能将是:

代码语言:javascript
运行
复制
def my_fun(z):
    x = z[0]
    y = z[1]

    f = np.zeros(2)
    f[0] = x + y ** 2 + 6
    f[1] = np.exp(x) + x * y -3
    return np.dot(f,f)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30378861

复制
相关文章

相似问题

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