4 python
我正在尝试编写一个非常简单的脚本,但我几乎没有编码经验,我在我的计算机上下载了 numpy 和 matplotlib 以及所有这些内容,并在一些帮助下编写了这个脚本,但不知道为什么有这么多错误。我已经通过该网站的问题修复了其中的一些错误。
我尝试过缩短它,但不知道为什么它不起作用。它的第一条 rho 行一直给我语法错误
print("airplane");
import numpy as np
import matplotlib.pyplot as plt
g = 32.2
rho = 0.00231
S = 279
W = 7000
c0 = 928
c1 = 0.1
c2 = -0.002
d0 = 0.2
d1 = 0.0015
V0 = 0
x0 = 0
alpha0 = np.radians(-7)
alpha_gr = np.radians(4)
efficiency = 0.9
lift_slope = np.radians(0.1167)
max_lift_coef = 2.1
dt = 0.05
def thrust(V):
return c0 + c1*V + c2*V**2
def drag_fuselage_tail(V):
return d0*V + d1*V**2
def lift(V, alpha):
return 0.5 rho V**2 S (lift_slope * alpha + max_lift_coef)
def drag(V, alpha):
return 0.5 rho V**2 S (0.009 + (lift_coef(V, alpha)**2) / (np.pi efficiency S))
def acceleration(V, alpha):
return (thrust(V) - drag(V, alpha) - drag_fuselage_tail(V)) / W - g * np.sin(alpha)
def rk4_step(V, x, alpha):
k1v = dt * acceleration(V, alpha)
k1x = dt * V
k2v = dt acceleration(V + (0.5)*k1v, alpha)
k2x = dt (V + (0.5)*k1v)
k3v = dt acceleration(V + (0.5)*k2v, alpha)
k3x = dt (V + (0.5)*k2v)
k4v = dt * acceleration(V + k3v, alpha)
k4x = dt * (V + k3v)
V += (k1v + 2*k2v + 2*k3v + k4v) / 6
x += (k1x + 2*k2x + 2*k3x + k4x) / 6
return V, x
def takeoff():
V = V0
x = x0
alpha = alpha0
iterations = 0
drag_values = []
thrust_values = []
while x >= 0:
V, x = rk4_step(V, x, alpha)
iterations += 1
drag_values.append(drag(V, alpha))
thrust_values.append(thrust(V))
if alpha == alpha0:
alpha = alpha_gr
return x, V, iterations, drag_values, thrust_values
SLO_distance, SLO_velocity, iterations, drag_values, thrust_values = takeoff()
time_to_liftoff = iterations * dt
print("Lift-off distance:", SLO_distance, "ft")
print("Lift-off velocity:", SLO_velocity, "ft/s")
print("Time to lift-off:", time_to_liftoff, "s")
print("RK4 iterations to lift-off:", iterations)
position = np.arange(0, SLO_distance, dt)
plt.plot(position, drag_values, label='Drag')
plt.plot(position, thrust_values, label='Thrust')
plt.xlabel('Position (ft)')
plt.ylabel('Force (lbs)')
plt.legend()
plt.title('Drag and Thrust vs. Position')
plt.grid(True)
plt.show()
Run Code Online (Sandbox Code Playgroud)
return 0.5 rho V**2 S (lift_slope * alpha + max_lift_coef)
Run Code Online (Sandbox Code Playgroud)
这就是问题。
在某些数学符号中,您可以将两个项并排书写,这意味着乘法,就像隐含的a b意思是“a 乘以 b”。
但 Python 并不是这样工作的。您需要明确地输入乘法符号:
return 0.5 * rho * V**2 * S * (lift_slope * alpha + max_lift_coef)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |