如何在WXMAXIMA中将含复数与单位的表达式化简为a+%i b形式?
在WXMAXIMA中将带单位的复数分式化简为a+%i b形式的解决方法
我在WXMAXIMA中得到表达式100/(25.00079433726757*%i+20),想要化简为a+%i b的形式,但尝试rectform、float、polarform等函数都没成功。完整操作过程如下:
(%i2) load("ezunits"); numer: true; (%o1) "/usr/share/maxima/5.45.1/share/ezunits/ezunits.mac" (%o2) true (%i3) R1: 20`ohm; (%o3) 20 ` ohm (%i9) f:50`Hz; w: 2*%pi*f; L1: 79.58 `mH; Z1: R1 + (w*L1 ``ohm) * %i; cabs(Z1); float(carg(Z1)) `` degree; (%o4) 50 ` Hz (%o5) 314.1592653589793 ` Hz (%o6) 79.58 ` mH (%o7) (25.00079433726757*%i+20) ` ohm (%o8) 32.01624146420611 ` ohm^1.0 (%o9) 51.34107977110403 ` degree (%i81) V: 100 ` volt; I1: V / Z1; rectform(I1); (%o79) 100 ` volt (%o80) 100/(25.00079433726757*%i+20) ` volt/ohm (%o81) realpart(100/(25.00079433726757*%i+20) ` volt/ohm)+%i*imagpart(100/(25.00079433726757*%i+20) ` volt/ohm)
如输出%o81所示,运算未被化简。猜测是单位影响,尝试用nounit()去除单位也无法完成化简:
(%i84) V: 100 ` volt; I1: V / Z1; nounit(rectform(I1)); (%o82) 100 ` volt (%o83) 100/(25.00079433726757*%i+20) ` volt/ohm (%o84) nounit(realpart(100/(25.00079433726757*%i+20) ` volt/ohm)+%i*imagpart(100/(25.00079433726757*%i+20) ` volt/ohm))
解决方法
问题根源是ezunits包对复数运算的支持有限,需要先剥离单位完成数值化简,再重新附加单位,具体步骤如下:
方法一:分步处理
- 提取无单位的分式进行化简:
// 提取无单位的表达式 expr: nounit(V)/nounit(Z1); // 用rectform结合float得到a+%i b形式 result_num: float(rectform(expr));
执行后会得到类似1.93 - 2.4126*%i的数值结果。
- 为结果附加单位:
I1: result_num ` ampere;
(注:volt/ohm等价于ampere,两种单位都可以用)
方法二:一步完成
直接在表达式中先剥离单位计算,再附加单位:
V: 100 ` volt; Z1: (25.00079433726757*%i+20) ` ohm; I1: float(rectform(nounit(V)/nounit(Z1))) ` (volt/ohm);
方法三:提前分离数值与单位
定义变量时先计算纯数值部分,再附加单位,从根源避免单位干扰:
// 先计算纯数值 f:50; w:2*%pi*f; L1_val:79.58e-3; // 转换为亨利 Z1_num:20 + w*L1_val*%i; V_num:100; // 再附加单位 Z1: Z1_num ` ohm; V: V_num ` volt; // 直接对纯数值做复数化简,再附加单位 I1: float(rectform(V_num/Z1_num)) ` ampere;
内容的提问来源于stack exchange,提问作者Aurelio Gallardo Rodríguez
相关产品推荐
相关产品推荐

