三村合建水厂问题研究 (代码)

本博客探讨了如何运用数学模型和MATLAB GUI程序设计,解决A、B、C三村在河边合建水厂以使水管总长最短的问题。博主提供了详细的MATLAB程序,包括运行界面和代码,可供下载参考。
摘要由CSDN通过智能技术生成

问题描述:

A村、B村和C村都在河流(Y轴)的东面,A村在y=3.5 km的路旁,B村在y=2.5 km的路旁,C村在y=0.5 km的路旁,他们要在河边合建一间水厂。请设计使水管总长最短的方案。


设计要求:

(1)使用matlab-GUI软件编程实现;

(2)只在第一象限[0,4]×[0,4]范围研究该问题;

(3)界面要有问题描述;

(4)输入给定点A, B, C的坐标;

(5)输出水厂和费尔马点的坐标,水管总长和水管的布局图。


下面贴出博主子丰的matlab程序:包括了程序的运行界面、程序界面和代码。

Matlab程序下载:点击打开链接

http://download.csdn.net/detail/softimite_zifeng/9679181


运行界面:



程序界面:



Matlab程序下载:点击打开链接

http://download.csdn.net/detail/softimite_zifeng/9679181


代码:

%三村合建水厂问题
function varargout = Water(varargin)
% WATER MATLAB code for Water.fig

gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @Water_OpeningFcn, ...
                   'gui_OutputFcn',  @Water_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end


function Water_OpeningFcn(hObject, eventdata, handles, varargin)

handles.output = hObject;

guidata(hObject, handles);

%初始化坐标轴
line([0,4],[0.5,0.5],'linewidth',2,'color','b');
line([0,4],[2.5,2.5],'linewidth',2,'color','b');
line([0,4],[3.5,3.5],'linewidth',2,'color','b');
line([0,4],[1,1],'color','k');
line([0,4],[2,2],'color','k');
line([0,4],[3,3],'color','k');
line([0,4],[4,4],'color','k');
hold on;
plot(5.7,3.4,'k.','markersize',20);
plot(5.7,3.1,'r.','markersize',20);
plot(5.7,2.8,'o','markersize',5,'linewidth',2);

global xA;   %村庄A的横坐标
xA=0;
global xB;   %村庄B的横坐标
xB=0;
global xC;   %村庄C的横坐标
xC=0;

global start;   %坐标轴中是否有村庄
start=0;

global bd;   %鼠标是否选中村庄
global bu;   %鼠标是否释放
global bx;   %选中的村庄号
bd=0;bu=0;bx=1;


function varargout = Water_OutputFcn(hObject, eventdata, handles) 

varargout{1} = handles.output;


%随机三个点
function pushbutton2_Callback(hObject, eventdata, handles)

global start;   %坐标轴中是否有村庄
start=1;

global xA;   %村庄A的横坐标
global xB;   %村庄B的横坐标
global xC;   %村庄C的横坐标

cla;

%初始化坐标轴
line([0,4],[0.5,0.5],'linewidth',2,'color','b');
line([0,4],[2.5,2.5],'linewidth',2,'color','b');
line([0,4],[3.5,3.5],'linewidth',2,'color','b');
line([0,4],[1,1],'color','k');
line([0,4],[2,2],'color','k');
line([0,4],[3,3],'color','k');
line([0,4],[4,4],'color','k');
hold on;
plot(5.7,3.4,'k.','markersize',20);
plot(5.7,3.1,'r.','markersize',20);
plot(5.7,2.8,'o','markersize',5,'linewidth',2);

%初始化数据
set(handles.xA,'String',0);
set(handles.xB,'String',0);
set(handles.xC,'String',0);
set(handles.yM,'String',0);
set(handles.ts,'String',0);
set(handles.xF1,'Visible','off');
set(handles.yF1,'Visible','off');
set(handles.xF2,'Visible','off');
set(handles.yF2,'Visible','off');
set(handles.xF1,'Str
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值