matlab问题:下面第二段代码究竟错在哪里?有人说s(k)与k的维数不相等不能相加,怎么个不相等?实在不明白

来源:百度知道 编辑:UC知道 时间:2024/06/27 08:54:55
%【1】
clc;clear
s=0
N=3
for k=1:N
s(k+1)=s(k)+k
end

结果:
s = 0 1 3 6

%【2】
clc;clear
s=0
N=3
for k=1:N
s(k)=s(k)+k
end

结果:
??? Index exceeds matrix dimensions.

Error in ==> D:\MATLAB6p5\work\Untitled5.m
On line 5 ==> s(k)=s(k)+k

逍遥神圣 说的不全对
第二个程序段错误的原因的确是下标越界。其越界的分析如下:
1、执行k=1,s(1)=s(1)+1,s(1)=s=0,正常
2、执行k=2,s(2)=s(2)+1,s(2)不存在,尚未建立s(2),更谈不上取s(2)的值了,故而越界出错,退出

第一个程序正确的原因是它每一步都扩展了一个s元素,分析如下:
1、执行k=1,s(2)=s(1)+1,s(1)=s=0,s(2)=0+1=1;此处s(2)临时应需求而创建并赋值,正常
2、依次类推

Index exceeds matrix dimensions.

索引超出矩阵边界

在你这里是这样:因为初始的s是1X1的矩阵
因此当执行到k=2时超出了边界,所以报错

可以考虑把一开始的s=0改为s=[0,0,0]

不过最好是先有N,这样通用性高,可以改为
N=3;
s=zeros(1,N);
for k=1:N
s(k)=s(k)+k;
end

idn'tknow