" q( |9 S8 x, N! K. I2 {询问实验室的小伙伴才知,原来是被可爱的建模学子们攻占了: i2 ]2 h2 t. W( r8 E. c: g
0 C& a# L" c. O8 i2 S; E: r经过简单的了解,发现今年建模的A题的核心就是求解一个热传导方程,因此之前所写文章的程序基本可以算是神助攻了,完全可以帮助大家构建解题程序的基本框架。 : g ~" K4 R$ w& a 1 w4 v: ?4 s! z* y: z1 p. ?但是!- t9 u2 {+ E% U: [6 q1 z. F( M w
3 u# p' r2 i W. l$ y' X- R
数学建模比赛考验的就是大家的学习能力以及解决问题的能力,我只提供简要思路,不要做伸手党直接找我要代码,不要问我怎么写,请对得起你将来获得的一等奖。! b: K. r" p0 u8 J
+ ?& {3 s' `1 I- W
再有就是,你要先确保你能看懂我已经提供的源代码,否则下面我提供的思路你可能看了也白看。 3 k D' [9 W! A3 z f9 i! R7 d/ L: X: \6 s$ J5 [
这里统一对大家的问题做一个回答: 2 B# E6 n" I# h% N, S" b7 x8 a, F0 K9 p
本题适用差分解法吗?% U+ |; r$ z" L
+ e' L: P) g* A+ u
求解偏微分方程的方法中,差分方法 和 有限元 是两类最主流的方法。 ( w1 x/ v( v! a4 l" k7 E" t1 V 6 Y, p" D8 x7 Q: T差分方法的优点是原理简单,但是只能求解规则区域的数值解。; f4 ^; @) R" G+ O! W L
/ P' z6 w& Z9 p4 @; z有限元背后的理论相对难很多,但能够求解不规则区域问题。 1 }. [- Q1 U4 V( }7 b9 j4 q% f& T# N1 x) V
本题适用哪种方法解答取决于你的模型假设. A+ d7 P0 F. }; E+ A
6 _" G M0 p" U9 S9 q1 x* w2 X
本题中涉及多种介质的热传导的求解,我的建议是,如果不想给自己找麻烦的话,将每种介质层假设成规则的矩形。 ; C7 V3 r: Q, _8 X0 g& y( q: X( j8 q8 b7 [
既然带求解区域是矩形了,那么本题使用差分方法来求解更加合适,关于差分方法,你可以随便找一本介绍偏微分方程数值解的书,都有介绍。0 Z. F- g! f" u8 H: m2 S' T K& g
3 N; P* H+ t1 }" J) h
当然,你如果将模型假设定义为更符合实际的不规则问题,能做出来当然是亮点,但切记不要搬起石头砸自己的脚,毕竟建模时间紧任务重。 2 o: @/ ^6 _6 X/ P8 ^ . b2 l7 p/ J1 p8 Z/ W是否适用于多层壁热传导? % t0 s& |; |4 {( N4 I5 G) V$ V# B0 p( H. c* G! {( \- [5 Q
评论区有人问,是否适用于多层壁热传导吗?% K7 D4 I7 |2 u
8 B- b( F7 \1 N, y
其实就是问这个程序能否求解A题嘛,O(∩_∩)O哈哈~/ ~ Y9 Z1 d3 z; W
! e8 ]3 E4 K' l, e, S) G3 m
答案当然是能,但显然不能直接拿来用,给几点提示。. Z& |* E" F4 L
; i0 d( J+ S! d7 p- K T
思路1:5 {2 Z4 G, G- Z4 ~5 U4 E: Z3 y
7 F7 h+ U* A) G5 w; X0 x# S5 @( z你单拿出其中一层来求解,和我提供的算例已经没有本质区别了。 / e0 H2 ?2 U' G. b5 C. e- l# r" I" I! |: K3 D1 L$ w
因此,你可以一层一层的求解。先求第一层的数值解,第一层的结果一有,第二层的边界条件也就有了,于是第二层也可以求了。 ) P: ^* e; [/ m& `2 A* a" T9 h' M 9 z# S% t( X" P+ t2 b f d! X这样做的潜在问题是,第一层中求解的误差,必定会传递到第二层去,数学上可能不太完美,但是好理解,代码改动也少。" n; s) z- ?' x1 W5 L
- X0 I& {# ~5 I思路2:9 j; D" i' }% }8 H) {
3 x6 _* c4 s) |4 e
我认为数学上更好的方式肯定是整体一起求解,但这就有点困难了。5 {; g% ]# w( V. W; ?0 E' c$ A
& | b* q" B( }' `这样做时,你需要对每一层边界在系数矩阵的相应位置处,都按照边界处的对应关系进行相应处理。 ) V$ l1 m2 q8 ?8 g* T. R2 F2 E% n' D( ]+ o
这需要你对差分方法有着很好的理解,如果我提供的代码你无法完全看懂,建议就不要考虑了。 : {& F l% y& \- C1 o* u1 x* w . ?7 [( M4 j& C2 P2 \0 ~& v) }. B关于边界条件; c8 w& ^& z8 {+ X1 {
9 I$ }5 ]( a; S3 T
构造的差分格式是保证解满足对应的方程,但其实满足给定方程的解有无穷多种。 6 }4 R) Q- v" s( E5 _. Y D) o5 ?6 |3 Z7 j% U- y
而边界条件的作用其实就是找出你想要的那个解。 ( g) F! g) P' w1 {: F # L: |/ u y$ E" s之前文章中给出的算例包含的边界条件是:. r e1 v5 y6 p) x' i
# M8 |* O: X: \( m7 O9 Cu(x,0)9 n3 ^5 i7 O) ?$ D
6 q j q3 X5 I
u(0,t) 和 u(1,t), q }8 t+ n2 Y' N* K( _9 B g" s
* u9 E0 x9 j# g. R在A题中右侧初始温度好像是没有的,也就是u(1,t)没有 ! S7 Z) K6 D. z; y/ c a3 n* J% W3 i/ g# Y$ T
首先,你要知道的是,求解需要的边界条件并不一定非得是这几个5 Y; c! E* `5 ^$ L9 k/ j$ c/ p( E
# y8 o4 ~. g+ r% M5 |/ r# ?
但是少了一个边界条件,你就要想办法补上一个边界条件, 边界条件也不一定是已知函数的表达式,导数的表达式也是可以的(当然,代码是一定需要相应修改的)。, z. @ O9 h( z! n
( ^; ]3 o+ }' W
比如没有u(1,t),你可以想办法构造 du(0,t)/dx 或 du(0,t)/dt 1 S$ w. n6 Y3 t- ^# L 3 D+ l# z x% I0 h# p这就看你如何理解原问题了,建议查阅文献,看看别人使用的是哪种边界条件,相应的对代码进行修改。当然也可以通过模型假设,将问题向你期待的边界条件上面靠。, j9 {$ v# H, P1 [
--------------------- 1 q1 T$ _5 l- u0 q( P+ x