如何求解一个非线性方程?

2024-09-28 03:16:36 发布

您现在位置:Python中文网/ 问答频道 /正文

怎样解一个非线性方程,它的形式是

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

我知道y(0)y'(0)y(c)y'(c)。我想找到PQS和{}。{cd9}的{cd9}表示^函数。在

我对文件很困惑。请帮忙。在


Tags: 文件函数sqrt形式方程cd9
2条回答

目前解算器在求解含有更多sqrt的方程组时存在一些问题。因此在下面的代码中,首先删除sqrt,然后解决方程式。当前求解器对于这些类型的方程并不快,它需要大约10秒来执行。在

P, Q, S, T,  = symbols('P Q S T')
c, y_0, y_c, dy_0, dy_c = symbols('c y_0 y_c dy_0 dy_c')
eq_y = (P*x + Q - y(x))**2 + S*x + T
eq_dy = eq_y.diff(x)
equations = [
  (eq_y).subs([(x, 0), (y(0), y_0), (y(x).diff(x).subs(x, 0), dy_0)]),
  (eq_dy).subs([(x, 0), (y(0), y_0), (y(x).diff(x).subs(x, 0), dy_0)]),
  (eq_y).subs([(x, c), (y(c), y_c), (y(x).diff(x).subs(x, c), dy_c)]),
  (eq_dy).subs([(x, c), (y(c), y_c), (y(x).diff(x).subs(x, c), dy_c)])
 ]
solve(equations, P, Q, S, T)

回答:

^{pr2}$

请交叉核对答案。在

注:我对你最初的y = P*x + Q + sqrt(S*x + T)方程式表示同情。 我将使用y = P*x + Q + x*x*(S*x + T)来演示sympy解算器是如何工作的(当它工作时)。在

策略:

  • 将y表示为其他变量(x,P,Q,S,T)的函数
  • 区分y
  • 用已知常数(0,c,y(0),y(c),y'(0),y'(c))建立4个方程
  • 使用sympy solve
  • 打印每个可能的解决方案(如果有)

代码:

# Set up variables and equations
x, y, P, Q, S, 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, 0),
    (y_c - eq_y).subs(x, c),
    (dy_c - eq_dy).subs(x, c)
]

# Solve it for P, Q, S and T
solution_set = sympy.solve(equations, P, Q, S, T, 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]) )

输出:

^{pr2}$

现在,您可以使用其中一个解决方案,并执行另一个.subs(...)来获得{}作为一个纯粹由常量和x组成的函数。在

至于你最初的方程式。。。我想知道是否有人应该为sympy提交一个错误报告,以便他们能够改进它。。。:)

相关问题 更多 >

    热门问题