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)
end
t=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:15
y=[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')
grid
title('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)
end
a2=sum(a1)/15
q={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)

结果显示“索引超出矩阵维度。”求大神帮忙解决一下

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

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

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

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

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

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-04-18
为什么matlab老出现索引超出矩阵维度?可能是数据文件有问题,建议你这样来排查,把第41行的空格去掉,一直去到第40行的尾部,即光标符处于40行的尾部,保存。然后再运行你的代码。
第2个回答  2019-04-18
你的程序太太复杂了
粗略的看了一下, 需要改得东西很多,
里面用的函数有个太老了, 已经被替换了, 输入的格式也有问题
没有几个小时, 恐怕调不好
如果这个程序不重要就扔了吧, 如果重要, 肯定不能免费去调的.
相似回答