[已解决] 请问eval嵌套后为什么会出现生成的矩阵维数不同现象

[复制链接]
慈父的坩埚 发表于 2021-11-22 23:46:00
本帖最后由 慈父的坩埚 于 2021-11-23 00:48 编辑

C=[];
S1=1;
S2=2;
S3=3;
S4=4;
for i=1:4
eval(['c',num2str(i),'=',num2str(eval(['S',num2str(i)'])^2)']);
eval(['C=[C c',num2str(i),']']);

end

运行后显示:错误使用 horzcat,要串联的数组的维度不一致。如果改成:
C=[];

for i=1:4
eval(['c',num2str(i),'=',num2str(i)']);
eval(['C=[C c',num2str(i),']']);

end

就没有问题了。

这个程序是用于将读取的数据进行运算后生成结果的行向量,用于下一步运算,因此必须按照第一个程序那样边写,S1/2/3/4是我为了测试程序随便给出的数值,实际是读取数据文件中的值得到,然后进行运算。这个平方的运算也是随便给出的,用于测试程序。

问题简化一下就是:eval函数里怎么写一个函数运算,这个函数的结果需要根据i的循环赋给Ci,同时它的自变量为Si,都与i相关。同时保证ci为一个行向量的元素,将所有ci合成为一个行向量C

最佳答案


WarnerChang 发表于 2021-11-23 10:23:56
C=[];
S1=1;
S2=2;
S3=3;
S4=4;
for i=1:4
eval(['c',num2str(i),'=',num2str(eval(['S',num2str(i),'^2']))]);
eval(['C=[C c',num2str(i),']']);
end
回复此楼

3 条回复


WarnerChang 发表于 2021-11-23 10:23:56
C=[];
S1=1;
S2=2;
S3=3;
S4=4;
for i=1:4
eval(['c',num2str(i),'=',num2str(eval(['S',num2str(i),'^2']))]);
eval(['C=[C c',num2str(i),']']);
end
回复此楼

慈父的坩埚 发表于 2021-11-23 13:40:56

想再问一下我这样写为什么不对?
C=[];
S1=1;
S2=2;
S3=3;
S4=4;
for i=1:4

eval(['c',num2str(i),'=',num2str(eval(['S',num2str(i),'^2']))']);
eval(['C=[C c',num2str(i),']']);

end

就是红色标出的地方,为什么多了一个引号就不对了

WarnerChang 发表于 2021-11-23 14:04:38
慈父的坩埚 发表于 2021-11-23 13:40
想再问一下我这样写为什么不对?
C=[];
S1=1;

因为你没理解eval函数的用法啊,用单引号括起来的是字符串,你多了一个引号,中间有部分就不是字符串了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表