[int.,int] 在 Maple 中意味着什么?
What does [int.,int] means in Maple?
我有一个代码可以用作非线性系统方程求解器。
我对这样的命令遇到了很多麻烦:
newt[0]:=[-2.,20]:
我不知道那个点在那里有什么用!
我认为这可能是为了显示它是 -2.0
,但没有理由在默认情况下使用它 -2 = -2.0
.
谁能帮我解决这个问题?
经过一段时间的使用,我终于找到了它的作用!
简答:它计算表达式的结果,其中这 2 个整数是输入。
扩展答案:(示例)
给定 2 个函数,我们要计算此方程组的雅各宾矩阵
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]
点强制浮点计算
默认-2 = -2.0
不正确。 Maple 在计算方式上有很大的不同:如果你使用 -2
它计算 exacts (算术表达式)而 -2.0
告诉 Maple 用 floats(数值表达式).
这两个表达式 -2.*sqrt(5)
和 -2*sqrt(5.)
在 Maple 处理它们的方式上是完全不同的,如果你注意到浮动位置的话!第一个例子的平方根是算术计算的,而第二个例子是数值计算的!
这对于某些计算来说可能是个大问题;无论是速度还是精度,在做复杂的计算时都要慎重考虑。
速度示例: 为 x = 1,2,...,50000
计算 exp(x)
。 (算术 > 数值)
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!!!)
我有一个代码可以用作非线性系统方程求解器。 我对这样的命令遇到了很多麻烦:
newt[0]:=[-2.,20]:
我不知道那个点在那里有什么用!
我认为这可能是为了显示它是 -2.0
,但没有理由在默认情况下使用它 -2 = -2.0
.
谁能帮我解决这个问题?
经过一段时间的使用,我终于找到了它的作用!
简答:它计算表达式的结果,其中这 2 个整数是输入。
扩展答案:(示例)
给定 2 个函数,我们要计算此方程组的雅各宾矩阵
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]
点强制浮点计算
默认-2 = -2.0
不正确。 Maple 在计算方式上有很大的不同:如果你使用 -2
它计算 exacts (算术表达式)而 -2.0
告诉 Maple 用 floats(数值表达式).
这两个表达式 -2.*sqrt(5)
和 -2*sqrt(5.)
在 Maple 处理它们的方式上是完全不同的,如果你注意到浮动位置的话!第一个例子的平方根是算术计算的,而第二个例子是数值计算的!
这对于某些计算来说可能是个大问题;无论是速度还是精度,在做复杂的计算时都要慎重考虑。
速度示例: 为 x = 1,2,...,50000
计算 exp(x)
。 (算术 > 数值)
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!!!)