精密matlab vpa

时间:2015-06-01 12:17:04

标签: matlab precision

我正在使用一种算法,它使用双曲线函数,为了从中获得更准确的结果,我需要提高精度,所以我想通过vpa函数来实现,但我不太认真确定如何实现它。这里有一些代码可以进一步澄清情况:

x=18; %the hyperbolic relation is valid until x=18
cosh(x)^2-sinh(x)^2
ans = 1

x=19; %the hyperbolic relation is no longer valid
cosh(x)^2-sinh(x)^2
ans = 0

使用VPA功能:

a=vpa('cosh(40)',30); %the hyperbolic relation is valid beyond x=19
b=vpa('sinh(40)',30);
a^2-b^2
ans = 1.00008392333984375

现在的问题是我不知道如何通过控制变量'x'从VPA获取值

我尝试了这个,但它不起作用:

x=40;
a=vpa('cosh(x)',x,30);
b=vpa('sinh(x)',30);
a^2-b^2

1 个答案:

答案 0 :(得分:1)

在进行符号数学或variable precision arithmetic时,必须注意在浮点之间进行转换。在这种情况下,您需要将输入x转换为变量精度,然后再将传递给coshsinh(否则只输出这些输出)将被转换为变量精度)。以你的例子:

x = vpa(40,30);
a = cosh(x);
b = sinh(x);
a^2-b^2

返回预期的1.0。我不确定您在哪里找到了使用字符串输入的vpa,但是不再使用该表单(由于调用了不同的函数,使用字符串甚至可能导致不同的结果)。另请注意,当前版本的Matlab中digits的默认设置为32。