[英]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.