在Matlab中,我能用not
作为离散的狄拉克三角函数吗?
离散的diracδ函数的定义是,对于参数0,它返回1,否则返回0。但这正是not
函数在Matlab中所做的!
如果我使用not
而不是编写我自己的狄拉克δ函数,你会发现有什么问题吗?我知道Matlab有一个dirac
函数,但是这个函数是连续的--它返回的是0而不是1的无穷大。
发布于 2013-08-21 16:18:06
我认为这是可以的,但是请注意,not
的输出是一个logical
的数组:
示例:
a = [0, 1, pi]
b = not(a)
c = double(b)
whos
输出:
a =
0.00000 1.00000 3.14159
b =
1 0 0
c =
1 0 0
Variables in the current scope:
Attr Name Size Bytes Class
==== ==== ==== ===== =====
a 1x3 24 double
b 1x3 3 logical
c 1x3 24 double
Total is 9 elements using 51 bytes
因此,如果输入是double
s,我将以这样的方式定义离散的Diracδ函数:
ddirac = @(x) double(not(x));
或
function y = ddelta(x)
y = double(not(x));
发布于 2013-08-21 16:17:23
为了清晰起见,我要定义
diracdelta = @not;
为了在代码中清楚地表明,您打算使用dirac增量函数,而不是执行逻辑否定。当您在六个月后重新检查代码时,您会感谢我所提供的额外清晰。
发布于 2014-10-28 10:40:29
顺便说一句,如果你试图计算这个(或任何dirac函数)对于大量重要数字的数字,由于浮点数的(Im)精度,它将无法正确地计算。
x = [-2e-6:0.5e-6:2e-6]
y = (x - 0.5e-6)
~y
然而,看起来是零的x元素将不是真零。
y(6) = 1.0588e-22
因此,我提议一个函数,如果x真的非常接近于零,则返回1;比浮点数的精度更接近:
epsdirac = @(x) double(abs(x) < eps)
https://stackoverflow.com/questions/18362486
复制相似问题