2010-02-11 54 views
0

我有一个不连续的功能等descontinuous初始数据

f(x)=0.5(exp(-80x^2)+1) if -0.3<x<-0.1 

f(x)=0.5exp(-80x^2) otherwise, 

与域0≤X≤1.

如何将其定义为在MatLab的内联函数?

+6

嗯..你有好的数学函数。等等,问题在哪里? – mauris 2010-02-11 09:47:02

+0

看起来对我来说是连续的... – 2010-02-11 09:54:35

+0

我渴望知道如果你没有-0.3会发生什么:) – 2010-02-11 09:54:39

回答

2

在八度(可能MATLAB太),逻辑表达式的计算结果为0和1。因此,

y = inline('0.5*(exp(-80*x^2) + (-0.3 < x && x < -0.1))', 'x') 
3

由于OP构成的域为0 < = X < = 1,则简单的答案是使用正分支!当x是负值时,不需要担心值。

接下来,我建议您不要使用内联函数。内联函数很慢。只有当你的matlab版本太旧以至于你不能定义一个函数句柄时才使用它们。那么

f = @(x) 0.5*exp(-80*x.^2); 

如果你必须定义一个内联函数,那么我真的建议你得到一个更新版本的matlab。如果你仍然拒绝进入本世纪,那么这样做:

f = inline('0.5*exp(-80*x.^2)','x'); 

还有一种可能性,那就是你也搞砸了函数的定义域。如果函数的域不是严格为0 < = x < = 1,那么可能会出现负值,那么我们可能需要担心函数的不连续性质。在这里你可以使用类似piecewise_eval的东西,正如MATLAB Central File Exchange上发布的那样。此工具允许您构建和评估分段函数,并且可以根据需要将其构建到内联函数或匿名函数/函数句柄中。因此,这个表达式将建立一个功能手柄,你的目的:其他

f = @(x) piecewise_eval(x,[-.3, -.1], ... 
      {@(x) 0.5*exp(-80*x.^2), ... 
      @(x) 0.5*(exp(-80*x.^2) + 1), ... 
      @(x) 0.5*exp(-80*x.^2)}); 

有一点需要提防的是会发生什么在破发点自己。 piecewise_eval函数假定一个点位于半开区间内,如:

-0.3 <= x < -0.1 

用于函数的中间分支。这在大多数这种分段函数的定义中是相当标准的。