如何在 wxMaxima 中得到这个简单方程的正确解?
How to get the correct solution of this simple equation in wxMaxima?
我正在尝试在 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
returns 一个列表,因此您可以只说 mysolutions[3]
(或任何变量的名称) solve
的结果已分配)。
如果你只想要数值,你可以说 rhs(mysolutions[3])
where rhs
= "right-hand side"。还有 lhs
= "left-hand side".
但是,请注意,仅使用等式 d = something
作为 subst
的参数是很方便的,以便将值代入其他表达式,例如:
(%i6) preferred_solution: mysolutions[3];
1/3
40483
(%o6) d = ------------
1/3
10 427748
(%i7) float (preferred_solution);
(%o7) d = 0.04557166543026844
(%i8) subst (preferred_solution, %pi*(d/2)^2);
2/3
40483 %pi
(%o8) -------------
2/3
400 427748
(%i9) float (%);
(%o9) 0.001631096598182001
我正在尝试在 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
returns 一个列表,因此您可以只说 mysolutions[3]
(或任何变量的名称) solve
的结果已分配)。
如果你只想要数值,你可以说 rhs(mysolutions[3])
where rhs
= "right-hand side"。还有 lhs
= "left-hand side".
但是,请注意,仅使用等式 d = something
作为 subst
的参数是很方便的,以便将值代入其他表达式,例如:
(%i6) preferred_solution: mysolutions[3];
1/3
40483
(%o6) d = ------------
1/3
10 427748
(%i7) float (preferred_solution);
(%o7) d = 0.04557166543026844
(%i8) subst (preferred_solution, %pi*(d/2)^2);
2/3
40483 %pi
(%o8) -------------
2/3
400 427748
(%i9) float (%);
(%o9) 0.001631096598182001