碎碎念

至少熟练掌握四五个模型

自己查资料是可以用ai的

第一节课

作业一

用MATLAB软件保存名画五牛图

错误

  1. 相对路径的读取,要加上引号才能表示这是一个路径位置

    1
    2
    3
    4
    obj = VideoReader(input.avi);  % 错误:缺少引号,MATLAB寻找名为input的变量
    obj = VideoReader('input.avi'); % 正确:用单引号包裹文件名
    % 或
    obj = VideoReader("input.avi"); % 正确:双引号也可以
  2. 什么时候是变量读取,什么时候路径读取

原代码用strcat(DIR, ‘.jpg’)拼接路径时,DIR末尾没有\,会导致生成类似G:...\foreground_frames.jpg的错误路径。
改用fullfile(DIR, ‘*.jpg’),MATLAB 会自动根据系统添加正确的分隔符(\或/)。

  1. 先figure,后imshow。就是先建图框,后显示。这两个代码要挨近放
    1
    2
    figure('Name', 'RGB Image')
    imshow(ImColor)

选择校园内一个树木,估计树木的重量范围

错误

  1. cos()函数,后面的角度要用弧度表示。如果不是弧度,要用deg2rad()函数进行转换

对一个拍摄时间大约5秒的监控视频,利用帧差法提取视频的前景目标

错误

  1. 在将图片写入视频后要关掉视频,否则无法正常打开
    1
    2
    close(videoWriter);
    disp(['处理完成,输出文件: ', outputVideoFile]);

作业二

说明Sudoku游戏的建模背景,模型方法,模型算法和软件计算

学习使用intlinprog()函数

注意

  1. \begin{itemize}是无序列表;\begin{enumerate}是有序列表
  2. A(sub2ind([n n n], i, j, k)) = 1;
    sub2ind将三维坐标 (i,j,k) 转换为一维索引
    这行代码在向量 A 中对应位置标记 1,表示 “第 i 行第 j 列可以填入数字 k”
  3. 命令行太长,加上...再回车
  4. Display off 是求解过程不显现
  5. 用latex语法输入_,要写成\_
    1
    2
    3
    %使用intlinprog求解数独谜题
    options = optimoptions('intlinprog', 'Display', 'off');
    x = iintlinprog(f, 1:N, [], [], Aeq, beq, lb, ub, options);
  6. \item和后面的文字之间要有空格
  7. 对于新函数要会使用帮助文档

说明热传导方程的建模背景,模型方法,模型算法和软件计算

使用有限差分方法
而且热传导模型是非常重要的模型

注意

  1. 使用有限差分方法时,稳定性条件是一个很重要的条件。即是保证alpha * dt / dx^2 < 0.5始终成立
  2. u(:, 1) = sin(pi * x)';在 MATLAB 中,代码末尾的撇号 ‘ 表示矩阵转置(共轭转置,对于实数矩阵等价于普通转置)
  3. 绘制图标的代码
    1
    2
    3
    4
    5
    6
    7
    %结果绘图
    figure;
    mesh(t, x, u); %绘制温度随时间和位置变化的三维图
    xlabel('时间 t'); %x轴标签
    ylabel('位置 x'); %y轴标签
    zlabel('温度 u'); %z轴标签
    title('热传导方程的解'); %标签
  4. 关于有限差分。格式是一阶导数使用前项欧拉格式,二阶使用中心格式
  5. figure出来的图像,不同使用场景就另存为不同格式

作业三

分类方法——距离分类法与K聚类方法。区别在于是否有督导(即标签)

作业四

  1. 虽然你安装了 Deep Learning Toolbox 13.0,但是在你的 MATLAB 版本里 patternet 已经不包含了
    (它在老版本 Neural Network Toolbox 里是标准函数)。MathWorks
    从 2019 年之后逐步用 新接口 (trainNetwork + layers) 取代了这些旧函数(包括 patternet, feedforwardnet, newff 等)。

第二节课

  • 图论模型:tsp问题(要么用lingo函数,要么转化为混合整数规划问题的标准型(当点多的时候)),邮递员问题(欧拉图)
  • 规划模型:
    方法一:基于求解器——适用于简单问题,容易看出系数向量:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    f = [21 25 7 15 51 51 37 15];
    Aeq = [1 1 1 1 0 0 0 0 ;...
    0 0 0 0 1 1 1 1;...
    1 0 0 0 1 0 0 0;...
    0 1 0 0 0 1 0 0;...
    0 0 1 0 0 0 1 0;...
    0 0 0 1 0 0 0 1];
    beq = [2000 1100 1700 1100 200 100];
    [sol, fval, exitflag, output] = linprog(f, [], [], Aeq, beq, zero(size(f)))
    方法二:(基于问题),适用于所有规划问题
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    x11 = optimvar('x11', 'LowerBound', 0); 
    x12 = optimvar('x12', 'LowerBound', 0);
    x13 = optimvar('x13', 'LowerBound', 0);
    x14 = optimvar('x14', 'LowerBound', 0);
    x21 = optimvar('x21', 'LowerBound', 0);
    x22 = optimvar('x22', 'LowerBound', 0);
    x23 = optimvar('x23', 'LowerBound', 0);
    x24 = optimvar('x24', 'LowerBound', 0);

    prob = optimproblem('Objective', 。。。。);
    prob.Constraints.c1 = x11+ x22 == 1234
    prob.Constraints.c2 = x11+ x21 == 1234
    %所谓线性规划,这里其实就是方程
    problem = prob2struct(prob);
    [sol, fval, exitflag, output] = linprog(problem)
    线性规划存在标准型

