我是靠谱客的博主 多情诺言,这篇文章主要介绍matlab中如何计算信号的功率_MATLAB中计算极小数,现在分享给大家,希望可以做个参考。

直接在MATLAB中计算极小的数值时,MATLAB会将极小数直接认为为0。例如:

复制代码
1
2
3e-20 * 2.3e-320 % ans = 0 log10(3e-20 * 2.3e-320) % ans=-Inf

可见,MATLAB将

的乘积认为为0。这在一些科学计算中是不可以忍受的。这里提供一种暴力的方法解决问题,这个方法就是自己写一个专门处理极小数值的类。将极小数拆分为指数项和参数项两个部分。
复制代码
1
2
3
4
5
6
7
classdef ExtNum properties p1, p2 end ... end

这里面的p1和p2就是拆分后的两部分。一个极小数

可以被拆分为
这样的两个部分。

MATLAB提供算符重载的能力:

https://www.mathworks.com/help/releases/R2017a/matlab/matlab_oop/implementing-operators-for-your-class.html​www.mathworks.com

所以我们可以在类里面重构加法和乘法:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function v = plus(o1,o2) factorDiff = o1.p2 - o2.p2; v = ExtNum(); if factorDiff >= 0 v.p1 = o1.p1 + o2.p1/power(10,factorDiff); v.p2 = o1.p2; else v.p1 = o1.p1/power(10,-factorDiff) + o2.p1; v.p2 = o2.p2; end end function v = mtimes(o1,o2) v = ExtNum(); v.p1 = o1.p1*o2.p1; v.p2 = o1.p2+o2.p2; v = v.reConfigValue(); end

我们也可以进一步重构控制台打印数值的函数

复制代码
1
2
3
4
function disp(obj) fprintf(1,'%.4f x E%dn',obj.p1,obj.p2); end

这样就可以对极小数进行正常计算了

复制代码
1
ExtNum(2.3e-320) * ExtNum (3e-20) % ans = 6.8996 x E-340

具体的源代码和测试文件可以参考

HansenZhao/ExtNum​github.com

最后

以上就是多情诺言最近收集整理的关于matlab中如何计算信号的功率_MATLAB中计算极小数的全部内容,更多相关matlab中如何计算信号内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(73)

评论列表共有 0 条评论

立即
投稿
返回
顶部