我正在尝试使用for
循环创建大量符号变量,这样我就不必键入每个单独的变量。这是我的尝试:
for i 1:19
yi = sym('yi');
end
但是,我收到此错误:Unexpected MATLAB expression.
答案 0 :(得分:1)
我无法访问符号数学工具箱,但看看是否有帮助:
for i=1:19
eval(sprintf('y%d = sym(''y%d'')', i,i))
end
虽然,我强烈建议不要这样做。
答案 1 :(得分:-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{:})
还有其他方法可以创建字符串的单元格数组,例如,仅使用sprintf
和textscan
,但这是留给读者的练习。
这是使用symfun
的{{1}}创建功能的另一个(更简单,但不太优雅)选项:
syms
之后可以安全地清除符号函数varname = 'y';
idx = 1:19;
y = sprintf([varname '%d,'],idx);
syms(['tmp(' y(1:end-1) ')']);
,而不会打扰其他符号变量。