【问题标题】:precision matlab vpa精密matlab vpa
【发布时间】:2015-08-14 21:37:43
【问题描述】:

我正在使用一种算法,该算法使用双曲线函数,为了从中获得更准确的结果,我需要提高精度,所以我想通过 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

【问题讨论】:

  • x=40;a=vpa(cosh(x), 30);不工作?根据 matlab 文档,这应该可以工作。
  • @RobertStettler,我认为这就是答案,OP 只是没有使用正确的语法。想从您的评论中得到答案吗?
  • @A.Donda:不完全是。更重要的是,它是关于在正确的点从浮点转换为vpa
  • @horchler,看来你是对的。
  • 对不起@RobertStettler

标签: matlab precision


【解决方案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。

【讨论】:

  • 我在这里看到了 link。您的方法也有效,但我将“x”作为控制变量的意思是将其值从 vpa 函数中插入,就像自动一样,因为我从之前的计算中得到了“x”,它是一个复数
猜你喜欢
  • 2013-11-10
  • 1970-01-01
  • 1970-01-01
  • 2011-07-30
  • 2022-07-29
  • 1970-01-01
  • 2021-05-11
  • 2021-10-28
  • 1970-01-01
相关资源
最近更新 更多