我有一些简单的方程式,我想通过matlab管道。但我希望得到确切的答案,因为这些值预计将在以后使用和简化。
现在,Matlab将sqrt(2.0)
显示为1.1414
,而不是像我想要的那样2^(1/2)
。
我尝试启用format rat
,但这很危险,因为它显示sqrt(2)
为1393/985
没有任何警告。
有象征性数学"但它似乎有点矫枉过正。
我想要的只是2 + sqrt(50)
会返回类似2 + 5 * (2)^(1/2)
的东西,甚至我5岁的卡西欧计算器都能做到这一点!
那么我该如何在matlab中将2 + sqrt(50)
评估为2 + 5 * (2)^(1/2)
?
答案 0 :(得分:7)
根据@Oleg's comment使用符号数学。
x=sym('2')+sqrt(sym('50'))
x =
5*2^(1/2) + 2
通过此表达式进行一万次迭代的平均时间为1.2毫秒,而数值表达式(x=2+sqrt(50)
)的时间仅为0.4微秒,即速度快一万倍。
我确实预先运行了50次符号表达式,因为正如Oleg在他的second comment指出的那样,符号引擎需要一些热身。第一次通过你的表达我的电脑差不多2秒钟。
因此,由于计算时间的巨大差异,我建议使用数值方程。当你被迫(例如简化纸张的表达式)然后使用像Maple或Wolfram Alpha这样的符号计算引擎时,才使用符号表达式。答案 1 :(得分:3)
Matlab主引擎不是符号而是数字。
符号工具箱。在x
和subs x = 50
syms x
f = 2+sqrt(x)
subs(f,50)
ans =
50^(1/2) + 2