我試圖用for
循環創建大量的符號變量,這樣我就不必輸入每個單獨的變量。這裏是我的嘗試:使用A For Loop創建符號變量
for i 1:19
yi = sym('yi');
end
不過,我得到這個錯誤:Unexpected MATLAB expression.
我試圖用for
循環創建大量的符號變量,這樣我就不必輸入每個單獨的變量。這裏是我的嘗試:使用A For Loop創建符號變量
for i 1:19
yi = sym('yi');
end
不過,我得到這個錯誤:Unexpected MATLAB expression.
我沒有訪問符號數學工具箱,但看看這有助於:
for i=1:19
eval(sprintf('y%d = sym(''y%d'')', i,i))
end
雖然,我強烈建議不要這樣做。
您可以使用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{:})
還有其他的方法來創建的字符串,例如單元陣列,只用sprintf
和textscan
,但畢竟是作爲練習留給讀者。
下面是另一個(簡單,但不太高雅)選項,使用的syms
的symfun
創造能力:
varname = 'y';
idx = 1:19;
y = sprintf([varname '%d,'],idx);
syms(['tmp(' y(1:end-1) ')']);
的象徵功能tmp
可以安全地,而不會打擾其他符號變量之後清除。
您需要'=','for i = 1:19' – ysakamoto
此外,上面的腳本不斷創建相同的符號變量。如果你想要一個向量符號值,也許可以使用'A = sym('A',dim')? – ysakamoto
本來我是這麼做的,但我沒有覺得有用;原因是如果我想提到y2,我將不得不使用A(2),這會使事情複雜一點。 – Mack