📄 multiplot.m
字号:
function multiPlot()
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 本程序调用了线性规划工具箱,绘图采用ezplot方式
% 需要注意的是,本程序对函数ezfcnchk.m进行了修改:
% (Line51)e = exist(inx);修改为(Line51)e=1;
% 请使用完程序后将您的相应程序恢复
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
out=0;
while(out==0)
clc;
syms x y;
fprintf('************************************************\n');
fprintf('请输入绘图基准点的个数\n');
choice_num=input('请输入(默认值为3):');
fprintf('请选择基准点的生成方式\n');
fprintf('0:随机生成;');
fprintf('1:均匀分布;');
choice_gen=input('请输入(默认值为0):');
if(isempty(choice_num))
number=3;
else
number=choice_num;
end
if(isempty(choice_gen))
pointMatrix=rands(number,2);
choice_gen=0;
else
for i=1:number
pointMatrix(i,1)=cos(pi/2+(i-1)*2*pi/number);
pointMatrix(i,2)=sin(pi/2+(i-1)*2*pi/number);
end
end
f=@(x)sum(sqrt((x(1)-pointMatrix(:,1)).^2+...
(x(2)-pointMatrix(:,2)).^2),1);
x0=[0;0];ff=optimset;ff.Display='iter';
x=fminunc(f,x0,ff);
disV=zeros(number,1);
for i=1:number
disV(i,1)=sum(sqrt((pointMatrix(i,1)-pointMatrix(:,1)).^2+...
(pointMatrix(i,2)-pointMatrix(:,2)).^2),1);
end
clc;
fprintf('基准点个数:%d\n',number);
if(choice_gen==0)
fprintf('基准点生成方式:随机生成;\n');
else
fprintf('基准点生成方式:均匀生成;\n');
end
fprintf('基准点位置:\n');
for i=1:number
fprintf('No.%d:%8.4f,%8.4f\n',i,pointMatrix(i,1),pointMatrix(i,2));
end
fprintf('到各个基准点距离和最短的点:');
fprintf('(%5.4f,%8.4f)\n',x(1,1),x(2,1));
fprintf('到各个基准点距离和的最小值:');
distance=0;
for i=1:number
distance=distance+sqrt((pointMatrix(i,1)-x(1,1)).^2+(pointMatrix(i,2)-x(2,1)).^2);
end
fprintf('%8.4f\n',distance);
fprintf('通过各个基准点的距离和与最小值的比例:\n')
for i=1:number
fprintf('No.%d:%8.4f\n',i,disV(i,1)./distance);
end
thisPlot(number,pointMatrix,disV)
fprintf('继续绘图?:\n');
fprintf('0:继续绘图;\n');
fprintf('1:退出程序;\n');
out=input('请输入(默认值为0):');
if(isempty(out))
out=0;
else
out=1;
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function thisPlot(number,pointMatrix,disV)
syms x y;
figure;
hold on;
f=0;
for i=1:number
f=f+sqrt((x-pointMatrix(i,1))^2+(y-pointMatrix(i,2))^2);
plot(pointMatrix(i,1),pointMatrix(i,2),'*');
end
for i=1:number
ff=f-disV(i,1);
ezplot(ff);
end
title('');
axis([-2 2 -2 2])
grid on;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -