问题描述
我正在尝试在 wxMaxima 中求解以下简单方程:
21.3874=0.00202415/(d^3)
当我使用 solve()
时,我得到 3 个解决方案(2 个复数和 1 个实数)。我知道 d 是实数和正数(因为它是直径)所以我只对第三个解决方案感兴趣。它以以下形式给出:
d=((40483)^(1/3))/(10427748^(1/3)) 我尝试用 map()
函数保存它,但它保存了所有 3 个解决方案,我不知道如何映射只有最后一个,所以我可以用它做进一步的计算。
不管怎样,重写这个方案并在上面使用float()
函数,结果是:0.1571668
但这是不正确的,因为结果应该是 0.0455717。
有趣的是,to_poly_solve()
给出了不同的解决方案,真正的解决方案是:0.2439467
关于这个问题,我有 3 个问题:
- 为什么 wxMaxima 给出了两个错误的解决方案以及如何获得正确的解决方案?
- 我如何告诉 Maxima 我只在寻找给定方程的正解。
- 是否可以映射选定的解决方案,以便在进一步计算中引用它(例如在其上使用
float()
)?
解决方法
嗯,当我尝试时,我得到了预期的结果 (0.0455717)。
(%i5) mysolutions: solve (21.3874 = 0.00202415/(d^3),d);
rat: replaced 21.3874 by 106937/5000 = 21.3874
rat: replaced -0.00202415 by -40483/20000000 = -0.00202415
1/3 1/3
sqrt(3) 40483 %i - 40483
(%o5) [d = ------------------------------,1/3
20 427748
1/3 1/3 1/3
sqrt(3) 40483 %i + 40483 40483
d = - ------------------------------,d = ------------]
1/3 1/3
20 427748 10 427748
为了仅隔离第三个解决方案,请注意 solve
返回一个列表,因此您可以只说 mysolutions[3]
(或 {{1} }} 已分配)。
如果你只想要数值,你可以说 solve
where rhs(mysolutions[3])
= "right-hand side"。还有 rhs
= "left-hand side"。
但是,请注意,将等式 lhs
用作 d = something
的参数以便将该值替换为其他表达式是很方便的,例如:
subst