使用For循环创建符号变量

时间:2014-03-02 01:30:56

标签: matlab for-loop symbolic-math

我正在尝试使用for循环创建大量符号变量,这样我就不必键入每个单独的变量。这是我的尝试:

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

但是,我收到此错误:Unexpected MATLAB expression.

2 个答案:

答案 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{:})

还有其他方法可以创建字符串的单元格数组,例如,仅使用sprintftextscan,但这是留给读者的练习。

这是使用symfun的{​​{1}}创建功能的另一个(更简单,但不太优雅)选项:

syms

之后可以安全地清除符号函数varname = 'y'; idx = 1:19; y = sprintf([varname '%d,'],idx); syms(['tmp(' y(1:end-1) ')']); ,而不会打扰其他符号变量。