Loren谈MATLAB的艺术

将想法转化为MATLAB

请注意

Loren谈MATLAB的艺术已存档,不会更新。

为什么MATLAB有函数hypot?

有时有人问我这样的问题:“你为什么要引入函数?xyz为MATLAB ?有时,即使是表面上看起来很简单的事情,我也会有一个令人信服的答案。考虑函数函数的

内容

hypot计算什么?

函数的本质上是计算两个输入平方和的平方根。这有什么大不了的,对吧?对于“合理的”输入值,没有什么大问题。

Fhypot = @(a,b)√(abs(a).^2+abs(b).^2);

其他的计算方法

让我们创建一组值并进行计算函数的有3种方法:with函数的fhypot,√2 * x.这些都应该给出相同的答案一个是实数和正数。

A = logspace(0,5,6)格式aFhypot = fhypot(a,a) aSqrt2 =√(2)*a
= 1 10 100 1000 10000 100000 aHypot = 1.0 e + 005 *列1到3 4到6 0.014142135623731 0.141421356237310 1.414213562373095 0.000014142135624 0.000141421356237 0.001414213562373列aFhypot = 1.0 e + 005 *列1到3 4到6 0.014142135623731 0.141421356237310 1.414213562373095 0.000014142135624 0.000141421356237 0.001414213562373列aSqrt2 = 1.0 e + 005 *列1到3 4到6 0.014142135623731 0.000014142135624 0.000141421356237 0.001414213562373列0.141421356237310 - 1.414213562373095

结果

在四舍五入的范围内,这里的3种方法的结果是相同的。但是如果的大小一个更大,更接近最大浮点数也许?

最大浮点数
Ans = 1.797693134862316e+308

我的电脑是一台32位的Windows电脑,最大浮点数For double的数量级是10^308。的不同版本使用了接近这么大的值,让我们看看会发生什么函数的

a = 1e308 aHypot = hypot(a,a) aFhypot = fhypot(a,a) aSqrt2 = sqrt(2)*a
a = 1.000000000000000e+308 aHypot = 1.414213562373095e+308 aFhypot = Inf aSqrt2 = 1.414213562373095e+308

您可以看到直接的方法返回了而不是一个有限的答案。这就是为什么函数的将其加入MATLAB中,鲁棒地计算斜边,避免了下溢和溢出。




发布与MATLAB®7.5

|