2012-12-04 31 views
1

我想實現下面的功能。但我不知道如何通過一組變量定義函數,如mu(1),mu(2),mu(3),...,mu(c)c是一個數字符號(即,它是函數的一個參數,但不是一個輸入值):如何在mupad中實現這個功能(MATLAB)

f := (mu(i), i=1..c) -> sum(mu(i)^2,i=1..c) 

換句話說,我想的f(MU)=norm(MU)^2,其中MU1xc變量的矢量的符號形式。

感謝

編輯: 其實,我想跟蹤在mupad以下計算從Modeling Uncertainty with Fuzzy Logic: With Recent Theory and ...

我還附上了計算步驟(模糊C均值)的圖片。

calculations

回答

1

我不知道我理解的問題

>> f = @(mu) sum(mu .^ 2); % applied on all elements 
>> g = @(mu, c) sum(mu(1 : c) .^ 2); % applied on mu(1:c) 
>> f(1:3) 

ans = 

    14 

>> g(1:10, 3) 

ans = 

    14 
+0

謝謝您的回覆。但我需要它們的符號格式。代碼在MATLAB中,其中mupad(用於matlab符號處理的工具箱)產生符號結果。現在還不知道的常量中的'c',你可以認爲它是一個數字符號(參數) – remo

+0

@remo,不幸的是我沒有任何符號Matlab的經驗。但我可以問,你爲什麼認爲你需要符號?對於這樣的優化問題,您可以使用Matlab的優化工具,如fmincon()。或者如果你有一個分析解決方案(這裏就是這種情況),只需定義合理的數據網格並解決它。 – Serg

+0

答案很清楚,與解釋器與編譯器的比較相似。當以符號方式求解方程時,您可以保存最終解決方案並忘記中間計算,但數字解決方案並非如此。感謝您的意見 – remo

1
f := mu -> _plus(mu[i]^2 $ i=1..nops(mu)); 

呼叫與列表(如何c可以是一個參數,而不是輸入值):

f([1,2,3,4]) 

或者,爲了能夠調用f(1,2,3,4)

f :=() -> _plus(args(i)^2 $ i=1..args(0)); 
+0

感謝您的回覆,語法對我來說是新的,我學會了。但是如何跟蹤(或重新生成)上面的計算。 – remo

+0

我不知道左側的M和K以及右側的mu,xk,vi和lambda之間的連接是什麼。 (從上下文來看,lambda是新引入的,但是其他的,我不能真正猜到。) –

+0

計算出現在我們想要做模糊聚類時,這裏mu是隸屬函數,c是聚類(組)的數量, m是一個簡單的值(例如2),v_i是第i個集羣的質心,n是數據集的維數,W是我們想要優化的函數。我想改變W並跟蹤計算(使用拉格朗日乘子)。謝謝 – remo