import sympy as smp from matplotlib import pyplot as plt import numpy as nmp from scipy.integrate import solve_ivp p = 1.225 # air density m = 0.003 # mass of the plane a = (9.3/180)*nmp.pi # angle of attack ar = 0.86 # aspect ratio s = 0.017 # wing area g = 9.807 # acceleration of free fall cla = (nmp.pi*ar)/1+nmp.sqrt(1+(ar/2)**2) # lift slope derivative cl = cla*a # lift coefficient e = 0.9 # oswald efficiency factor ε = 1/(nmp.pi*e*ar) # induced darg factor cd = 0.02 + ε*(cl**2) def airplane(t,f): v, γ, h, r = f return [-cd(p*v**2)*s/(2*m)-g*nmp.sin(γ), ((cl*(p*v**2/2))-g*nmp.cos(γ))/v, v*nmp.sin(γ), v*nmp.cos(γ)] solution = solve_ivp(airplane, (0,1000),[3.7,((-11/180)*nmp.pi),2.0,0.0]) print(solution)
时间: 2023-12-29 13:05:27 浏览: 221
你的代码中有一个问题导致出现错误:
```python
cla = (nmp.pi*ar)/1+nmp.sqrt(1+(ar/2)**2)
```
在这行代码中,你需要将分母部分 `(1+nmp.sqrt(1+(ar/2)**2))` 用括号括起来,因为除法运算符 `/` 的优先级高于加法运算符 `+`。修正后的代码如下:
```python
cla = (nmp.pi*ar)/(1+nmp.sqrt(1+(ar/2)**2))
```
此外,你使用了 `cd(p*v**2)` 来调用函数 `cd`,但是在之前的代码中没有定义这个函数。如果 `cd` 是一个自定义的函数,请确保它已经被正确定义。如果 `cd` 是一个库函数,你需要检查是否正确导入了相关的库并能够访问该函数。
请修正以上问题后再次运行代码,如果仍然有错误,请提供完整的错误消息以供进一步调试。
相关问题
import matplotlib.pyplot as plt import matplotlib as mpl import numpy as np from scipy import integrate import sympy import mpmath
这段代码导入了matplotlib、numpy、scipy、sympy和mpmath这五个库。其中,matplotlib是用于画图的库,numpy是用于数值计算的库,scipy是用于科学计算的库,sympy是用于符号计算的库,mpmath是用于高精度计算的库。这些库都是Python中常用的科学计算库。
from sympy import * from math import * import numpy as np from matplotlib import pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签 plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号 import numpy as np import matplotlib.pyplot as plt from sympy import * # 用于求导积分等科学计算 # 一元一次函数图像 def fun_format(): plt.xlabel('x') plt.ylabel('y') plt.xlim((-10,10)) plt.ylim((-20,20)) plt.tight_layout() x,y = symbols('x y') # 引入x y变量 expr = log(x)# 计算表达式 x_value = [] # 用于保存x值 y_value = [] # 用于保存y值 y_value_dif = [] # 用于保存一阶导数值 expr_dif = diff(expr,x,1) for i in np.arange(-10,10,0.1): x_value.append(i) y_value.append(expr.subs('x',i)) # 将i值代入表达式 y_value_dif.append(expr_dif.subs('x',i)) # 将i值代入一阶求导表达式 fig=plt.figure() ax1=fig.add_subplot(2,1,1) # plt.title('f(x)='+str(expr)) fun_format() ax1.plot(x_value,y_value) # 画原函数图 ax2=fig.add_subplot(2,2,3) plt.title('f(x)_dot='+str(expr_dif)) fun_format() ax2.plot(x_value,y_value_dif) # 画一阶导数图
这段代码的作用是画出对数函数的图像及其一阶导数图像。具体来说,代码中:
- 引入了 matplotlib 和 sympy 库。
- 定义了一个函数 `fun_format()`,用于设置坐标轴范围、标签等格式。
- 定义了变量 x 和 y。
- 定义了表达式 `expr = log(x)`,这是对数函数的表达式。
- 计算了 x 和 y 的值,存储在 `x_value` 和 `y_value` 两个列表中。这里使用了 sympy 库中的 `subs()` 函数将 x 的值代入表达式中计算 y 的值。
- 计算了对数函数的一阶导数表达式 `expr_dif = diff(expr,x,1)`。
- 计算了一阶导数的值,存储在 `y_value_dif` 列表中。
- 使用 matplotlib 库画出对数函数图像和一阶导数图像。
需要注意的是,这段代码中没有对 x 取大于0的值,因此在 x=0 时会出现错误。另外,代码中的注释比较少,可读性有些欠缺,建议加上更详细的注释。
阅读全文
相关推荐














