⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 multiplot.m

📁 本程序为实验性程序
💻 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 + -