2017-05-30 80 views
0

我試圖用fminunc解決了以下功能:如何在matlab中使用fminunc和summation?

Σ((x(i)-1).^2) for i = 1 to 20 

我的代碼如下:

fun4 = @(x) sum((x(i)-1).^2, i, 1, 20) 
[x,fval,exitflag,output]= fminunc(fun4,[1,1]) 

而且,它提供了以下錯誤:

??? Error using ==> sym.sym>notimplemented at 2514

Function 'subsindex' is not implemented for MuPAD symbolic objects.

你能幫我,請嗎?

+2

你可以使用'FUN4 = @(x)的總和((X(1:20)-1)^ 2)' ,您當前的語法對我來說很奇怪 – Wolfie

+0

我沒有收到相同的錯誤消息。你能在運行這段代碼之前清除你的工作區,並檢查錯誤信息嗎? – m7913d

+0

@Wolfie它給出了這個錯誤:???索引超過矩陣尺寸。錯誤在==> @(x)sum((x(1:20)-1)。^ 2) – Halil

回答

1

您應該查看sum documentation以瞭解如何使用它來彙總向量的詳細信息。

在你的情況,如果你有一個載體至少20個元素x,你可以得到的子矢量由x(1:20)x(i)i範圍爲1〜20」。

只需使用標準減號,就可以從矢量中減去標量,但要將所有元素單獨排列,則應使用「元素智能」運算符(在運算符之前有一個點,如.^)。碰巧,你已經這樣做了。

您傳遞給sum的第二,第三和第四個參數會導致錯誤,因爲sum並不指望您傳遞給它的參數。有關輸入的更多詳細信息,請參閱確實期望查看鏈接的文檔。


所有這一切都意味着你的函數可以簡化爲:

fun4 = @(x) sum((x(1:20)-1).^2);