matlab中显示"索引超出矩阵维度"怎么解决

x = 1:1:18 %铁元素含量18组历史数据y = [5 4.4 5.8 6.4 3.1 1.8 5.9 2.9 8.8 8.9 5.9 2.6 1.7 6.1 3.2 0.7 2.4 2.2] x1 = linspace(1,18,100)y1 = spline(x,y,x1)plot(x,y,✀*✀,x1,y1,✀b✀)xlabel(✀取样次数✀)ylabel(✀铁元素含量✀) %%声明全局变量global p %训练集输入数据global t %训练集输出数据global R %输入神经元个数global S1 %输出神经元个数global S2 %隐层神经元个数global S %编码长度%%导入数据S1 = 10%输入和输出样本for i = 1:75 P(i,1:10)=y1(i:i+9)endt=p(2:75,10)%数据归一化[pn,minp,maxp,tn,mint,maxt]=premnmx(p,✀t✀);%测试数据for j=1:15 k(j,1:10)=y1(j+75:j+84)end%数据归一化[kn,mink,maxk,en,mine,maxe]=premnmx(k,✀e✀);%%BP神经网络%网络创建net=newff(minmax(pn),[10,1],{✀tansig✀,✀purelin✀},✀trainlm✀);net.layers{1},initFcn = ✀initwb✀;net.layers{2},initFcn = ✀initwb✀;net,inputWeights{1,1}.initFcn = ✀rands✀; %输入层权值net,inputWeights{2,1}.initFcn = ✀rands✀; %当前网络层权值net,biases{1,1}.initFcn = ✀rands✀; %输入层权值net,biases{2,1}.initFcn = ✀rands✀; %当前网络层阈值%设置训练参数net.trainParam.show = 100;net.trainParam.lr = 0.1;net.trainParam.mc = 0.9;net.trainParam.epochs = 10000;net.trainParam.goal = 1e-3;%网络训练net=init(net);net=train(net,pn,tn)%仿真测试s_bp=sim(net,kn)out1=postmnmx(s_bp,mine,maxe) %BP神经网络的仿真结果%bp算法预测值和真实值的比较figure(1)x=1:1:15y=[1.1678 0.7618 0.7122 0.7339 0.9089 1.1972 1.5581 1.9512 2.3360 2.6719 2.9184 3.0350 2.9811 2.7163 2.2000;]x1 = linspace(1,15,100)y1 = spline(x,y,x1)y2 = spline(x,out1,x1)plot(x,y,✀*✀,x1,y1,✀k✀,out1,✀p✀,x1,y2,✀r✀)gridtitle(✀bp算法预测值和真实值比较✀)xlabel(✀测试次数✀)ylabel(✀铁元素含量/ppm✀)legend(✀实际值✀,✀line1✀,✀预测值✀,✀line2✀)%计算bp算法的相对误差以及未来预测a=abs(out1-e✀)for i=1:15 a1(i,1)=a(1,i)/e(i,1)enda2=sum(a1)/15q={1.1972 1.5581 1.9512 2.3360 2.6719 2.9184 3.0350 2.9811 2.7163 2.2000;} [qn,mineq,maxq]=premnmx(q✀);w=sim(net,qn)w_bp=postmnmx(w,mine,maxe)结果显示“索引超出矩阵维度。”求大神帮忙解决一下
2026年09月22日 23:53
有3个网友回答
网友(1):

1、首先创建一个数组或矩阵,如在MATLAB命令窗口中输入代码,如下图所示。

2、数组创建好后,就可以进行数组或矩阵索引了,索引数组或矩阵时可以精确索引某行某列的元素,如我们在MATLAB命令窗口中输入代码。

3、需要索引出上面第2行第3列的元素还可以使用线性索引,即输入单值索引,是按单一下标按顺序向下遍历每一列。如果数组或矩阵较大的话可以先计算数组或矩阵的大小,然后利用尺寸进行帮助我们计算。

4、在索引数组或矩阵的时候注意不要索引超过矩阵或数组的大小,否则会程序报错,可以使用size或length先计算好数组或矩阵的大小。

5、最后关于创建等距数组或矩阵,可以使用格式 start:step:end来创建,在命令窗口中输入代码,如下图所示,就创建完成了。

网友(2):

为什么matlab老出现索引超出矩阵维度?可能是数据文件有问题,建议你这样来排查,把第41行的空格去掉,一直去到第40行的尾部,即光标符处于40行的尾部,保存。然后再运行你的代码。

网友(3):

你的程序太太复杂了
粗略的看了一下, 需要改得东西很多,
里面用的函数有个太老了, 已经被替换了, 输入的格式也有问题
没有几个小时, 恐怕调不好
如果这个程序不重要就扔了吧, 如果重要, 肯定不能免费去调的.