我有一個不連續的功能等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的內聯函數?
我有一個不連續的功能等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的內聯函數?
在八度(可能MATLAB太),邏輯表達式的計算結果爲0和1。因此,
y = inline('0.5*(exp(-80*x^2) + (-0.3 < x && x < -0.1))', 'x')
由於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
用於函數的中間分支。這在大多數這種分段函數的定義中是相當標準的。
嗯..你有好的數學函數。等等,問題在哪裏? – mauris 2010-02-11 09:47:02
看起來對我來說是連續的... – 2010-02-11 09:54:35
我渴望知道如果你沒有-0.3會發生什麼:) – 2010-02-11 09:54:39