我有一个非线性系统方程求解器的代码。 我有一个像这样的命令很麻烦:
newt[0]:=[-2.,20]:
我不知道那个点在那里起作用了什么!
我认为它可能是显示-2.0
,但默认情况下没有理由使用-2 = -2.0
。
任何人都可以帮我吗?
答案 0 :(得分:0)
默认-2 = -2.0
不正确无误。 Maple计算方式有很大差异:如果你使用-2
它会计算 exacts (算术表达式),而-2.0
则告诉Maple用浮点数计算(数字表达式)。
如果你注意到浮动位置,那么两个表达式-2.*sqrt(5)
和-2*sqrt(5.)
在Maple处理它们方面是完全不同的!对于第一个例子,平方根是算术计算的,而在第二个例子中,它是用数字计算的!
对于某些计算来说,这可能是一个非常重要的事情;无论是速度还是精度,都应该仔细考虑进行复杂的计算。
速度示例:为exp(x)
计算x = 1,2,...,50000
。 (算术>数字)
CodeTools:-Usage(seq(exp(x),x=1..50000)): # Arithmetic
memory used=19.84MiB, alloc change=0 bytes, cpu time=875.00ms, real time=812.00ms, gc time=265.62ms
CodeTools:-Usage(seq(exp(1.*x),x=1..50000)): # Numerical
memory used=292.62MiB, alloc change=0 bytes, cpu time=9.67s, real time=9.45s, gc time=1.09s
特别注意使用的内存存在巨大差异。 这是使用浮点数时性能更差的一个示例。相反,如果我们只是近似,数值逼近要快得多。
近似exp(1)
(数值>算术)
CodeTools:-Usage(seq((1+1/x)^x,x=1..20000)): # Arithmetic
memory used=0.64GiB, alloc change=0 bytes, cpu time=39.05s, real time=40.92s, gc time=593.75ms
CodeTools:-Usage(seq((1+1./x)^x,x=1..20000)): # Numerical
memory used=56.17MiB, alloc change=0 bytes, cpu time=1.06s, real time=1.13s, gc time=0ns
精确示例:为了精确,如果不小心,事情可能非常错误。
f:=x->(Pi-x)/sin(x);
limit(f(x),x=Pi); # Arithmetic returns 1 (true value)
limit(f(x),x=Pi*1.); # Numerical returns 0 (wrong!!!)
答案 1 :(得分:-1)
经过一番努力,我终于找到了它的作用!
简短回答:它计算表达式的结果,其中2个整数是输入。
扩展答案:(示例)
给定2个函数,我们想要计算该方程组的Jacobin矩阵
with(linalg);
with(plots);
f := proc (x, y) -> (1/64)*(x-11)^2-(1/100)*(y-7)^2-1;
g := proc (x, y) -> (x-3)^2+(y-1)^2-400;
然后我们将函数放在向量中:
F:=(x, y) -> vector([f(x,y),g(x,y)]);
F(-2 ,20)
F(-2.,20)
结果将是:
[-79/1600 -14]
[-0.049375000 -14]