加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 如何解决Sympy中的非线性方程?

发布时间:2020-12-16 22:49:06 所属栏目:Python 来源:网络整理
导读:如何解决SymPy中非线性方程的形式 y = P*x + Q + sqrt(S*x + T) 我知道y(0),y'(0),y(c),y'(c).我想找到P,Q,S和T.并将y表示为x的函数. 我对文档感到非常困惑.请帮忙. 最佳答案 注意:我的观点挂在你y = P * x Q sqrt(S * x T)的原始方程上. 我将使用y = P * x

如何解决SymPy中非线性方程的形式

y = P*x + Q + sqrt(S*x + T)

我知道y(0),y'(0),y(c),y'(c).我想找到P,Q,S和T.并将y表示为x的函数.

我对文档感到非常困惑.请帮忙.

最佳答案
注意:我的观点挂在你y = P * x Q sqrt(S * x T)的原始方程上.
我将使用y = P * x Q x * x *(S * x T)只是为了能够演示同情解算器的工作原理(当它工作时).

战略:

>将y表示为其他变量(x,P,S,T)的函数
>区分你
>使用已知常数(0,c,y(0),y'(c))设置4个方程式
>使用sympy解决
>打印每种可能的解决方案(如果有的话)

码:

# Set up variables and equations
x,y,T,= sympy.symbols('x y P Q S T')
c,y_0,y_c,dy_0,dy_c = sympy.symbols('c y_0 y_c dy_0 dy_c')
eq_y = P * x + Q + x * x * (S * x + T)
eq_dy = eq_y.diff(x)

# Set up simultaneous equations that sympy will solve
equations = [
    (y_0 - eq_y).subs(x,0),(dy_0 - eq_dy).subs(x,(y_c - eq_y).subs(x,c),(dy_c - eq_dy).subs(x,c)
]

# Solve it for P,S and T
solution_set = sympy.solve(equations,set = True) 

# Extract names,individual solutions and print everything
names = solution_set[0]
solutions = list(solution_set[1])
for k in range(len(solutions)):
    print('Solution #%d' % (k+1))
    for k2,name in enumerate(names):
        print('t%s: %s' % (name,solutions[k][k2]) )

输出:

Solution #1
    P: dy_0
    Q: y_0
    S: (c*(dy_0 + dy_c) + 2*y_0 - 2*y_c)/c**3
    T: (-c*(2*dy_0 + dy_c) - 3*y_0 + 3*y_c)/c**2

您现在可以使用这些解决方案中的一个并执行另一个.subs(…)来将y作为一个纯粹由常量和x组成的函数.

至于你原来的等式…我想知道是否有人应该提交一个错误报告,以便他们可以改进它……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读