Python中如何将z存储为多值变量避免循环中被重写?
代码修改方案
原代码存在的问题
- 缩进错误:
z=[]定义、for循环、return语句均未缩进至equation1函数作用域内,运行时会报变量未定义错误 - 列表逻辑错误:初始化了空列表
z,但循环内直接使用赋值语句z = xxx覆盖了列表对象,没有将每次循环的计算结果存入列表 - return位置错误:return放在了for循环内部,第一次循环执行完成就会直接返回结果,不会完成所有时间步的计算
- 运算优先级隐患:原代码中
Fpeak/k*td的写法默认优先级为(Fpeak/k)*td,和常规同场景公式逻辑的Fpeak/(k*td)不符
修改后的完整代码
import numpy as np def equation1(m,k,x,deltat): Fpeak = 1000 + 9 * x**2 - 183 * x td = 20 - 0.12 * x**2 + 4.2 * x w = np.sqrt(k/m) T = 2 * np.pi / w time = np.arange(0,2*T,deltat) z = [] for t in time: if t <= td: current_z = (Fpeak/k) * (1 - np.cos(w*t)) + (Fpeak/(k*td)) * ((np.sin(w*t)/w) - t) else: current_z = (Fpeak/(k*w*td)) * (np.sin(w*t) - np.sin(w*(t-td))) - ((Fpeak/k) * np.cos(w*t)) z.append(current_z) return z print(equation1(200,1000,0,0.001))
如果确认原Fpeak/k*td的写法符合你的计算需求,把对应位置的括号删除即可。
内容的提问来源于stack exchange,提问作者Luna
相关产品推荐
相关产品推荐

