在线时间 1630 小时 最后登录 2024-1-29 注册时间 2017-5-16 听众数 82 收听数 1 能力 120 分 体力 559549 点 威望 12 点 阅读权限 255 积分 173238 相册 1 日志 0 记录 0 帖子 5313 主题 5273 精华 18 分享 0 好友 163
TA的每日心情 开心 2021-8-11 17:59
签到天数: 17 天
[LV.4]偶尔看看III
网络挑战赛参赛者
网络挑战赛参赛者
自我介绍 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
群组 : 2018美赛大象算法课程
群组 : 2018美赛护航培训课程
群组 : 2019年 数学中国站长建
群组 : 2019年数据分析师课程
群组 : 2018年大象老师国赛优
还在为数学建模的事发愁?带你一起来看看数模竞赛中必备的经典算法 5 n/ G5 R9 @: g9 H& t8 q
4 H3 N! Y% D2 y5 ?. n/ W
前言 1 i+ X* l5 s$ s- Q, r
数学建模比赛是本科生和研究生阶段最重要的比赛之一,包括全国大学生数学建模竞赛(俗称“国赛”)和美国大学生数学建模竞赛(俗称“美赛”)。在这些比赛中取得好成绩,不仅有助于保研、有助于找工作,更重要的是形成科学的思维模式。以下是博主精心整理的两个matlab专栏,包含入门到精通及实战内容,需要的小伙伴可根据自己需求自行订阅。 3 k/ A |4 d. Y' N1 E
, Z/ V% U* O, Q, l
# Q% Q) c) Q9 c MATLAB-30天带你从入门到精通
3 g- G! H7 b( N1 w* e, k j( L" T . v7 ]; Z8 l, d4 x! H
8 q' Y6 {+ o9 R9 }$ P
https://blog.csdn.net/wenyusuran/category_10614422.html
! o6 f! j! x0 w0 [: Y6 B$ z
8 Q/ k+ G% _* u$ G u% u, C, W" D8 {2 p
MATLAB深入理解高级教程(附源码)
8 w; b Q+ t0 C" T- a, K , }' i5 x& X, s( Z, T$ S3 I+ x
& w0 F% N- C: ^) ?: x5 L. e& w9 _ https://blog.csdn.net/wenyusuran/category_2239265.html
% s9 H4 E& T/ [& r & k. K* y0 F% K5 l9 l
, Q- u- A# M8 F+ Y2 v 在博主的资源中也有各种算法的应用实例源代码,需要的小伙伴自取哟。
" C" R' u5 _& B7 m0 p9 v4 L " Q* s* j e) p) U& ~8 A! j
7 m; k$ X4 e& i2 [: l- E( D- s
0 U9 g& P5 V2 C f( j1 B # \2 _2 G9 ~4 q
9 A2 d4 y& t g2 n* W9 ^! T
8 ]" u X# \" m* p3 M0 }% T7 U
/ \7 a3 M+ A2 b
# I( S' X3 ? z0 a( s. i% H + o$ R' S( t8 a* k7 E0 {% R
- G+ l" b" x) \3 Y1 z2 ]( h- L
# W8 ?; M5 X) Q* A) y' t" Z * K5 l; { r# z! {
01 蒙特卡罗算法 0 |' s" Z4 a# B0 P8 z6 X
1946 年,美国拉斯阿莫斯国家实验室的三位科学家 JohnvonNeumann, Stan Ulam和 Nick Metropolis 共同发明了蒙特卡罗方法。 4 P/ E: P1 w8 L# O0 ]5 V; x
) d% X+ Y8 m. u- @7 Z 9 F% a4 J. j, V& O' w5 e
蒙特卡罗方法(Monte Carlo method),又称随机抽样或统计模拟方法,是一种以概率统计理论为指导的一类非常重要的数值计算方法。此方法使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。
2 ~& Q h% e& ]( _( ]3 I
( Q1 N7 O# S5 Z# K& {* V8 | & J! ]$ D4 ?8 K( {9 v
由于传统的经验方法由于不能逼近真实的物理过程,很难得到满意的结果,而蒙特卡罗方法由于能够真实地模拟实际物理过程,故解决问题与实际非常符合,可以得到很圆满的结果。 ! g$ u6 l$ B5 x9 a
( q0 @" i9 x$ K7 D |! G1 t9 R3 Y
) G/ {- X& }: d" S8 H# V: k( k
蒙特卡罗方法的基本原理及思想如下:
* {4 S* a! v5 T0 g5 f 3 ?, ^; X. n. O: m- a
/ x1 N; p4 Z, I G# a8 j 当所求解问题是某种随机事件出现的概率,或者是某个随机变量的期望值时,通过某种“实验”的方法,以这种事件出现的频率估计这一随机事件的概率,或者得到这个随机变量的某些数字特征,并将其作为问题的解。
* y8 }! ^; H- R' M7 }" | L, \ , V1 v! A8 R* T
5 h6 l: F& K6 x: G0 R" _. T
举个栗子,直观了解蒙特卡洛方法: ' S; M0 c) ^0 S! u1 X2 Y a
; I6 t% f4 U O1 g+ T
0 @! Q* C- }. `$ k 假设我们要计算一个不规则图形的面积,那么图形的不规则程度和分析性计算(比如:积分)的复杂程度是成正比的。蒙特卡洛方法是怎么计算的呢?假想你有一袋豆子,把豆子均匀地朝这个图形上撒,然后数这个图形之中有多少颗豆子,这个豆子的数目就是图形的面积。当你的豆子越小,撒的越多的时候,结果就越精确。在这里我们要假定豆子都在一个平面上,相互之间没有重叠。 4 D8 e h9 A1 n- K" z2 m6 q* Q
J, O/ y4 i' a
( N3 g% ]) d7 M" M. C4 ~
! C+ d$ w& A; p$ J2 x; `4 F, [5 O
9 Q, g& b8 {$ n$ J. G
% J) p" x3 n$ N
& o) L3 B) ?; S6 r6 @/ x( u 蒙特卡罗方法通过抓住事物运动的几何数量和几何特征,利用数学方法来加以模拟,即进行一种数字模拟实验。它是以一个概率模型为基础,按照这个模型所描绘的过程,通过模拟实验的结果,作为问题的近似解。 $ a9 h1 W# Y2 ^% U* x+ ^
# v5 G" N8 `4 s
; j) n/ \! P4 T; ?: \
蒙特卡罗方法与一般计算方法有很大区别,一般计算方法对于解决多维或因素复杂的问题非常困难,而蒙特卡罗方法对于解决这方面的问题却比较简单。其特点如下:
$ A& ]( [) [0 u1 O5 j1 w
; v& V3 }8 i" D) p4 A
2 G8 R! M* U4 S+ E, w8 C6 } a、直接追踪粒子,物理思路清晰,易于理解; 9 z. ], F' @( z n) _/ {0 D
* x- b2 F. C" _
# m7 o4 {: a4 s* x
b、采用随机抽样的方法,较真切的模拟粒子输运的过程,反映了统计涨落的规律;
* F( Y- l F, f# _9 F
; P8 E* G5 B2 ~! y, D 9 |: ^) ]! _/ A; b' Z; j
c、不受系统多维、多因素等复杂性的限制,是解决复杂系统粒子输运问题的好方法 , x0 s9 J9 K7 D0 p8 q% K% t
2 [% i' E; c2 k/ R! g
3 g( f1 {! c- Q4 P) h 等等 0 Q$ A0 s. C5 H* ^ m1 C
$ e! m' X$ l, s6 J0 `
\3 u* Z0 G6 _$ ^5 Q; |3 X 02 数据拟合、参数估计、插值等数据处理算法 4 O9 B$ u5 @+ Y+ ~$ p
我们通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用 Matlab 作为工具。
" j5 k7 I9 f! b $ C. n6 J7 O' l' V+ ~: J
1 b) l- F/ s& i7 \/ a# p. Q1 U
数据拟合在数学建模比赛中中有应用,与图形处理有关的问题很多与拟合有关系,一个例子就是 98 年数学建模美国赛 A 题,生物组织切片的三维插值处理,94 年 A 题逢山开路,山体海拔高度的插值计算,还有吵的沸沸扬扬可能会考的“非典”问题也要用到数据拟合算法,观察数据的走向进行处理。
% F, K+ W6 p4 K, U
. d1 L7 k! e1 K2 P / g, n" r8 i' j3 `! u1 F
" _ W/ B/ C6 f2 o' U
) C3 F: m% E; m; y3 q , _% Y. P' i6 G% M2 x
+ u5 |6 V1 s+ o w1 z) j 此类问题在 MATLAB 中有很多现成的函数可以调用,熟悉 MATLAB,这些方法都能游刃有余的用好。
+ R- P- m6 I7 M6 `4 N5 e . Q! ?# r; E0 n/ ^" ^, ~
' J; y- j) D1 `/ g9 H, k% J$ ^
03 线性规划、整数规划、多元规划、二次规划等规划类问题
9 b h7 P0 P& m. @3 r+ _ 数学建模竞赛中很多问题都和数学规划有关,可以说不少的模型都可以归结为一组不等式作为约束条件、几个函数表达式作为目标函数的问题。
3 K3 R- g% H% n$ K4 @# R% a* P8 N 3 G% Y% m x% H6 z7 L; x
% Y# O; B I" `7 M+ B 遇到这类问题,求解就是关键了,比如 98 年 B 题,用很多不等式完全可以把问题刻画清楚,因此列举出规划后用 Lindo、Lingo 等软件来进行解决比较方便,所以还需要熟悉这两个软件。 5 ]0 \! `" r( z! q6 G" `" _
& X! Z- ~) F5 m; e* |6 g) m' ^
. ^9 {5 [! \* b- G 04 图论算法 4 [1 p: c$ p& N" I" s. O2 _, w& k0 T
这类问题算法有很多,包括:Dijkstra、Floyd、Prim、Bellman-Ford,最大流,二分匹配等问题。 ; E) i+ b7 W- f P
6 ?+ I& t+ I) [8 Q. M- i
3 A, B6 ?" E: t0 N. a5 ]. C! ?
关于此类图论算法,可参考 IntroductiontoAlgorithms--算法导论,关于图算法的第22章-第26章。
# L/ i, {! K, a6 ~1 d1 H
0 X0 U a$ o% {- ~7 b - U6 y0 @: l4 M! D
+ U1 n" i: P* S. g
+ Q) h% J: Q. I6 [: M# V- |
7 f3 K/ n8 H+ A* l! P3 o6 A8 c1 K& v 4 G5 D! R3 W! d$ {( q3 A& |
05 动态规划、回溯搜索、分治算法、分支定界等计算机算法 9 S0 c" e) G% K, g* k5 L! U; v
在数学建模竞赛中,如:92 年 B 题用分枝定界法,97年 B 题是典型的动态规划问题,此外 98 年 B 题体现了分治算法。
1 q- T5 ?. M m7 s6 o" J' ?1 p
! o, x/ v2 t4 R# g. V f : |0 K" s1 G0 w3 Y7 E# f. x
4 B' g3 m2 b1 d1 U 5 k6 l2 ?" V' T
0 S9 h7 Q, A0 Y+ j1 ?- _
% g D3 k7 `9 u% X; n' x) ]( Z
这方面问题和 ACM 程序设计竞赛中的问题类似,推荐看一下算法导论,与《计算机算法设计与分析》(电子工业出版社)等与计算机算法有关的书。 $ d3 i) H; r8 Y% ^, w
r* \7 O( k* N# M8 w. e
! B0 m2 e! R1 j* k3 z1 K 06 最优化理论的三大经典算法:模拟退火法、神经网络、遗传算法
1 ]- z$ q7 r! {/ |" N0 L; m6 C: r% ` 这十几年来最优化理论有了飞速发展,模拟退火法、神经网络、遗传算法这三类算法发展很快。
; g& C+ w' V, f+ w$ f& F) `
. N e D3 y+ M- p$ C: l " I" h- m6 v+ M: {; Q0 @4 G% [- P
在数学建模竞赛中:比如 97 年 A 题的模拟退火算法,00 年 B 题的神经网络分类算法,01 年 B 题这种难题也可以使用神经网络。 6 O# ^! ^' f7 M7 f+ H4 W
! N. r& \/ H( H
5 N& K" c2 d4 B5 h 还有美国竞赛 89 年 A 题也和 BP 算法有关系,当时是 86 年刚提出 BP 算法,89 年就考了,说明赛题可能是当今前沿科技的抽象体现。 ' O& L7 g, \& r! m2 T% N' m" S
$ {% d% I0 }% P9 ?% r! B7 d9 w
% g v! ?" x' } j 03 年 B 题伽马刀问题也是目前研究的课题,目前算法最佳的是遗传算法。 ' A( P4 b& j* K
$ ]' W% _# {2 B& l5 Q+ n
`+ j% s9 K+ T( E 1 ]: |, O, x( S6 ^" u4 }
, A1 W+ A0 g! I% s 8 e& T- C! g6 r
0 Q W4 U/ e$ R+ t; u- B7 d
; w8 y- k( }/ k9 c3 M
! @* i0 m1 W/ M- O$ Z6 i& I( R5 Q 1 `, q3 u9 r. t. |6 A
07 网格算法和穷举法
9 Z# N5 L) y4 ]! c$ N; g! [8 Y, e% X 网格算法和穷举法一样,只是网格法是连续问题的穷举。
1 O3 \; t1 J( e! d' y; h2 P! X $ l( \5 |8 `/ v% _, z' I9 z" V
3 ]6 Y- t0 m* ]0 h& K0 C
比如要求在 N 个变量情况下的最优化问题,那么对这些变量可取的空间进行采点,比如在 [a;b] 区间内取 M+1 个点,那么这样循环就需要进行 (M+1)N 次运算,所以计算量很大。 6 K3 m- x8 ?# I/ E% k1 \2 ~) a7 G K
( G! w/ @! d( G3 ]
* C4 M# k7 `5 E2 @1 W- ` 在数学建模竞赛中:比如 97 年 A 题、99 年 B 题都可以用网格法搜索,这种方法最好在运算速度较快的计算机中进行,还有要用高级语言来做,最好不要用MATLAB 做网格,否则会算很久。 : N) b5 {; Z" a+ F& Y% n
+ ~5 l6 P* y8 q% @2 y& v8 ~4 X' A . m* B4 h& r4 d" P+ A6 G+ L6 Z
穷举法大家都熟悉,自不用多说了。
% G/ ]9 K% T* J/ U' n ) j7 X, ?- H% s, y1 f2 U9 m3 k
# ?' A- B/ r7 g. `- X3 ?) L 08 一些连续离散化方法
/ M, g/ Q$ c5 u" w" W c 大部分物理问题的编程解决,都和这种方法有一定的联系。物理问题是反映我们生活在一个连续的世界中,计算机只能处理离散的量,所以需要对连续量进行离散处理。
7 m7 q9 @: v' I, {" i; e* S" ` 6 Z5 `5 |. m/ `( Z1 O: d) P
$ u7 x7 a2 `$ C2 ]
这种方法应用很广,而且和上面的很多算法有关。事实上,网格算法、蒙特卡罗算法、模拟退火都用了这个思想。
0 X( Z0 T- a) c 8 _8 F' _' _9 V* o: u' y1 y
& P6 |; R Q8 [( U9 |
09 数值分析算法
9 M7 y3 }, n+ R! b! @4 C 数值分析(numericalanalysis),是数学的一个分支,主要研究连续数学(区别于离散数学)问题的算法。 ; m4 |3 ~- A/ n& k/ a
9 M- Y+ t: J: G) I+ ?/ j. y, ^
. }! Z1 H2 m/ N% t! ?
如果在比赛中采用高级语言进行编程的话,那一些数值分析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用。
$ A# L) k- c' o$ G* I4 |4 ^2 b
4 c6 T) B! U, x9 @
/ i g' v) {( f( W) c 这类算法是针对高级语言而专门设的,如果你用的是 MATLAB、Mathematica,大可不必准备,因为像数值分析中有很多函数一般的数学软件是具备的。 X: D Z& S" ^4 |- C8 X& ~ u' d
1 V5 [, K: v( w* n4 P4 t
+ I& c' i. s8 \# D5 B, j/ j% x
10 图象处理算法 ! L; J# j( O1 I) H' ^2 ^
在数学建模竞赛中:比如 01 年 A 题中需要你会读 BMP 图象、美国赛 98 年 A 题需要你知道三维插值计算,03 年 B 题要求更高,不但需要编程计算还要进行处理,而数模论文中也有很多图片需要展示,因此图象处理就是关键。做好这类问题,重要的是把 MATLAB 学好,特别是图象处理的部分。
" n0 [" g, S+ e! Y 4 F) A* P7 g( C5 ^
7 @4 J/ s+ |1 s+ a- p: g% t
* t; r0 H: D; x/ Y" U }- `" j
6 b$ E7 x; r! c2 h ———————————————— / E" ]: L& r# A5 O$ N
版权声明:本文为CSDN博主「文宇肃然」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
" h) |4 ^8 N; z 原文链接:https://blog.csdn.net/wenyusuran/article/details/114093268
, p9 [3 D2 g( e) I* Y
, K! ^3 z3 m( p+ w/ F4 g
/ b+ L; | T- V5 q$ Z, B4 D0 X
zan