首页 > 解决方案 > 用 sympy 求解一个非线性方程和一个微分方程以找出最大值

问题描述

我要解决的两个方程如下:

1.:

y 和 x 是用户输入,所以只有 t 和 z 是未知的

0 = y + t*sqrt((15/3.6)**2 - (x/t)**2) - (abs((30 / 3.6) * (t + z - 25200 - 1800)) + ((30 / 3.6) * (t + z - 25200 - 1800)) / 2)

2.:

d/dt(z) = 0 我想找出可能的最高 z 值的 t。

我尝试了多个命令,例如

func = y + t*sqrt((15/3.6)**2 - (x/t)**2) - (abs((30 / 3.6) * (t + z - 25200 - 1800)) + ((30 / 3.6) * (t + z - 25200 - 1800)) / 2)
result = dsolve(Derivative(z, t), func)

但输出是:ValueError: dsolve() 和分类_ode() 仅适用于一个变量的函数,而不是 [...]

问题1:python有没有办法通过使用t(z = ...)来定义z?如果没有,有没有办法摆脱 abs(),我只希望 (30 / 3.6) * (t + z - 25200 - 1800) 不是负数。

问题 2:我可以将方程 z 区分为 t 吗?

标签: python-3.xsympy

解决方案


我对 sympy 不太熟悉,但您的示例代码的问题是您有 2 个未知数,只有 1 个方程。所以,只有3种情况:

  • z 和 t 都是 0,你就完成了
  • z 或 t 之一为 0,将该变量设置为 0 并求解
  • z 和 t 都不是 0,因此 z 和 t 都有自己的一组可能值

所以我想我更具体的回答是:你的ValueError意思是什么。

这是我在 Python 中找到的用于解决 DE 的另一个资源。


推荐阅读