MATLAB学习笔记_Day09蒙特卡洛模拟、旅行商问题、多元线性回归

学习视频:【零基础教程】老哥:数学建模算法、编程、写作和获奖指南全流程培训!

文章目录

  • 1. 蒙特卡洛模拟
    • 1.1 解决求函数最值问题
    • 1.2 0-1规划问题
  • 2. Floyd最短距离(Shortest Path)
  • 3. 多元线性回归分析
    • STATA软件使用
  • 4. 岭回归和lasso回归
  • 5. LINGO软件的使用
    • MATLAB解法:

1. 蒙特卡洛模拟

MATLAB学习笔记_Day09蒙特卡洛模拟、旅行商问题、多元线性回归_第1张图片

1.1 解决求函数最值问题

MATLAB学习笔记_Day09蒙特卡洛模拟、旅行商问题、多元线性回归_第2张图片
通过方程之间的联系,可以大致确定解的区间,进而解的方程。
MATLAB学习笔记_Day09蒙特卡洛模拟、旅行商问题、多元线性回归_第3张图片

1.2 0-1规划问题

MATLAB学习笔记_Day09蒙特卡洛模拟、旅行商问题、多元线性回归_第4张图片

还可以解决导弹追踪,旅行商问题等。

2. Floyd最短距离(Shortest Path)

图论最短距离(Shortest Path)算法动画演示-Dijkstra(迪杰斯特拉)和Floyd(弗洛伊德)

MATLAB学习笔记_Day09蒙特卡洛模拟、旅行商问题、多元线性回归_第5张图片

MATLAB学习笔记_Day09蒙特卡洛模拟、旅行商问题、多元线性回归_第6张图片
经典的三层循环。
MATLAB学习笔记_Day09蒙特卡洛模拟、旅行商问题、多元线性回归_第7张图片
注意的一点就是,因为是无向图,所以权重邻接矩阵是一个对称矩阵。

for k=1:n    % 中间节点k从1- n 循环
   for i=1:n     % 起始节点i从1- n 循环
      for j=1:n    % 终点节点j从1-n 循环
          if dist(i,j)>dist(i,k)+dist(k,j)  
             dist(i,j)=dist(i,k)+dist(k,j); 
             path(i,j)=path(i,k);   
          end
      end
   end
end

3. 多元线性回归分析

MATLAB学习笔记_Day09蒙特卡洛模拟、旅行商问题、多元线性回归_第8张图片

MATLAB学习笔记_Day09蒙特卡洛模拟、旅行商问题、多元线性回归_第9张图片

MATLAB学习笔记_Day09蒙特卡洛模拟、旅行商问题、多元线性回归_第10张图片

MATLAB学习笔记_Day09蒙特卡洛模拟、旅行商问题、多元线性回归_第11张图片

MATLAB学习笔记_Day09蒙特卡洛模拟、旅行商问题、多元线性回归_第12张图片

内生性:未考虑到的变量于公式中已出现的变量相关。会影响系数。
若均不相关,则为外生性。

MATLAB学习笔记_Day09蒙特卡洛模拟、旅行商问题、多元线性回归_第13张图片
MATLAB学习笔记_Day09蒙特卡洛模拟、旅行商问题、多元线性回归_第14张图片
MATLAB学习笔记_Day09蒙特卡洛模拟、旅行商问题、多元线性回归_第15张图片

MATLAB学习笔记_Day09蒙特卡洛模拟、旅行商问题、多元线性回归_第16张图片

STATA软件使用

MATLAB学习笔记_Day09蒙特卡洛模拟、旅行商问题、多元线性回归_第17张图片

(1)定量数据
MATLAB学习笔记_Day09蒙特卡洛模拟、旅行商问题、多元线性回归_第18张图片

MATLAB学习笔记_Day09蒙特卡洛模拟、旅行商问题、多元线性回归_第19张图片

MATLAB学习笔记_Day09蒙特卡洛模拟、旅行商问题、多元线性回归_第20张图片

MATLAB学习笔记_Day09蒙特卡洛模拟、旅行商问题、多元线性回归_第21张图片

4. 岭回归和lasso回归

MATLAB学习笔记_Day09蒙特卡洛模拟、旅行商问题、多元线性回归_第22张图片
MATLAB学习笔记_Day09蒙特卡洛模拟、旅行商问题、多元线性回归_第23张图片

MATLAB学习笔记_Day09蒙特卡洛模拟、旅行商问题、多元线性回归_第24张图片

5. LINGO软件的使用

链接 提取码:bni7

安装教程CSDN上面也有很多。LINGO 18.0安装教程

数学建模之十分钟学会LINGO(附建模实战)

编程注意点:
① 每个语句都需要分号来作为结束;
② 变量不区分大小写,X,x表示同一个变量注意区分;
③ Lingo 默认所有变量为大于等于 0 的数字,因而非负的条件不必多写;
④ 以 !开头,以 ;结束的语句是注释语句;
⑤ 一个线性规划中只含一个目标函数。(两个以上是多目标线性规划,Lingo 无法直接解);

数学建模之线性规划问题与LINGO软件的使用
MATLAB学习笔记_Day09蒙特卡洛模拟、旅行商问题、多元线性回归_第25张图片

MATLAB解法:

