代码:
% %分组表
% %%考试分组
%%考试分组
%随机性
N=69;%69个人
G=4;%分组数目
data=1:N;%每个人的初始索引
%%给每个人随机分配索引
data_index=zeros(1,N);
for loop=1:N
index=randi(N-loop+1);
data_index(loop)=data(index);
data=data(find(data~=data(index)));
end
data_index
last_num=fix(N/G);%最后一组的人数
if(mod(N,G))
last_num=fix(N/G)+(N-G*fix(N/G));
end
%输出分组结果
clc;
disp('输出分组结果');
for lp=1:G
disp(['第',num2str(lp),'组']);
if(lp~=G)
disp(data_index(1,1+(lp-1)*fix(N/G):lp*fix(N/G)));
data_index(2,1+(lp-1)*fix(N/G):lp*fix(N/G))=lp;
end
if(lp==G)
disp(data_index(1,1+(lp-1)*fix(N/G):1+(lp-1)*fix(N/G)+last_num-1));
data_index(2,1+(lp-1)*fix(N/G):1+(lp-1)*fix(N/G)+last_num-1)=lp;
end
end
结果:
一维寻优,求函数最小值点
代码:
%一维寻优,成功失败法
%%生成数据
x=-pi:1/1000:2*pi;
%y=sin(x);
y=x.*x-4.*x+1;
data(1,:)=x;
data(2,:)=y;
plot(data(1,:),data(2,:));
%%计算
M_max=length(data);
y=y+rand(1,M_max)/100;
x0=99;%开始点索引
h=1/1000;%步长
error=10^-30;
x0_next=x0+h/(1/1000);%下一个点的索引
figure;
plot(x,y);hold on;
lp1=0;
while(x0_next<M_max&&abs(data(2,x0)-data(2,x0_next))>error)
if(x0_next<M_max&&data(2,x0_next)<data(2,x0))
lp1=lp1+1;
disp(strcat(strcat('第',num2str(lp1)),'次'))
h=2*h;
x0=x0_next;
x0_next=x0_next+floor(h/(1/1000));
if(x0_next>M_max)
x0_next=x0_next-floor(h/(1/1000));
continue;
end
plot(data(1,x0_next),data(2,x0_next),'r+');
hold on;
pause(0.5)
end
if((x0_next<M_max&&data(2,x0_next)>data(2,x0)))
x0=x0_next-floor(h/(1/1000));
h=h/20;
x0_next=x0+floor(h/(1/1000));
end
end
plot(data(1,x0),data(2,x0_next),'b*');
pause(0.5)
disp(data(2,x0))
运行结果: