在表达式中替换我的函数

substituting my function in an expression

我在 matlab 2014b 中定义了一个函数作为 mystep,它与 heaviside 相同,除了 mystep(0) 是 1 而不是 0.5。 现在我想使用 subs 将我的函数替换为表达式,但这是不可能的。函数是:

f(x) = heaviside(x) * x^2;
g(x) = subs(f(x) , heaviside(x) , mystep(x));
g(x) =

heaviside(x)

如您所见,matlab 什么都不做,但如果我用 dirac(x) 更改 mystep,它会很顺利。

g(x) = subs(f(x) , heaviside(x) , dirac(x))

g(x) =

dirac(x)

我该怎么办?有什么办法吗? 任何其他帮助,例如展示一种在 matlab 2014b 中更改 origin 处的 heaviside 值的方法可能会有用。

mystep的内容

function Y = mystep(X) 
%//This function is a user-defined unit step function, which has the exact 
%//properties of matlab heaviside function except for the value of function 
%//at zero that is defined as 1. 
Y = heaviside(X); 
if Y==0.5 
    Y=1; 
end

现在我明白你的问题了。您实现的 mystep 函数与符号数学不兼容。如果您尝试 mystep(sym(x)),您会看到它 returns heaviside。那是因为符号变量与常量相比总是假的。

我看到的最佳解决方案是将此定义用于 mystep

syms x
mystep(x)=heaviside(x)+1/2-abs(heaviside(x)-.5);
g(x) = subs(f(x) , heaviside(x) , mystep(x));

导致:

x^2*(heaviside(x) - abs(heaviside(x) - 1/2) + 1/2)

它看起来不太好,但实现了预期的行为。

我找到了答案。我必须定义一个新函数,其中 mystep = round(heaviside(x)); 结束