作业一

  • 模拟退火模型:模拟最优
  • 关于文件导入与数据读取,readcellreadtablereadmatrix
  • 关于加入小节。\section{}, \subsection{}, \subsubsection{},只有这几个表示的是小节,才会在目录中显示
  • \vspace{5em},用来作为间隔,方便图片不会遮挡。最好加上[htbp]

作业三

遗传算法——处理庞大数据时?

第三节课

作业一

这段代码主要实现了两类微分方程组的数值求解,分别是一个三阶含参微分方程组和刚性的 van der Pol 方程组

二、数值求解方法分析
求解器选择依据
普通方程组:使用ode45(龙格 - 库塔 4 (5) 阶算法),适合非刚性的中等精度问题
刚性方程组:对比ode45和ode15s(线性多步法),ode15s专为刚性系统设计,能显著提高计算效率
求解精度控制
通过odeset设置相对误差RelTol=1e-8和绝对误差AbsTol=1e-10
小步长h=0.001确保求解精度,但会增加计算量(实际中可使用变步长模式)
计算效率对比
通过tic/toc计时比较两种求解器在刚性问题上的性能
speedup = t1/t2量化ode15s相对ode45的加速比(理论上会远大于 1,体现刚性求解器的优势)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
% 含参的常微分方程的数值解
clc, clearvars, close all;
tmax = 30;% 时间终点,自定义
h = 0.001;% 步长
tspan = 0:h:tmax;% 时间范围
y0 = [0 1 1];% 初值(3维向量)
b = [1 -1 -0.51];% 参数

% 设置求解选项
options = odeset('RelTol', 1e-8, 'AbsTol', 1e-10);

% 匿名函数定义3阶微分方程组(修正:返回3个元素的向量)
% 根据实际方程组修改第三个方程
fun = @(t, x, a) [
a(1)*x(2)*x(3); % 第一个方程
a(3)*x(1)*x(2); % 第二个方程
a(2)*x(1) + x(3)^2 % 第三个方程(示例,根据实际问题修改)
];

% 求解微分方程
[t, Xsol] = ode45(@(t, x)fun(t, x, b), tspan, y0, options);

% 绘图
plot(t, Xsol(:, 1), '-', t, Xsol(:, 2), '--', t, Xsol(:, 3), '.-')
legend('y_1(t)', 'y_2(t)', 'y_3(t)');
xlabel('t')
ylabel('y(t)')
title('三阶微分方程组的数值解')

% 刚性方程的求解器(van der Pol方程组)
tmax = 3000;
y0 = [2 0]; % 这里是2维初始条件,对应2阶方程组
mu = 1000;

% 定义van der Pol方程组(2阶,与初始条件维度匹配)
fun = @(t, y, a)[y(2); a*(1-y(1)^2)*y(2)-y(1)];

% 使用ode45求解
tic
[t45, Ysol45] = ode45(@(t, y) fun(t, y, mu), [0 tmax], y0);
t1 = toc

% 使用ode15s求解刚性方程
tic
[t15s, Ysol15s] = ode15s(@(t, y) fun(t, y, mu), [0 tmax], y0);
t2 = toc

speedup = t1/t2 % 计算加速比

% 绘图
figure;
plot(t45, Ysol45(:,1), '-o')
title('ode45求解结果')

figure;
plot(t15s, Ysol15s(:, 1), '-r*')
title('ode15s求解结果 (y1)')

figure;
plot(t15s, Ysol15s(:, 2), '-r*')
title('ode15s求解结果 (y2)')

figure;
plot(Ysol15s(:, 1), Ysol15s(:, 2))
title('相平面轨迹')
xlabel('y1')
ylabel('y2')

其他

  • 分号。有分号,是会输出这个结果。没分号的代码是不会输出的
  • 在运算符前后,要用空格分隔
  • 正常文字排版,不用\begin\end。导言区设置了缩进的话,换行那就会自动缩进。文字换行,一种方法是空一行,一种方法是末尾加\\
  • 加的不是\start,而是\begin