MATLAB在数学建模中的应用

MATLAB在数学建模中的应用

一.预备知识

1.1.关于MATLAB软件

由于科学技术及计算机的飞速发展,各类数学软件不断涌现,这使在解决各类复杂的问题变得非常简单。常用的数学软件有Mathematica、MATLAB、SAS等软件。MATLAB是“Matrix Laboratory"的缩写,意为“矩阵实验室”,是当今很流行的科学计算软件。

信息技术、计算机技术发展到今天,科学计算在各个领域得到了广泛的应用。在许多诸如控制论、时间序列分析、系统仿真、图像信号处理等方面产生了大量的矩阵及其他计算问题。自己去编写大量的繁复的计算程序,不仅会消耗大量的时间和精力,减缓工作进程,而且往往质量不高。

1984年,美国Mathwork软件公司成立,MATLAB的内核开始采用C语言编写,并推向市场。

20世纪90年代,MATLAB已经成为国际控制界公认的标准计算软件。Mathwork软件公司于1993年推出了基于Windows平台的MATLAB4.0;从1997年的5.0版起,历经5.x,6.x到7.0版本,MATLAB软件“面向对象”的特点愈加突出,数据类型愈加丰富,操作界面愈加友好,运算速度越来越快,功能越来越强大。


优点:
<1> 简单易学
<2> 代码短小高效
<3> 计算功能非常强大
<4> 强大的图形表达功能
<5> 可扩展性能

1.2 MATLAB6.X操作入门

1.2.1 窗口
  • [Command Window]命令窗口
  • [Workspace]工作区窗口
  • [Editor/Debug]程序编辑器
  • [Command History]指令历史记录窗口
  • [Current Directory]当前路径选择窗口
1.2.2 基础运算

在这里插入图片描述
注意:“/”表示“右除”,如“4/2”等于2;而
“\”表示“左除”,如“4\2”等于0.5.

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 魔方矩阵:magic()
  • 随机矩阵:rand()
    在这里插入图片描述

二.数据建模常规方法的Matlab实现

数据的读入
数据的读入可以分为两类:
(1)Excel 与Matlab的数据交互
(2)记事本与Matlab的数据交互

在Matlab中可以读取记事本中的数据,也可以将内存中的变量数据保存到记事本中,以遍后期操作。

a)当记事本中记录的全部都是数据时,可以用函数load,其形式是:A=load('文件名.txt')
b)当记事本中的数据结构比较复杂时,就不能用函数load,此时函数textread是最优的选择,其形式是:[A,B,C,.…]=textread('文件名.txt','读取格式',N)其中A,B,C,.….为每一列数据将要保存的变量名:N为读取次数。
c)可以从Matlab中直接读入记事本,其方法为:打开Matlab,从左边的Current Folder中找到相应的txt文件,点开右键找到Import Data,再点next,再点完成即可。相应的数据和非数据格式分别保存到两个文件自动保存再Workspace里


三.数据拟合方法

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

四.规划问题的Matlab求解

规划问题是常见的数学建模问题,离散系统的优化问题一般可以通过规划模型来求解。主要介绍一下三类规划问题:
(1)线性规划问题
(2)非线性规划问题
(3)二次性规划问题
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五.灰色预测及Matlab实现

灰色模型又称灰色理论,有严格的理论基础,最大优点是实用。用灰色模型预测的结果比较稳定,不仅适用于大数据量的预测,在数据量较少时,预测结果依然准确。在建立灰色预测模型之前,需要先对原始时间序列进行数据处理,经过数据预处理后的数据序列成为生成列。常用的处理方式有累加累减两种,通常用累加方法。通过累加生成有较强规律性的数据序列,然后建立相应的微分方程模型,从而预测事物的未来发展趋势。
一阶线性微分方程模型GM (1,1)最为常用。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六.模拟退火算法及Matlab实现

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

