在表达式中替换我的函数

时间:2016-02-16 13:52:04

标签: matlab symbolic-math

我在matlab 2014b中定义了一个函数mystep,除了mystep(0)是一个而不是0.5之外,它与weightiside相同。 现在我想用sub替换我的函数到表达式但是不可能。功能是:

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中显示改变原点重质值的方法可能是有用的。

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

2 个答案:

答案 0 :(得分:0)

现在我理解你的问题了。您实现的mystep函数与符号数学不兼容。如果您尝试mystep(sym(x)),您会看到它返回重物。那是因为与常量相比的符号变量总是错误的。

我看到的最佳解决方案是将此定义用于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)

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

答案 1 :(得分:0)

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