如何配置Maxima输出简洁十进制方程解?求解结果解读
Maxima配置:获取简洁十进制解
问题场景
1. 求解指数n时输出无意义等式
使用公式 (K_n = K_0*(1+r)^n),输入代码:
float (solve (575.12=550*(1+0.015)^n))
得到输出:
[203.0^n=1.045672727272727*200.0^n]
已知正确解为3,但无法通过该输出得到结果。
2. 求解r时返回冗余复数解
输入代码:
solve (1905.01=1400*(1+r)^12), numer
得到冗长结果;改用float():
float (solve (1905.01=1400*(1+r)^12));
虽得到正确解r≈0.026,但结果包含11个额外的复数根,仅需有效正实数解。
运行环境
wxMaxima: 19.05.7 wxWidgets: 3.1.2 Unicode Support: yes Maxima version: 5.43.0 (x86_64-apple-darwin13.4.0) Lisp: SBCL 1.5.3
解决方案
针对指数n的求解
Maxima的solve函数对指数方程的符号处理能力有限,推荐两种直接获取数值解的方式:
- 对数转换直接计算:利用指数转对数的数学原理,直接计算结果
float(log(575.12/550)/log(1+0.015));
执行后直接返回3.0。
- 数值根查找:使用
find_root函数定位根的范围,快速得到解
find_root(550*(1+0.015)^n - 575.12, n, 0, 10);
返回精确的数值解3.0。
针对r的求解
solve会返回多项式的所有根(包括复数根),只需筛选正实数根即可:
- 用realroots直接获取实数根:
realroots(1905.01=1400*(1+r)^12); float(%);
仅返回实数根,再转为浮点数得到简洁结果。
- 从解集中筛选正根:
先获取所有解,再过滤出符合条件的有效根:
solutions: float(solve(1905.01=1400*(1+r)^12)); [r_sol] : [s for s in solutions if is(r>0) and is(realpart(r)>0)];
执行后得到唯一有效正根r≈0.026。
全局输出优化配置
若需要默认输出简洁的十进制数,可设置以下全局参数:
/* 设置浮点数输出精度(比如保留4位小数) */ fpprintprec: 4; /* 让所有计算默认启用数值求解 */ numer:true;
注意:numer:true会让所有运算默认转为数值解,如需保留符号运算能力,可按需开启或关闭。
内容的提问来源于stack exchange,提问作者dotnetCarpenter
相关产品推荐
相关产品推荐