% 设x1桶生产A1牛奶,x2桶生产A2牛奶
% max y = 72*x1 + 64*x2(3*24 4*16)
% x1 + x2 <= 50
% 12*x1 + 8*x2 <=480
% 3*x1 + 4*x2 <= 100
% x1, x2 >= 0
f = [-72; -64];
a = [1, 1; 12, 8; 3, 4];
b = [50; 480; 100];
aeq = [0, 0];
beq = 0;
intcon=[1 2];
[x, y] = intlinprog(f,intcon,a,b,aeq,beq,zeros(2, 1),[inf, inf]);
x; y=-y;
sprintf('生产A1牛奶%dkg,A2牛奶%dkg,获利%d元',x(1),x(2), y)
all_time = 12 * x(1) + 8 * x(2);
money_max = y / all_time + rem(y, all_time);
sprintf('付出的工资最多是每小时%f元',money_max)

% max y = 72*x1 + 64*x2 - 35(x1 + x2) ( 37 29 )
f1 = [-37; -29];
[x, y] = intlinprog(f1,intcon,a,b,aeq,beq,zeros(2, 1),[inf, inf]);

if(-y > 0)
    sprintf("35元可买到1桶牛奶,买!每天最多买多少%d桶", x(1)+x(2))
else
    sprintf("35元可买到1桶牛奶,不买!")
end

% max y = 90*x1 + 64*x2(3*30 4*16)
f = [-90; -64];
[x1, y1] = intlinprog(f,intcon,a,b,aeq,beq,zeros(2, 1),[inf, inf]);
x1; y1=-y1;
if x1 == x
    sprintf('计划不变')
else
    sprintf('生产A1牛奶%dkg,A2牛奶%dkg,获利%d元',x1(1),x1(2), y1)
end

MATLAB学习笔记_Day09蒙特卡洛模拟、旅行商问题、多元线性回归_第26张图片

%%
% 设x1桶生产 3*x1 kg A1牛奶,x2桶生产 4*x2 kgA2牛奶
% 设 x3kg的A1 生产B1牛奶,x4kg的A2 生产B2牛奶
% max y = 72*x1 + 64*x2 + 32.8*x3 + 21.75*x4 ( (44-3)*0.8 (32-3)*0.75     )
% x1 + x2 <= 50
% 12*x1 + 8*x2 <=480
% 3*x1 + 4*x2 <= 100
% x3 <= 3*x1         -3*x1 + x3 <= 0
% x4 <= 4*x2         -4*x2 + x4 <= 0
% x1, x2 >= 0
f = [-72; -64; -32.8; -21.75];
a = [1, 1, 0, 0; 
    12, 8, 0, 0; 
    3, 4, 0, 0; 
    -3, 0, 1, 0; 
    0, -4, 0, 1];
b = [50; 480; 100; 0; 0];
intcon=[1 4];
[x, y] = intlinprog(f,intcon,a,b,[],[],zeros(4, 1),[]);
x; y=-y;
sprintf('生产A1牛奶%dkg,A2牛奶%dkg,生产B1牛奶%dkg,生产B2牛奶%dkg,获利%d元',3*x(1),4*x(2),0.8*x(3),0.75*x(4) ,y)

%%
% max y = 72*x1 + 64*x2 + 32.8*x3 + 21.75*x4 -30 ( (44-3)*0.8 (32-3)*0.75     )
% x1 + x2 <= 50 + 1
b1 = [51; 480; 100; 0; 0];
intcon=[1 4];
[x1, y1] = intlinprog(f,intcon,a,b1,[],[],zeros(4, 1),[]);
x1;
y1 = -y1 -30;
if y1 > y
    sprintf("应该投资")
else
    sprintf("不投资")
end

%%   
% 12*x1 + 8*x2 <=480 + 1
b2 = [50; 481; 100; 0; 0];
intcon=[1 4];
[x2, y2] = intlinprog(f,intcon,a,b2,[],[],zeros(4, 1),[]);
x2;
y2 = -y2 -3;
if y2 > y
    sprintf("应该投资")
else
    sprintf("不投资")
end
    
%%
% max y = 72*x1 + 64*x2 + 32.8*x3 + 21.75*x4 ( (44-3)*0.8 (32-3)*0.75     )
for i = 1:10
    f1 = [-72; -64; -32.8+20*(rand()-0.5); -21.75+20*(rand()-0.5)];
    intcon=[1 4];
    [x3, y3] = intlinprog(f1,intcon,a,b,[],[],zeros(4, 1),[]);
    y3 = -y3;
    if y3 ~= y
        sprintf("有影响")
    end
end

%%
% 3*x1>=10
a1 = [1, 1, 0, 0; 
    12, 8, 0, 0; 
    3, 4, 0, 0; 
    -3, 0, 1, 0; 
    0, -4, 0, 1;
    -3, 0, 0, 0];
b1 = [50; 480; 100; 0; 0; 10];
intcon=[1 4];
[xs, ys] = intlinprog(f,intcon,a1,b1,[],[],zeros(4, 1),[]);
if ys > y
    sprintf("更好的收益")
elseif ys == y
    sprintf("一样的收益")
else
    sprintf("会亏损")
end

你可能感兴趣的:(数学建模,matlab,算法)