首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有为scipy.optimize.root或scipy.optimize.fsolve动态创建非线性方程的好方法?

有没有为scipy.optimize.root或scipy.optimize.fsolve动态创建非线性方程的好方法?
EN

Stack Overflow用户
提问于 2018-10-10 14:31:58
回答 1查看 272关注 0票数 4

我需要解决一个大型的非线性方程组(静态桁架系统)。这些方程是从节点(xyz)及其约束(位置、力)导出的。

目前,我们使用Mathematica来完成此任务,但我们希望迁移到Python。但是使用Mathematica (或者工程方程解算器)或者SymPy是非常方便的。我把一堆东西放在节点位置上,或者节点上的力上,它就会变魔术,自己创建方程,结合输入并求解它们。

如果我想使用scipy.optimize.root,我必须以某种方式获得这些方程。

scipy.optimize.rootscipy.optimize.fsolve需要以下格式的方程式:

代码语言:javascript
运行
复制
def func(x):
    out = [x[0]*cos(x[1]) - 4], 
           x[1]*x[0] - x[1] - 5)
    return out

但在我的例子中,将有多达5000个方程式来定义系统。

我想到的一件事是使用eval()并以某种方式将方程式转换为字符串。

最后,我希望有一种面向对象的方法,其中节点或约束知道如何将自身转换为方程。一个非常简单的骨架可能是

代码语言:javascript
运行
复制
n = Node(5, 2, 6)
n.to_equation()

f = ForceConstraint(1, 2, 3)
f.to_equation()

这会以某种方式转化为如下方程

代码语言:javascript
运行
复制
x[0] - 5, 
x[1] - 2,
x[2] - 6,
x[2] ** 2 - x[1] * x[0] # and some non-linear stuff

来描述整个系统。

基本上,应该有一些神奇的部分,看看方程和约束的匹配部分。例如,查看Node1的x方向上的所有信息并将其合并到方程中,或者在Node2上搜索y方向上的力的所有信息。

对于这项工作,scipy是正确的工具吗?有没有人知道该怎么做?

EN

回答 1

Stack Overflow用户

发布于 2018-10-12 17:07:36

我想你可能会对symfit感兴趣。这是我用来连接scipysympy的一个包。

我不能确切地确定您的特定等式是什么,但是您可以用sympy编写的任何表达式原则上都可以提供给symfit。例如,对于上面的简单示例,您可以这样写:

代码语言:javascript
运行
复制
from symfit import parameters, variables, Fit
import numpy as np

x0, x1, x2 = parameters('x0, x1, x2')
y0, y1, y2, y3 = variables('y0, y1, y2, y3')

model_dict = {
    y0: x0 - 5,
    y1: x1 - 2,
    y2: x2 - 6,
    y3: x2 ** 2 - x1 * x0
}

fit = Fit(model_dict, y0=np.array(0.0), y1=np.array(0.0), y2=np.array(0.0), y3=np.array(0.0))
fit_result = fit.execute()
print(fit_result)

symfit中的VariableParameter对象就是渐近表达式的子类,因此您可以对这些表达式执行您想要的所有渐近操作。例如,您可以将Node定义为

代码语言:javascript
运行
复制
>>> x, x_0 = symbols('x, x_0')
>>> Node = x - x_0

然后通过重复应用例如:

代码语言:javascript
运行
复制
>>> Node.subs({x: x1, x_0: 2})
x1 - 2

最后,你添加你的约束和presto: fittable model!请查看docs了解更多信息,或向我询问任何后续问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52733969

复制
相关文章

相似问题

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