在线时间 1630 小时 最后登录 2024-1-29 注册时间 2017-5-16 听众数 82 收听数 1 能力 120 分 体力 568426 点 威望 12 点 阅读权限 255 积分 175751 相册 1 日志 0 记录 0 帖子 5313 主题 5273 精华 3 分享 0 好友 163
TA的每日心情 开心 2021-8-11 17:59
签到天数: 17 天
[LV.4]偶尔看看III
网络挑战赛参赛者
网络挑战赛参赛者
自我介绍 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
群组 : 2018美赛大象算法课程
群组 : 2018美赛护航培训课程
群组 : 2019年 数学中国站长建
群组 : 2019年数据分析师课程
群组 : 2018年大象老师国赛优
还在为数学建模的事发愁?带你一起来看看数模竞赛中必备的经典算法
" P* x: [9 Z; E. A
! ?6 D$ F5 r( H. ?& d6 I% L1 Z 前言 0 a& n) [, w& s8 K- \2 f4 e
数学建模比赛是本科生和研究生阶段最重要的比赛之一,包括全国大学生数学建模竞赛(俗称“国赛”)和美国大学生数学建模竞赛(俗称“美赛”)。在这些比赛中取得好成绩,不仅有助于保研、有助于找工作,更重要的是形成科学的思维模式。以下是博主精心整理的两个matlab专栏,包含入门到精通及实战内容,需要的小伙伴可根据自己需求自行订阅。
% P& {& y: X& D( M$ a3 A* p
2 m5 U! b0 S+ R1 p, [" A) R % B) `$ F' U& W Z: }! p" K+ A
MATLAB-30天带你从入门到精通
5 N2 a w7 N6 |( b# I# V! I# w
; C* Q, b9 }7 }% R- s% p4 B F7 O' @+ ~4 i# T9 g$ H' o
https://blog.csdn.net/wenyusuran/category_10614422.html ) s4 r# B: O+ ?
& z! q6 P* M9 a ! Q+ z, E# K/ ^, E, ~3 J
MATLAB深入理解高级教程(附源码) ) g" T# j( o5 G" \5 c
# a$ O, P( w' ~% k
6 |5 g: b$ l+ t+ k w https://blog.csdn.net/wenyusuran/category_2239265.html 5 H" e" A4 C: `* q9 J
( E- g, w% @, V; |9 y- L, q' t 7 A) N8 C4 a# b
在博主的资源中也有各种算法的应用实例源代码,需要的小伙伴自取哟。 ) b7 c0 |- h- A, w# u$ s
" Z$ X; E& q& {; q, q" J2 L K
+ K9 Y* k) S0 x' B! t
4 S$ @* E( b; m' O8 }
3 H, p1 K7 d( a# |! y! V7 e 4 T$ x; m0 N. Z$ Y
/ C) h! A4 |+ S/ ^' M7 i# H
9 S, @4 d! _6 k- D) V, V' i+ @: I
+ U1 c: w9 @# U& u& H ; k7 U8 k0 i- |) M8 A( p
7 n# k+ Q3 w% J' Y
" r; {. f7 y0 {( }$ c2 ^: B1 D
8 W) g, d# t$ Q 01 蒙特卡罗算法 " D* n3 w2 C2 c
1946 年,美国拉斯阿莫斯国家实验室的三位科学家 JohnvonNeumann, Stan Ulam和 Nick Metropolis 共同发明了蒙特卡罗方法。
. m$ j: S$ b1 D" T ) \1 ~+ L* |7 K0 R, v" ~) N P
! o- }, S# \" h
蒙特卡罗方法(Monte Carlo method),又称随机抽样或统计模拟方法,是一种以概率统计理论为指导的一类非常重要的数值计算方法。此方法使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。
: |8 _7 Q2 m: W2 e, @+ N
# C U! M' }: s0 t" C& w# q% s
& D" |2 k. O2 l+ A; f1 c* { 由于传统的经验方法由于不能逼近真实的物理过程,很难得到满意的结果,而蒙特卡罗方法由于能够真实地模拟实际物理过程,故解决问题与实际非常符合,可以得到很圆满的结果。
0 X% x- u; c- a) M$ ^. K7 q- i
5 d8 b( {' @+ @! G- g
; q6 @' h2 T' t 蒙特卡罗方法的基本原理及思想如下:
: e' P7 N* l/ Z. i5 m
" w: [! |1 I4 c7 \2 p
1 L, M7 R5 E9 w4 A% ` 当所求解问题是某种随机事件出现的概率,或者是某个随机变量的期望值时,通过某种“实验”的方法,以这种事件出现的频率估计这一随机事件的概率,或者得到这个随机变量的某些数字特征,并将其作为问题的解。
, p( _ P2 \9 a* M7 i 1 G- z- F% c" Z# C# u( O
- n [& X4 X* ~6 o& x. J
举个栗子,直观了解蒙特卡洛方法: * u3 A' X @* A @$ _
, H- l& b0 i/ k8 E2 A& T
1 u# V, q% Y5 A/ V" u7 o$ z 假设我们要计算一个不规则图形的面积,那么图形的不规则程度和分析性计算(比如:积分)的复杂程度是成正比的。蒙特卡洛方法是怎么计算的呢?假想你有一袋豆子,把豆子均匀地朝这个图形上撒,然后数这个图形之中有多少颗豆子,这个豆子的数目就是图形的面积。当你的豆子越小,撒的越多的时候,结果就越精确。在这里我们要假定豆子都在一个平面上,相互之间没有重叠。 + j x6 d: S2 c) E5 u0 g
% `! E9 D2 ^; B
: M$ |% w5 N& P: N& N+ r
: o) Q7 z s% q 1 k# Y }: D9 r8 Q6 J0 C
* S9 ]& Y7 R. V; r4 K , l9 C$ t3 a0 s6 A5 s9 |* b0 @; |
蒙特卡罗方法通过抓住事物运动的几何数量和几何特征,利用数学方法来加以模拟,即进行一种数字模拟实验。它是以一个概率模型为基础,按照这个模型所描绘的过程,通过模拟实验的结果,作为问题的近似解。 2 q8 U3 t- E0 F5 d8 r$ T9 N
. M. i" S/ m5 M: u/ J
+ h8 \( h2 _) P( G: g" B" h 蒙特卡罗方法与一般计算方法有很大区别,一般计算方法对于解决多维或因素复杂的问题非常困难,而蒙特卡罗方法对于解决这方面的问题却比较简单。其特点如下: 0 L3 }2 x! _# y2 N- Q& [* }4 p. ]
: v, C" s! z7 T, [
4 M5 k! S- \, v2 m& [* P; ] Q/ U a、直接追踪粒子,物理思路清晰,易于理解;
6 l7 P" x5 @. Z$ M3 X
4 ~4 x4 t4 g) m! Y& U9 [ * W5 b1 R; g3 ~# ?. _6 D2 G4 o( H& `
b、采用随机抽样的方法,较真切的模拟粒子输运的过程,反映了统计涨落的规律;
# n5 h, `6 i7 k+ A- m : c/ S/ c! \5 h6 K s# s
8 m1 A6 K+ G( r; ^; b& t
c、不受系统多维、多因素等复杂性的限制,是解决复杂系统粒子输运问题的好方法 4 ^# W( N) G! K2 ]2 {' p( h$ C: {
2 B* }8 F7 \3 U* s6 W
* q2 B4 _% H' }5 T- f 等等
+ D& l0 j9 A5 ?$ |8 R
* V* j) Q0 i5 @" a: }) h! f3 J
( w9 Y2 J" [$ `# W% H8 t& S8 f 02 数据拟合、参数估计、插值等数据处理算法 ) O& k8 z% D" E2 u! x" I
我们通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用 Matlab 作为工具。
/ H1 d: m% \4 |! m$ x& C' }
! O$ k3 z. z7 w + _8 ~4 X0 T3 I" r, b( d4 K
数据拟合在数学建模比赛中中有应用,与图形处理有关的问题很多与拟合有关系,一个例子就是 98 年数学建模美国赛 A 题,生物组织切片的三维插值处理,94 年 A 题逢山开路,山体海拔高度的插值计算,还有吵的沸沸扬扬可能会考的“非典”问题也要用到数据拟合算法,观察数据的走向进行处理。
) T' y* @" k5 {0 X
/ G+ I/ I% ~1 B$ n3 P
/ a6 J/ Y- x) H9 Z3 |# U # a9 K# u) Z0 w2 N0 {
7 M; K% F! K2 h
, r, [2 t6 S, `4 G1 q a
0 B" U ?+ ?1 F+ b' V 此类问题在 MATLAB 中有很多现成的函数可以调用,熟悉 MATLAB,这些方法都能游刃有余的用好。
2 C3 z( Z9 V$ q9 `6 z+ p; Z
4 m) x. D1 z8 X
4 T4 W# Y% ^" C) A1 t# q# n 03 线性规划、整数规划、多元规划、二次规划等规划类问题 6 A) B! {. ~2 |' {8 X
数学建模竞赛中很多问题都和数学规划有关,可以说不少的模型都可以归结为一组不等式作为约束条件、几个函数表达式作为目标函数的问题。 * V5 Q. M* a4 q8 g. k
4 ?* M# K" R' G/ K" w
- Z4 t1 ]: ?' l0 K 遇到这类问题,求解就是关键了,比如 98 年 B 题,用很多不等式完全可以把问题刻画清楚,因此列举出规划后用 Lindo、Lingo 等软件来进行解决比较方便,所以还需要熟悉这两个软件。 8 C1 q k5 H' f ~
8 ^( q. d W0 T3 `5 R7 P
9 ^& B @$ k6 z# E 04 图论算法 & x, ^0 ^* _0 `! K+ [
这类问题算法有很多,包括:Dijkstra、Floyd、Prim、Bellman-Ford,最大流,二分匹配等问题。
: {' @- L: i% U& Q
. P: s" _$ A, W) d/ Z9 A
8 X: y( [; N7 M, \3 M) V 关于此类图论算法,可参考 IntroductiontoAlgorithms--算法导论,关于图算法的第22章-第26章。 9 H c, a, h H$ i V- d
, N+ E/ g7 _% C+ B+ J1 O9 r ) A3 [- k8 h7 r; F% K! e
$ d b6 I6 q; \8 z( Y " y8 N! V5 G6 W o+ `* \0 w9 a* H' w
! ^5 ^% ?) i: {3 c
3 X0 O! `& U3 {' G5 Z
05 动态规划、回溯搜索、分治算法、分支定界等计算机算法
) x: r1 s2 I2 i4 v2 v9 e$ U$ G9 R 在数学建模竞赛中,如:92 年 B 题用分枝定界法,97年 B 题是典型的动态规划问题,此外 98 年 B 题体现了分治算法。 8 j' C/ V2 X8 Z* D
8 P: S3 J4 g5 v s, u8 y
- X! Y# u( C6 r; m8 Y; ?
( k8 k7 c, @ C4 V! G
; Y! V$ z7 ]9 a/ P& D' ~ 5 J' N+ _8 a4 v* S! w
' e6 i" ? f+ k) n% }, z5 Y, l3 n 这方面问题和 ACM 程序设计竞赛中的问题类似,推荐看一下算法导论,与《计算机算法设计与分析》(电子工业出版社)等与计算机算法有关的书。 ! l+ i# d4 s" v* Q8 S/ }0 x
! z% U( T; d1 X3 s
8 i7 F" {5 I3 N, X( P+ M
06 最优化理论的三大经典算法:模拟退火法、神经网络、遗传算法 ( S2 u" V+ I f! |2 J
这十几年来最优化理论有了飞速发展,模拟退火法、神经网络、遗传算法这三类算法发展很快。
3 e1 Y3 P* f! w2 B 8 `2 O, a7 c i6 J7 |: I; b; x
4 E, P" ]8 j; Q8 @6 o0 B 在数学建模竞赛中:比如 97 年 A 题的模拟退火算法,00 年 B 题的神经网络分类算法,01 年 B 题这种难题也可以使用神经网络。 0 H. T8 @* k" J6 K- C% f
' s, M9 _' _; W) D+ V1 J0 t3 z # p o, n3 I; m. p9 {9 ~+ n
还有美国竞赛 89 年 A 题也和 BP 算法有关系,当时是 86 年刚提出 BP 算法,89 年就考了,说明赛题可能是当今前沿科技的抽象体现。
1 u' T/ L, D$ i: b, l% Q * \9 i. R7 o# \- i1 |
, z. }3 L( A! Z1 S2 v
03 年 B 题伽马刀问题也是目前研究的课题,目前算法最佳的是遗传算法。 % G; o9 _+ Z/ t# z( } J3 R
' f U% z, {: ~6 e* C$ v
( L; G6 G! r2 @+ E0 d# K* Q9 q
) ^2 q3 d& @) z8 v
* N* P+ a; u& y9 P- [& n# ], t/ q2 r' Y/ | + F6 _0 E1 p' [6 R8 E( g
4 s, p) c5 B+ t/ Z1 D9 }
, y3 d% U2 i% P& a & p1 e; n4 x0 I- F o
1 J# B4 |& V8 k0 H% G
07 网格算法和穷举法
9 I5 G, B% b _# ~7 w7 n6 s `0 P 网格算法和穷举法一样,只是网格法是连续问题的穷举。 ( _' |; F% J9 \+ e( G
: L! d2 L" i# _6 P$ a5 f 0 Q' c; [$ j. L$ ~4 p7 [
比如要求在 N 个变量情况下的最优化问题,那么对这些变量可取的空间进行采点,比如在 [a;b] 区间内取 M+1 个点,那么这样循环就需要进行 (M+1)N 次运算,所以计算量很大。 & |# N. k% s" t
- [* [ B8 W& q% m$ S
/ W: S4 E4 _% f, o/ O2 ]7 I 在数学建模竞赛中:比如 97 年 A 题、99 年 B 题都可以用网格法搜索,这种方法最好在运算速度较快的计算机中进行,还有要用高级语言来做,最好不要用MATLAB 做网格,否则会算很久。 4 u0 P% B. N9 K+ h/ q
5 c& W+ o; A' V& u+ c0 m( A
+ I" s# U! _3 f% v2 e. l 穷举法大家都熟悉,自不用多说了。 / S: I' T0 e( u8 H: @
$ q! R4 s: f: V9 f C 1 g/ H2 _9 T! ?# D! `
08 一些连续离散化方法 : r( p' U/ b% \- a2 A
大部分物理问题的编程解决,都和这种方法有一定的联系。物理问题是反映我们生活在一个连续的世界中,计算机只能处理离散的量,所以需要对连续量进行离散处理。 2 L( f% O* ~' q- l0 s
; g2 V# u1 N+ r0 e
- ?( T- _' v9 a 这种方法应用很广,而且和上面的很多算法有关。事实上,网格算法、蒙特卡罗算法、模拟退火都用了这个思想。
2 b$ F3 F: |4 g $ I5 S {4 Q& w( T
( J( s, l d: f2 I4 R! U
09 数值分析算法 ]8 O' E3 j( X" k% G
数值分析(numericalanalysis),是数学的一个分支,主要研究连续数学(区别于离散数学)问题的算法。
) \$ S# v1 c$ f: w* r* z# I 4 d# }" w8 ]# ~& P/ s; a
- o, A1 l" L6 t4 }4 [ 如果在比赛中采用高级语言进行编程的话,那一些数值分析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用。 $ }# c5 s1 a4 h+ D+ I0 g9 \
4 B: U) E7 z6 r/ `4 { ! r0 L N( m! c2 M# `, u
这类算法是针对高级语言而专门设的,如果你用的是 MATLAB、Mathematica,大可不必准备,因为像数值分析中有很多函数一般的数学软件是具备的。
$ Z2 O/ S! Y$ O8 x, ?
& l3 t+ g6 i& T! s ) i9 c, i7 z* Q6 b A" F( Z2 [% A
10 图象处理算法
! A1 G/ B5 l7 i; m+ {; _ 在数学建模竞赛中:比如 01 年 A 题中需要你会读 BMP 图象、美国赛 98 年 A 题需要你知道三维插值计算,03 年 B 题要求更高,不但需要编程计算还要进行处理,而数模论文中也有很多图片需要展示,因此图象处理就是关键。做好这类问题,重要的是把 MATLAB 学好,特别是图象处理的部分。
+ ?: O6 U' i1 P9 Y/ p2 W( t
' F6 A* O4 j1 @" i1 Z. D4 ^( A0 @
- R, ] z$ \$ T8 p$ ]9 Q2 I0 H# O * Z8 A1 T% s5 F7 |
0 A2 u p! k5 | W" W
————————————————
6 t- r9 h3 d& A9 X* e 版权声明:本文为CSDN博主「文宇肃然」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 7 U& E1 M. D& U8 [
原文链接:https://blog.csdn.net/wenyusuran/article/details/114093268 + o4 E' B8 V+ h- |8 [+ a0 S
6 l6 t: a5 p! {8 k+ ~
# ?4 w* K8 L. K) Q
zan