我可以not
在 Matlab 中用作离散狄拉克三角函数吗?
离散狄拉克函数的定义是,对于参数 0,它返回 1,否则返回 0。但这正是该not
函数在 Matlab 中所做的!
not
如果我使用而不是编写自己的 dirac delta 函数,您会发现任何问题吗?我知道 Matlab 有一个dirac
功能,但它是连续版本 - 它返回无穷大 0 而不是 1。
我可以not
在 Matlab 中用作离散狄拉克三角函数吗?
离散狄拉克函数的定义是,对于参数 0,它返回 1,否则返回 0。但这正是该not
函数在 Matlab 中所做的!
not
如果我使用而不是编写自己的 dirac delta 函数,您会发现任何问题吗?我知道 Matlab 有一个dirac
功能,但它是连续版本 - 它返回无穷大 0 而不是 1。
我觉得还可以,但是注意输出的not
是一个logical
s数组:
例子:
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,我会这样定义离散狄拉克函数:
ddirac = @(x) double(not(x));
或者
function y = ddelta(x)
y = double(not(x));
为了清楚起见,我会定义
diracdelta = @not;
在您的代码中明确表示您的意思是使用 dirac delta 函数,而不是进行逻辑否定。当您在六个月后重新访问您的代码时,您会感谢我的额外清晰度。
顺便说一句,如果您尝试对具有大量有效数字的数字评估此(或任何狄拉克函数),由于浮点数的(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)