在Sympy中如何匹配两个表达式的实系数求解对应参数值
问题原因
你之前得到带x的解,是因为Sympy默认求解的是存在某个x使等式成立的参数解,而非对任意x恒成立的系数匹配解。要得到固定的A、B实数值,需要额外约束三角函数项的对应系数分别相等。
解决方法
我们可以手动提取sin(x)和cos(x)的系数构造方程组后求解,示例代码如下:
from sympy import * var('x A B') # 若匹配你手动推导的等式,这里sin(x)的系数改为2B即可 P1 = 2*B*sin(x) + (B + 3*A/4)*cos(x) P2 = sin(x) + 2*cos(x) # 移项得到差值表达式 diff_expr = P1 - P2 # 分别提取sin(x)、cos(x)的系数,构造系数等于0的方程组 eq_sin = Eq(diff_expr.coeff(sin(x)), 0) eq_cos = Eq(diff_expr.coeff(cos(x)), 0) # 求解方程组 result = solve([eq_sin, eq_cos], [A, B]) print(result)
运行后输出为:
{A: 2, B: 1/2}
和你手动推导的结果完全一致。
补充说明
如果不需要手动提取系数,也可以用linear_eq_to_matrix直接将恒等条件转换为线性方程组求解,本质逻辑都是匹配正交基函数的对应系数,没有额外的性能差异。
内容的提问来源于stack exchange,提问作者Alex Rosales
相关产品推荐
相关产品推荐

