投影寻踪模型代码运行不下去了

具体是function[BESTX,BESTY,ALLX,ALLY]=IGAUCP(K,N,Pm,LB,UB,D,Alpha)在这儿就没法运行了,请问这个问题怎么解决?

同学你好,你的程序要把主函数和子函数区分好,我这里给你把该传的参数都传了,还有什么疑问可以继续问我

;
function main
clear
close all
load data.txt
D=data
[n,p]=size(D);
K=300;
N=100;
Pm=0.3;
LB=ones(1,p);
UB=ones(1,p);
Alpha=0.1;
[BESTX,BESTY,ALLX,ALLY] = IGAUCP(K,N,Pm,LB,UB,D,Alpha,BESTX);
end
function [BESTX,BESTY,ALLX,ALLY]=IGAUCP(K,N,Pm,LB,UB,D,Alpha,BESTX)
Best_a=(BESTX{K})';%方向向量
d=zeros(n,p);
Djmax=max(D);Djmin=min(D);
for i=1:n
    d(i,:)=(D(i,:)-Djmin)/(Djmax-Djmin);
end
Z=zeros(n,1);
for i=1:n
    Z(i)=abs(sum(Best_a.*d(i,:)));
end
Z=abs(Z);
figure%投影散布图
plot(abs(Z),"bd",'LineWidth',1,'MarkerEdgeColor','k','MarkerFaceColor','b','MarkerSize',5);%
axis([1,12,0,2.5]);
end

clear
close all
load data.txt
D=data;%D 原始样本数据
[n,p]=size(D);
K=300;%K 迭代次数
N=100;%N 种群规模,要求是偶数
Pm=0.3;%Pm 变异概率
LB=ones(1,p);%LB 决策变量的下界
UB=ones(1,p);%UB 决策变量的上界
Alpha=0.1;%Alpha 窗口半径系数,典型取值0.1
[BESTX,BESTY,ALLX,ALLY]=GAUCP(K,N,Pm,LB,UB,D,Alpha);
Best_a=(BESTX{K})';%方向向量
d=zeros(n,p);
Djmax=max(D);
Djmin=min(D);
for i=1:n
d(i,:)=(D(i,:)-Djmin)/(Djmax-Djmin);
end
Z=zeros(n,1);
for i=1:n
Z(i)=abs(sum(Best_a.*d(i,:)));
end
Z=abs(Z);
figure%投影散布图
plot(abs(Z),"bd",'LineWidth',1,'MarkerEdgeColor','k','MarkerFaceColor','b','MarkerSize',5);
%axis([1,12,0,2.5]);
grid on
xlabel(' ','FontName','TimesNewRoman','FontSize',12);
ylabel('Projective Value','FontName','TimesNewRoman','FontSize',12)
figure
[newZ,I]=sort(Z);
plot(abs(newZ),'bd','LineWidth',I,'MarkerEdgeColor','k''MarkerFaceColor','b','MarkerSize',5);
%axis([1,12,0,2.5]); %axis坐标系
grid on %显示网格线
xlabel(' ','FontName','TimesNewRoman','FontSize',12);
ylabel('Projective Value','FontName','TimesNewRoman','FontSize',12)
disp('最佳投影方向为')
disp(Best_a);
function(BESTX,BESTY,ALLX,ALLY)=IGAUCP(K,N,Pm,LB,UB,D,Alpha)
%%遗传算法求解投影寻踪模型
%%输入参数列表
%K 迭代次数
%N 种群规模,要求是偶数
%Pm 变异概率
%LB 决策变量的下界
%UB 决策变量的上界
%D 原始样本数据
%Alpha 窗口半径系数,典型取值0.1
%%输出参数列表
%BESTX K×1细胞结构,每一个元素是M×1向量,记录每一代的最优个体
%BESTY K×1矩阵,记录每一代的最优个体的评价函数值
%ALLX K×1细胞结构,每一个元素是M×N矩阵,记录全部个体
%ALLY K×N矩阵,记录全部个体的评价函数值
%%第一步:
M=length(LB);%决策变量个数
%种群初始化,每一列是一个样本
farm=zeros(M,N);
for i=1:M
x=unifrnd(LB(i),UB(i),1,N);
farm(i,:)=x;
end
%输出变量初始化
ALLX=cell(K,1);
ALLY=zeros(K,N);
BESTX=cell(K,1);
BESTY=zeros(K,1);
k=1;%迭代计数器初始化
%%第二步:迭代过程
while k<=K
%%以下是交叉过程
newfarm=zeros(M,2*N);
Ser=randperm(N);%两两随机配对的配对表
A=farm(:,Ser(1));
B=farm(:,Ser(2));
P0=unidrnd(M-1);
a=[A(1:P0,:);B((P0+1):end,:)];
b=[B(1:P0,:);A((P0+1):end,:)];
newfarm(:,2*N-1)=a;
newfarm(:,2*N)=b;
for i=1:(N-1)
A=farm(:,Ser(i));
B=farm(:,Ser(i+1));
P0=unidrnd(M-1);
a=[A(1:P0,:);B((P0+1):end,:)];
b=[B(1:P0,:);A((P0+1):end,:)];
newfarm(:,2*i-1)=a;
newfarm(:,2*i)=b;
end
FARM=[farm,newfarm];
%%选择复制
SER=randperm(3*N);
FITNESS=zeros(1,3*N);
Fitness=zeros(1,N);
for i=1:(3*N)
Beta=FARM(:,i);
FITNESS(i)=FIT(Beta,D,Alpha);
end
for i=1:N;
f1=FITNESS(SER(3*i-2));
f2=FITNESS(SER(3*i-1));
f3=FITNESS(SER(3*i));
if f1<=f2&&f1<=f3
farm(:,i)=FARM(:,SER(3*i-2));
fitness(:,i)=FITNESS(:,SER(3*i-2));
elseif f2<=f1&&f2<=f3
farm(:,i)=FARM(:,SER(3*i-1));
fitness(:,i)=FITNESS(:,SER(3*i-1));
else
farm(:,i)=FARM(:,SER(3*i));
fitness(:,i)=FITNESS(:,SER(3*i));
end
end
%%记录最佳个体和收敛曲线
X=farm;
Y=fitness;
ALLX{k}=X;
ALLY(k,:)=Y;
minY=min(Y);
pos=find(Y==minY);
BESTX{k}=X(:,pos(1));
BESTY(k)=minY;
%%变异
for i=1:N;
if Pm>rand&&pos(1)~=i
AA=farm(:,1);
BB=GaussMutation(AA,LB,UB);
farm(:,i)=BB;
end
end
disp(k);
k=k+1;
end
麻烦帮忙看看这个代码的主函数和子函数分别是哪部分啊?创建函数时二者需要分开吗?

IGAUCP是一个自定义的函数,不是工具箱内的函数,先看看Matlab中有没有这个函数的代码。

这个你给出的信息太少,无法作答