繁体   English   中英

SciPy。 我如何解决微分方程?

[英]SciPy. How i can solve differential equation?

我的系统是:

d2x/dt = -k/m * dx/dt, dx/dt(0) = v0_x, x(0) = 0

d2y/dt = -g - k/m * dy/dt, dy/dt(0) = v0_y, y(0) = 0

k、m、v0_x、v0_y 和 g 是常数。

我正在这样做,但我认为这是错误的,因为这是一个运动方程,时间范围从 0 到 10,不能为负。 图形

from scipy import integrate
from math import sin, cos
import numpy as np
import matplotlib.pyplot as plt

g = 9.81

class SolveSystemOfADifferentialEquations:
    def __init__(self, k, angle, v0, m):
        self.k = k
        self.angle = angle
        self.m = m
        self.v0 = v0
        self.v0_x = self.v0 * cos(self.angle)
        self.v0_y = self.v0 * sin(self.angle)
        self.kdivm = self.k / self.m
        self.time = np.arange(0, 10, 0.05)

    def xmodel(self, X, t):
        x = X[0]
        dx = X[1]
        zdot = [ [], [] ]
        zdot[0] = dx
        zdot[1] = -self.kdivm * x
        return zdot

    def ymodel(self, Y, t):
        y = Y[0]
        dy = Y[1]
        zdot = [ [], [] ]
        zdot[0] = dy
        zdot[1] = -g - self.kdivm * y
        return zdot

    def solveX(self):
        x = integrate.odeint(self.xmodel, [0, self.v0_x], self.time)
        return x

    def solveY(self):
        y = integrate.odeint(self.ymodel, [0, self.v0_y], self.time)
        return y

k, angle, v0, m = 0.001, 60, 5, 0.1
Solver = SolveSystemOfADifferentialEquations(k, angle, v0, m)
x = Solver.solveX()
y = Solver.solveY()
plt.plot(x, y)
plt.show()

您给出了以下等式:

d2x/dt = -k/m * dx/dt

但是在你设置的代码中

zdot[1] = -self.kdivm * x

所以你要求的和你编程的不匹配

那会是个问题吗?

此外,如果您将 k 设置为更大的值,您将看到周期性振荡......所以我认为您的代码是正确的

我认为你有一个负值,因为你使用度数而不是弧度作为角度

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM