如何将Matlab用vpasolve数值解方程的代码翻译为Python并修复报错
问题修正方案
报错根因
- 符号运算与数值运算函数混用:你用了
np.sin()处理sympy符号变量alfa,numpy函数不支持符号类型输入,符号场景下必须使用sympy.sin() - 方程定义不匹配:Python代码的等式右侧漏掉了原Matlab代码中的
2*alfa项,逻辑完全不一致 - 求解函数不匹配:
sympy.solve()用于求解析解,对应Matlab的solve(),你需要的数值求解工具是sympy.nsolve(),等效于Matlab的vpasolve() - 索引越界风险:Python数组默认从0开始索引,你初始化的数组长度为6,从索引1开始赋值最终会超出数组范围
修正后完整代码
import numpy as np import sympy # 定义符号变量 alfa = sympy.Symbol('alfa') y = np.linspace(0, 100, 6) angleR = np.zeros((1, np.size(y))) i = 0 # 范围要包含100,所以右边界设为101 for x in range(0, 101, 20): p = x / 100 # 构建与Matlab完全一致的方程,使用sympy的符号sin eq = 2 * np.pi * (1 - p) - (2 * alfa - sympy.sin(2 * alfa)) # 数值求解,第二个参数为迭代初始猜测值,可根据需要的解范围调整 sol = sympy.nsolve(eq, alfa, 1) angleR[0, i] = np.rad2deg(float(sol)) i += 1 print(angleR)
补充说明
如果需要获取方程的其他解,只需要调整nsolve的第三个参数(初始猜测值)即可,和Matlab中vpasolve指定初始值的用法一致。
内容的提问来源于stack exchange,提问作者kubaM
相关产品推荐
相关产品推荐

