代码在别的程序里跑的通有的不行

问题遇到的现象和发生背景

位置 2 处的逻辑索引包含一个在数组边界之外的 true 值。
出错 fun (第 13 行)
train_scaleNew = trainX(:,B);
出错 ceshi>@(a)fun(a,trainX,trainY,testX,testY) (第 60 行)
fobj = @(a) fun(a, trainX, trainY, testX, testY);
出错 POA (第 20 行)
fit(i)=fitness(L);
出错 ceshi (第 69 行)
[Best_pos,Best_score,curve]=POA(pop,Max_iteration,lb,ub,dim,

用代码块功能插入代码,请勿粘贴截图

% 基于PSO优化的SVM故障分类
clc; clear; close all

% 数据加载
load 'Normal.mat' % 加载正常数据OUTERFAULT
load '12k_Drive_End_IR007_1_106.mat' % 加载内圈数据
load '12k_Drive_End_OR007@6_1_131.mat' % 加载外圈数据
load '12k_Drive_End_B007_1_119.mat' % 加载滚动体数据
load '12k_Drive_End_IR014_1_170.mat' % 加载内圈数据
load '12k_Drive_End_OR014@6_1_198.mat' % 加载外圈数据
load '12k_Drive_End_B014_1_186.mat' % 加载滚动体数据
load '12k_Drive_End_IR021_1_210.mat' % 加载内圈数据
load '12k_Drive_End_OR021@6_1_235.mat' % 加载外圈数据
load '12k_Drive_End_B021_1_223.mat' % 加载滚动体数据
fs = 12e3; % 采样频率
infaulta = X106_DE_time;
infaultb = X170_DE_time;
infaultc = X210_DE_time;
outfaulta =X131_DE_time;
outfaultb =X198_DE_time;
outfaultc =X235_DE_time;
ballfaulta =X119_DE_time;
ballfaultb =X186_DE_time;
ballfaultc =X223_DE_time;
normal = X098_DE_time; % 正常数据
infault=[infaulta;infaultb;infaultc]; % 内圈数据
outfault =[outfaulta;outfaultb;outfaultc]; % 外圈数据
ballfault =[ballfaulta;ballfaultb;ballfaultc]; % 滚动体数据

bin = 1024; % 分析窗宽度
len = min([length(normal), length(infault), length(outfault), length(ballfault)]);
Num = fix(len/bin); % 样本组数

normal_sample = FeatureExtract(normal, fs, bin, len);
normal_label = ones(1,Num); % 正常状态样本标签1
infault_sample = FeatureExtract(infault, fs, bin, len);
infault_label = repmat(2,1,Num); % 内圈故障样本标签2
outfault_sample = FeatureExtract(outfault, fs, bin, len);
outfault_label = repmat(3,1,Num); % 外圈故障样本标签3
ballfault_sample = FeatureExtract(ballfault, fs, bin, len);
ballfault_label = repmat(4,1,Num); % 滚动体故障样本标签4

%找出训练数据和预测数据(样本按行存储排列,样本标签按列存储排列)
randIndex = randperm(Num);
grp = fix(randIndex*2/3); % 每种状态2/3数据用于训练样本
train_data = [normal_sample(:,1:grp), infault_sample(:,1:grp), outfault_sample(:,1:grp), ballfault_sample(:,1:grp)];
train_label = [normal_label(:,1:grp), infault_label(:,1:grp), outfault_label(:,1:grp), ballfault_label(:,1:grp)];
test_data = [normal_sample(:,grp+1:end), infault_sample(:,grp+1:end), outfault_sample(:,grp+1:end), ballfault_sample(:,grp+1:end)];
test_label = [normal_label(:,grp+1:end), infault_label(:,grp+1:end), outfault_label(:,grp+1:end), ballfault_label(:,grp+1:end)];

% 训练/测试样本归一化
[traindata_scale, Xps]=mapminmax(train_data,0,1);
testdata_scale = mapminmax('apply',test_data, Xps);

trainX = traindata_scale'; % 训练样本
trainY = train_label'; % 训练标签
testX = testdata_scale'; % 测试样本
testY = test_label'; % 测试标签
tic
fobj = @(a) fun(a, trainX, trainY, testX, testY);
dim = size(trainX,2);
% 优化参数的取值下限,[0,1],大于0.5为选择该特征,小于0.5为不选择该特征
lb = 0;
ub = 1;
%% 参数设置
pop =10; %种群数量
Max_iteration=50;%最大迭代次数
% POA算法优化
[Best_pos,Best_score,curve]=POA(pop,Max_iteration,lb,ub,dim,fobj);
figure
plot(curve,'linewidth',1.5);
xlabel('迭代次数');
ylabel('适应度值');
title('收敛曲线');

c = 2;
g = 2;
toc
% 用优化得到的特征进行训练和测试
fprintf('最佳参数组合:c = %.2f, g = %.2f\n', c, g)
cmd = [' -c ', num2str(c), ' -g ', num2str(g)];
model = libsvmtrain(trainX, train_label, cmd);
%% SVM网络预测
[predict_labelTrain1, accuracyTrain1,] = libsvmpredict(trainY, trainX, model);
[predict_labelTest1, accuracyTest1,
] = libsvmpredict(testY, testX, model);
%% 结果分析
figure
hold on;
plot(trainY,'o');
plot(predict_labelTrain,'r*');
xlabel('训练集样本','FontSize',12);
ylabel('类别标签','FontSize',12);
legend('实际训练集分类','预测训练集分类');
title('基础SVM训练集的实际分类和预测分类图','FontSize',12);
grid o

figure
plot(testY, 'bo'); hold on
plot(PredY, 'r*'); grid on
xlabel('测试样本序号');
ylim([0 5]); yticks([1 2 3 4])
ylabel('状态标签:1 -正常 2 - 内圈 3 - 外圈 4 - 滚动体');
legend('实际类别','预测类别')