簡體   English   中英

matlab內聯函數與參數條件

[英]matlab inline function with argument conditions

鄉親,

我想知道是否有可能將r的以下函數編寫為matlab中的內聯函數。 我試圖將條件作為一個單獨的因素包括在一起,例如*(r> a),當r為0時,由於1 / r ^ 3的除法,我得到了NaN。

r的功能

首先,你沒有說明如果r = 0究竟應該發生什么。 在數學上,這個詞變得無限 我以為你寧願把它設置為零 r = a會發生什么? 只是另一個定義不明確的案例,你確定你的公式是正確的嗎?

如果您有統計工具箱,則可以使用nansum 如果沒有,我會說沒有辦法編寫類似於nansum自己的函數,這是無法內聯完成的。

r = -5:1:5;
a = 1; 
R = 42; %// rest of your function

%// not working, or removing of nan afterwards required
X = @( r ) (r>=a).*(a./r).^3*R;

%// inline solution with statistics toolbox
Y = @( r ) arrayfun(@(x) nansum( (x>=a)*(a/x)^3*R ), r);

output =  [X(r)' Y(r)']

nansum不是矢量化的,如果你仍然想用它來將它包裝成arrayfun。


nansum的代碼完全按照注釋中的建議( output(isnan(output))=0 ),我可能不允許在這里復制和粘貼它。 它過濾掉所有NaN ,然后對輸入求和。 使用open nansum來獲得洞察力。


正如Jigg所指出的那樣,像nanmean這樣的類似功能也可以解決問題。

我可以用一個簡單的方法。 這基本上是Shai和Jigg所建議的,即使用額外的乘法因子(r> a)。

為了擺脫NaN,我們只需要將eps添加到1 / r3的分母,即

 1/(r+eps)^3 *(r>a)

你可以試試

chi = 1; %// arbitrary value
a = 1; %// arbitrary value
theta = pi/3; %// arbitrary value
nu = @( r ) (r>a).*( (chi/3).*((a.^3)./(r.^3)).*(3*cos(theta).^2 -1);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM