- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565807 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174965
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
还在为数学建模的事发愁?带你一起来看看数模竞赛中必备的经典算法
8 x7 W& [( g- t9 N( r& |" P/ N: Q
C. @; ^4 ^7 T# C前言* J. _5 }/ l* h3 n- j
数学建模比赛是本科生和研究生阶段最重要的比赛之一,包括全国大学生数学建模竞赛(俗称“国赛”)和美国大学生数学建模竞赛(俗称“美赛”)。在这些比赛中取得好成绩,不仅有助于保研、有助于找工作,更重要的是形成科学的思维模式。以下是博主精心整理的两个matlab专栏,包含入门到精通及实战内容,需要的小伙伴可根据自己需求自行订阅。
& C5 i) g. |" h4 O/ N2 S5 _4 l
7 Z# C% N0 J2 Q" B$ H/ b
! r& l1 x u5 k7 Y( \/ s" w( eMATLAB-30天带你从入门到精通$ p" N( _* F, f5 D4 g3 g
9 @! b5 C1 X2 Z. z0 J- x7 c
4 C* o* p$ ?+ R" ?. }6 T1 w# Ihttps://blog.csdn.net/wenyusuran/category_10614422.html/ F" m6 z9 z9 W: n" }+ g0 W
/ G6 j8 p4 W; D1 r
" Y8 w* f+ m( T# {5 j
MATLAB深入理解高级教程(附源码)
0 P5 ~% i+ i3 y& p* ^! x: [1 e; e! Y1 t0 H% |. T( S/ P% ^
! f% K! ?1 P3 r! r& x6 p" G
https://blog.csdn.net/wenyusuran/category_2239265.html8 C+ y/ R: I9 j9 v6 v; ^
X1 D7 l6 F9 [8 ` l8 z% B
8 d8 J0 F+ X' J7 c5 v7 p
在博主的资源中也有各种算法的应用实例源代码,需要的小伙伴自取哟。
9 T1 I7 C: I1 t2 g- {
9 G- q% c3 l U h' r& B- T
. S# u# ]1 `& q7 J' ^$ ^ 7 f5 r, X" |' o6 L
9 ^. k1 c) F2 d- r% ?, `( A
. V5 h0 I0 G' @5 Y6 i* }3 O
- T9 J3 Q- X9 y' x$ B8 ^
/ i8 W2 L) I8 ~! T* \! I5 Q5 f
/ m* X4 |# L0 z+ |2 v' r3 Q8 `' X+ F
6 N$ `) m7 d5 h) I' }9 Z: h! j
+ o( }' Z/ \8 l. t( H. C2 T
: S" {! `, I# @! y/ e- t* f$ J: F" Y* @& ~! n
01 蒙特卡罗算法
7 j. E2 ~) ~6 p" j1946 年,美国拉斯阿莫斯国家实验室的三位科学家 JohnvonNeumann, Stan Ulam和 Nick Metropolis 共同发明了蒙特卡罗方法。& I7 u' y, K: y% V. n, z
7 {$ w% \! K5 n! R; Y
; T @/ G9 s, x9 o& p
蒙特卡罗方法(Monte Carlo method),又称随机抽样或统计模拟方法,是一种以概率统计理论为指导的一类非常重要的数值计算方法。此方法使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。
6 k0 ~( B ]; l( ^$ W/ l% y
2 H- k3 w; W- F( U9 V1 ?! g( `/ _* [- p
由于传统的经验方法由于不能逼近真实的物理过程,很难得到满意的结果,而蒙特卡罗方法由于能够真实地模拟实际物理过程,故解决问题与实际非常符合,可以得到很圆满的结果。
$ m: j/ O* W) u( o7 ^) b- M5 N1 _! w% d& [% a6 k& h
' q5 ~' G8 m5 @/ c7 t* p蒙特卡罗方法的基本原理及思想如下:8 S# @3 T* D: \( s+ u* K! I# G5 Q l
( \: T. J- t) L
; K- ~( R: [. R: n! Z7 q当所求解问题是某种随机事件出现的概率,或者是某个随机变量的期望值时,通过某种“实验”的方法,以这种事件出现的频率估计这一随机事件的概率,或者得到这个随机变量的某些数字特征,并将其作为问题的解。# R% G% n8 N. n4 d) O8 e9 L
, T* d3 G. c$ ?
" \* G1 P I f! A7 U8 n! E9 _4 @0 h9 W举个栗子,直观了解蒙特卡洛方法:
4 g: Z3 g9 o2 s5 k- x/ J, }
5 c h: R* Q1 o. q0 v' w
. O9 c3 f: f) i; S- C0 u假设我们要计算一个不规则图形的面积,那么图形的不规则程度和分析性计算(比如:积分)的复杂程度是成正比的。蒙特卡洛方法是怎么计算的呢?假想你有一袋豆子,把豆子均匀地朝这个图形上撒,然后数这个图形之中有多少颗豆子,这个豆子的数目就是图形的面积。当你的豆子越小,撒的越多的时候,结果就越精确。在这里我们要假定豆子都在一个平面上,相互之间没有重叠。
, F$ S& o- m( }3 ^ p4 m# v- E5 J0 ]0 f7 y
7 M9 O* h1 a6 d( _
% O" H7 B1 C$ r' z3 p
& ^+ a' |6 e( d! O- t' l
$ P- H; f4 o( C
2 Y! V' u( ^3 h2 M! X( ?3 S1 b蒙特卡罗方法通过抓住事物运动的几何数量和几何特征,利用数学方法来加以模拟,即进行一种数字模拟实验。它是以一个概率模型为基础,按照这个模型所描绘的过程,通过模拟实验的结果,作为问题的近似解。 q/ i. l8 J+ X2 N& V* ?7 M4 }
8 F* | ~3 G) H k# b& r4 P
4 T% u, l. e0 T& B* |- q; T蒙特卡罗方法与一般计算方法有很大区别,一般计算方法对于解决多维或因素复杂的问题非常困难,而蒙特卡罗方法对于解决这方面的问题却比较简单。其特点如下:
7 _. i: t7 m! ?7 d& r; O% K8 f
' S9 x- S6 v' O+ e% h/ f6 e5 m, t- m$ X0 Z4 e9 `4 o
a、直接追踪粒子,物理思路清晰,易于理解;! P2 a6 a2 _3 T9 b9 o: f0 d
) M9 d' o( \! k+ g4 H
0 F6 [0 h9 O z
b、采用随机抽样的方法,较真切的模拟粒子输运的过程,反映了统计涨落的规律;
( r/ `$ q1 k2 E( z
, L) |7 h$ X8 c/ ?# }: c3 e) J4 a y+ i; J; I |
c、不受系统多维、多因素等复杂性的限制,是解决复杂系统粒子输运问题的好方法/ [- Z3 c7 }9 H6 _5 N
9 S0 L3 |' _3 Q( |6 V
+ D" S, E5 @( E9 [1 N: T& _等等6 a7 I; U( v9 |3 ]: d% }: ^) u4 b- z
! `0 ]) l# s! j3 |2 [9 s9 o
0 v7 h6 F+ x M& M* q 02 数据拟合、参数估计、插值等数据处理算法
K! _% L4 T5 q我们通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用 Matlab 作为工具。
& x1 S7 }6 r) x' p
/ {1 t9 a- o' {2 y2 P( l% C; ~( k8 d
数据拟合在数学建模比赛中中有应用,与图形处理有关的问题很多与拟合有关系,一个例子就是 98 年数学建模美国赛 A 题,生物组织切片的三维插值处理,94 年 A 题逢山开路,山体海拔高度的插值计算,还有吵的沸沸扬扬可能会考的“非典”问题也要用到数据拟合算法,观察数据的走向进行处理。
1 P2 ~ N& ?; |5 r3 _- H0 [5 [. Y8 o7 Z
3 h) G) a5 ?5 D" N* p" |" m8 r/ z% r( m5 \1 ]6 Q: f: S0 c9 V6 i6 ?
! z7 t, t. `0 |" L% P- P' J6 j A6 z
Q; ]7 H& w5 K, ]& x7 O
, G% q/ b8 M% c
此类问题在 MATLAB 中有很多现成的函数可以调用,熟悉 MATLAB,这些方法都能游刃有余的用好。: ]5 l+ h3 G' S
n; e- C/ d. a2 p+ m/ @1 B1 v3 n. z3 `) _4 k
03 线性规划、整数规划、多元规划、二次规划等规划类问题
5 F0 Y2 a9 p) K# E l数学建模竞赛中很多问题都和数学规划有关,可以说不少的模型都可以归结为一组不等式作为约束条件、几个函数表达式作为目标函数的问题。* |+ o. M* {0 }5 ^3 M
( S' [( l6 N7 `4 `1 \" Q
0 q7 O2 L: F& n
遇到这类问题,求解就是关键了,比如 98 年 B 题,用很多不等式完全可以把问题刻画清楚,因此列举出规划后用 Lindo、Lingo 等软件来进行解决比较方便,所以还需要熟悉这两个软件。9 o l9 x7 ?- i; G# I
# N* c7 a5 F. ^- i
6 }+ u3 }! q1 E+ X 04 图论算法
6 h8 b8 F4 Q7 W- T" x7 E这类问题算法有很多,包括:Dijkstra、Floyd、Prim、Bellman-Ford,最大流,二分匹配等问题。
; K" J) p# _' ?3 x4 S" z2 ~3 O% M3 v* m3 m; a3 z- q
' Y! H9 A7 A3 `. u, I2 t关于此类图论算法,可参考 IntroductiontoAlgorithms--算法导论,关于图算法的第22章-第26章。
+ J# H, B; s. T# }6 `7 u8 b
7 S( M5 E% F/ }- y' L: c1 k; V* @- z( V
n4 e6 _5 G, f7 U- W! ^, J! |; F) G7 \. l
: Q% N- y( c7 M# @: ?2 b8 `" d# u+ ]
05 动态规划、回溯搜索、分治算法、分支定界等计算机算法
+ f& L$ ]5 z5 d ]在数学建模竞赛中,如:92 年 B 题用分枝定界法,97年 B 题是典型的动态规划问题,此外 98 年 B 题体现了分治算法。. X; o6 \ c+ \# u3 t
: ?- k6 I% B" F: U
7 j, W/ Q* l. Q
% d& g7 @8 M' H/ D- Y9 G/ T* _1 h5 E1 q8 z* p- r
; g; \( k3 Z) S
" z! k; I8 K. Z) G3 u这方面问题和 ACM 程序设计竞赛中的问题类似,推荐看一下算法导论,与《计算机算法设计与分析》(电子工业出版社)等与计算机算法有关的书。
0 ~! E9 z' N9 E+ m; Z+ n3 H+ b" L
- h, u- J0 ^& C6 N
2 w e: h! T" C ]' l6 v 06 最优化理论的三大经典算法:模拟退火法、神经网络、遗传算法* y% [2 z) O* ~& A$ k7 [
这十几年来最优化理论有了飞速发展,模拟退火法、神经网络、遗传算法这三类算法发展很快。* I( N1 Q3 z; Z6 p9 G( n
. }" ]5 K o! L
7 y2 j8 h' X1 K& C9 f在数学建模竞赛中:比如 97 年 A 题的模拟退火算法,00 年 B 题的神经网络分类算法,01 年 B 题这种难题也可以使用神经网络。5 U4 U' c9 o7 m. s0 `/ j' w$ o2 s
6 G) P1 D5 C# }0 V3 n9 y
6 g5 L* t" p5 z* H- J0 o/ [还有美国竞赛 89 年 A 题也和 BP 算法有关系,当时是 86 年刚提出 BP 算法,89 年就考了,说明赛题可能是当今前沿科技的抽象体现。
+ F" e/ ?9 j; j4 C9 J2 P) {- c: `# w6 V" u5 T7 |
1 K- N7 Y/ q( O( N. E* e8 B, @
03 年 B 题伽马刀问题也是目前研究的课题,目前算法最佳的是遗传算法。
& S: C6 u2 h$ _. D' P5 T, j3 A, s! j ]3 J
7 P8 `8 D3 l- j' p
( _5 V/ t9 C8 Q8 A# s6 V. H8 l- t: [3 k/ [/ I6 T- q- D
0 T$ Q2 u7 Q4 Q" j
% k) p7 i2 ]& P7 P/ y
( h1 `5 h( J- Q1 h1 Y, o8 B( D2 B3 o/ I, T# I
" g! K1 z9 }( _ 07 网格算法和穷举法. M! l9 S! }# g" U2 I9 t3 ^0 ?
网格算法和穷举法一样,只是网格法是连续问题的穷举。8 l* L; j8 t& I9 I! _
8 x7 ~) s- T# T$ z2 d+ v8 }3 B9 Z& {) i' d" E
比如要求在 N 个变量情况下的最优化问题,那么对这些变量可取的空间进行采点,比如在 [a;b] 区间内取 M+1 个点,那么这样循环就需要进行 (M+1)N 次运算,所以计算量很大。
; a( {# i" N, P% _% i) s% R- ^' T. v1 O; R6 j9 R
$ _$ x! G p2 a' R/ b7 l9 C在数学建模竞赛中:比如 97 年 A 题、99 年 B 题都可以用网格法搜索,这种方法最好在运算速度较快的计算机中进行,还有要用高级语言来做,最好不要用MATLAB 做网格,否则会算很久。* f) u* n; b% J& l+ L) L
: T# |) P, h6 _* E: |; f- h
; S! n0 K _* w7 s# j! M. f
穷举法大家都熟悉,自不用多说了。
) L6 T4 {* e+ @7 U( J8 c' L( g
# ]9 s+ z5 e5 A+ K+ o1 e, c! Q
( ^) w8 n9 u& M1 F) \ 08 一些连续离散化方法
J& c1 S5 Y1 c! i- V+ c大部分物理问题的编程解决,都和这种方法有一定的联系。物理问题是反映我们生活在一个连续的世界中,计算机只能处理离散的量,所以需要对连续量进行离散处理。0 P, P/ {; X. o: t" Y
$ |( |/ \6 L( Y
, Z7 P8 W: j# C这种方法应用很广,而且和上面的很多算法有关。事实上,网格算法、蒙特卡罗算法、模拟退火都用了这个思想。
3 f7 j% d) J" O2 c! l
6 H7 S* F3 q5 m. X
6 Q0 Y9 h; v, R3 L9 @" a 09 数值分析算法; z/ P m& }" Z0 W6 S& g) P# b4 r
数值分析(numericalanalysis),是数学的一个分支,主要研究连续数学(区别于离散数学)问题的算法。* i, k& B# ]5 j! Z/ w
* \6 s; p* b, l4 r: G+ M
& m2 z) }' x/ w1 M* [
如果在比赛中采用高级语言进行编程的话,那一些数值分析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用。: ^, ?; \7 B+ g- _- s
. [4 p! L2 B1 W- H/ O: G0 D
3 p0 }' w% Z0 o' N0 E$ H. C这类算法是针对高级语言而专门设的,如果你用的是 MATLAB、Mathematica,大可不必准备,因为像数值分析中有很多函数一般的数学软件是具备的。, t$ k5 L- S8 A4 B9 P
. @9 P6 m7 ^' z! C
6 [3 M7 U0 W: B' e
10 图象处理算法) S0 i0 [# i3 x9 a. s% `# A. F
在数学建模竞赛中:比如 01 年 A 题中需要你会读 BMP 图象、美国赛 98 年 A 题需要你知道三维插值计算,03 年 B 题要求更高,不但需要编程计算还要进行处理,而数模论文中也有很多图片需要展示,因此图象处理就是关键。做好这类问题,重要的是把 MATLAB 学好,特别是图象处理的部分。
& ^7 E2 ?# `1 Z4 @& X6 o
& W1 z" H; d' S
& {: Z* |1 T% |; e3 L) z3 V M \( }5 a1 I T1 w
6 {% l+ ^6 t3 G7 A- [! h
————————————————, }) d, `7 ~3 D* C9 g
版权声明:本文为CSDN博主「文宇肃然」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。3 S! k" q+ v; ^# |! d+ a: o2 R
原文链接:https://blog.csdn.net/wenyusuran/article/details/114093268& u( V, P$ [9 L' ~: K0 L" W" C6 m
' A; M& }- p% j) i3 I5 h) P
4 p+ e$ O! F& B$ S/ p5 a2 V2 k |
zan
|