2014-03-02 28 views
1

我試圖用for循環創建大量的符號變量,這樣我就不必輸入每個單獨的變量。這裏是我的嘗試:使用A For Loop創建符號變量

for i 1:19 
    yi = sym('yi'); 
end 

不過,我得到這個錯誤:Unexpected MATLAB expression.

+1

您需要'=','for i = 1:19' – ysakamoto

+1

此外,上面的腳本不斷創建相同的符號變量。如果你想要一個向量符號值,也許可以使用'A = sym('A',dim')? – ysakamoto

+0

本來我是這麼做的,但我沒有覺得有用;原因是如果我想提到y2,我將不得不使用A(2),這會使事情複雜一點。 – Mack

回答

1

我沒有訪問符號數學工具箱,但看看這有助於:

for i=1:19 
eval(sprintf('y%d = sym(''y%d'')', i,i)) 
end 

雖然,我強烈建議不要這樣做。

-1

您可以使用syms和電池陣列產生comma-separated list做到這一點:

varname = 'y'; 
idx = 19; 
y = arrayfun(@(x)char(x),sym(varname,[1 idx]),'UniformOutput',false); 
syms(y{:}) 

它創建19個不同符號變量。不需要明確使用eval。如果你想隨心所欲的編號,這是更靈活,更可能更快:

varname = 'y'; 
idx = [1:3 9:12 17:19]; 
y = arrayfun(@(x)sprintf([varname '%d'],x),idx,'UniformOutput',false); 
syms(y{:}) 

還有其他的方法來創建的字符串,例如單元陣列,只用sprintftextscan,但畢竟是作爲練習留給讀者。

下面是另一個(簡單,但不太高雅)選項,使用的symssymfun創造能力:

varname = 'y'; 
idx = 1:19; 
y = sprintf([varname '%d,'],idx); 
syms(['tmp(' y(1:end-1) ')']); 

的象徵功能tmp可以安全地,而不會打擾其他符號變量之後清除。