2017-02-17 21 views
0

我有這樣一個功能lnn1c(ii, j, n, n1)這需要索引iijj作爲參數,其中Kdk1Wdg一些陣列,wg(n)是另一個函數有點兒alpha*(n-3)Gdg是一個符號變量。matlab中可以進行符號索引嗎?

function lnn1c=lnn1c(ii, j, n, n1) 
    syms k1Vzdg 
    global Gdg Wdg Kdk1 
    lnn1c=Gdg-i*(-(Wdg(ii)-Wdg(j))+(wg(n)-wg(n1))+... 
     (Kdk1(ii)-Kdk1(j))*k1Vzdg); 
end 

我想超過指標ii和1 j表達lnn1c(ii, j, n, n1)的我的腳本總和達到4 我想這樣的代碼

syms ii jj n n1 
sum(subs(sum(subs(lnn1c(ii, jj, n, n1), ii, 1:4)),jj, 1:4)) 

,但我不斷收到這樣的錯誤進行

Indexing input must be numeric, logical or ':'.

任何幫助對我來說都非常有價值。

+1

注:創建將返回和全局* *裏面的函數是一個可怕的想法符號變量。所有提示都需要以更智能的方式重寫代碼,否則會發現更多問題。還要注意,因爲'i'是虛數單位,所以它的'j'。寫'ii'來避免它,但是寫'j'不能解決問題! –

回答

0

不,符號索引是沒有意義的。

但是,您可能會混淆想法。你實際上在做subs(f(ii, jj, n, n1), ii, 1:4)。你把ii,然後用1:4代替它。爲什麼不把1:4作爲輸入?

只要做到:

for jj=1:4 
    s=s+sum(lnn1c(1:4, jj, n, n1)); 
end 

當然,你需要的數值爲nn1 .... 當你還沒有表現出整個代碼,它很難知道你在做什麼,但有暗示你不需要符號數學,而只是混合編程概念。

0

正如安德指出,你可以做到這一點在兩個for循環,你不會有問題:

s=0; 
for jj=1:4 
    for ii=1:4 
    s=s+sum(lnn1c(ii, jj, n, n1)); 
    end 
end 

但是,如果你的目的是要做到在1號線,你爲什麼不嘗試arrayfun?

s=sum(arrayfun(@(ii) sum(arrayfun(@(jj) lnn1c(ii, jj, n, n1),1:4),1:4)); 

而且無需SYMS)

+0

您的一個解決方案不起作用。它會拋出一個錯誤: 使用arrayfun時出錯 sym輸出類型目前沒有執行 。 – David

相關問題