clc       %清空环境中的变量
tic
iter = 1;                                                                                   % 迭代次数初值
a=0.99;                                                                                    %温度衰减系数
t0=120;                                                                                    %初始温度
tf=1;                                                                                          %最后温度
t=t0;
rand('seed',0)
Markov=10000;                                                                     %Markov链长度
% data1=[565.0 575.0; 25.0 185.0;345.0 750.0;945.0 685.0;845.0 655.0;880.0 660.0;25.0 230.0; 525.0 1000.0;580.0 1175.0;
%     650.0 1130.0;1605.0 620.0 ;1220.0 580.0;1465.0 200.0;1530.0 5.0;845.0 680.0;725.0 370.0; 145.0 665.0; 415.0 635.0; 
%     510.0 875.0  ;560.0 365.0;300.0 465.0; 520.0 585.0;480.0 415.0;835.0 625.0; 975.0 580.0; 1215.0 245.0;1320.0 315.0;
%     1250.0 400.0; 660.0 180.0; 410.0 250.0; 420.0 555.0;575.0 665.0; 1150.0 1160.0; 700.0 580.0; 685.0 595.0; 685.0 610.0;
%     770.0 610.0;795.0 645.0; 720.0 635.0; 760.0 650.0;475.0 960.0;95.0 260.0; 875.0 920.0; 700.0 500.0;555.0 815.0;830.0 485.0;
%     1170.0 65.0; 830.0 610.0; 605.0 625.0; 595.0 360.0; 1340.0 725.0;1740.0 245.0];



data1=[37,49,52,20,40,21,17,31,52,51,42,31,5,12,36,52,27,17,13,57,62,42,16,8,7,27,30,43,58,58,37,38,46,61,62,63,32,45,59,5,10,21,5,30,39,32,25,25,48,56,30;
    52,49,64,26,30,47,63,62,33,21,41,32,25,42,16,41,23,33,13,58,42,57,57,52,38,68,48,67,48,27,69,46,10,33,63,69,22,35,15,6,17,10,64,15,10,39,32,55,28,37,40]';                                                                        %读入城市的坐标
city=data1;
n = size(city,1);                                                                      %城市距离初始化
D = zeros(n,n);                                                   
for i = 1:n
    for j = 1:n
            D(i,j) = sqrt(sum((city(i,:) - city(j,:)).^2));
    end    
end                                                                                
route=1:n;   
route_new=route;
best_length=Inf;
Length=Inf;
best_route=route;%%
while t>=tf
           for j=1:Markov
                    %进行扰动,长生新的序列route_new;
                    if (rand<0.7)
                        %交换两个数的顺序
                           ind1=0;ind2=0;
                           while(ind1==ind2&&ind1>=ind2)
                                    ind1=ceil(rand*n);
                                    ind2=ceil(rand*n);
                           end                      
                                      temp=route_new(ind1);
                                      route_new(ind1)=route_new(ind2);
                                      route_new(ind2)=temp;
                    else
                          ind=zeros(3,1);
                          L_ind=length(unique(ind));
                          while (L_ind<3)
                                    ind=ceil([rand*n rand*n rand*n]);
                                    L_ind=length(unique(ind));
                          end
                          ind0=sort(ind);
                          a1=ind0(1);b1=ind0(2);c1=ind0(3);
                         route0=route_new;
                         route0(a1:a1+c1-b1-1)=route_new(b1+1:c1);
                         route0(a1+c1-b1:c1)=route_new(a1:b1);
                         route_new=route0;    
                    end
                     %计算路径的距离,Length_new 
                          length_new = 0;
                        Route=[route_new route_new(1)];
                              for j = 1:n
                                  length_new = length_new+ D(Route(j),Route(j + 1));
                              end
                     if length_new<Length      
                              Length=length_new;
                              route=route_new;
                           %对最优路线和距离更新
                           if       length_new<best_length
                                    iter = iter + 1;    
                                     best_length=length_new;
                                     best_route=route_new;
                           end
                     else
                             if rand<exp(-(length_new-Length)/t)
                                  route=route_new;
                                  Length=length_new;
                              end
                     end
                       route_new=route; 
                end              
                        t=t*a
end
%% 结果显示 
toc
Route=[best_route best_route(1)];
plot([city(Route ,1)], [city(Route ,2)],'o-');
    disp('最优解为:')
    disp(best_route)
    disp('最短距离:')
    disp(best_length)
    disp('最优解迭代次数:')
    disp(iter)
for i = 1:n
    %对每个城市进行标号
    text(city(i,1),city(i,2),['   ' num2str(i)]);
end
xlabel('城市位置横坐标')
ylabel('城市位置纵坐标')
title(['模拟退火算法(最短距离):' num2str(best_length) ''])

七.遗传算法及Matlab实现

在这里插入图片描述
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值