- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565539 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174885
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
: Y$ {5 ]. C/ ?【数学建模】数据处理问题
3 C# H2 q6 v* A; ?一、插值与拟合
; }; S/ O/ m E7 n2 p( |+ E) N, W. w# q& P
常用于数据的补全以及趋势分析# P* o. ~& v6 S. P/ Y# B- R
, C1 J. G+ [; Z$ h5 `$ M* X, y4 R1、插值
: x' _. b/ L6 A9 k9 O/ A* @# t6 J4 V
# V- C- k2 i4 F2 }1 L8 ^& o7 G ^+ C总的思想,就是利用函数f (x)若干已知点的函数值,求出适当的特定函数g(x)。这样f(x)其他未知点上的值,就可以用g(x)在这一点的值来近似。这种通过已知求未知的方法称为-----插值。
# s. N) e6 \6 p
4 y. D; E* }2 Z1 ^! ?& G# f插值方法有很多,个人感觉样条插值spline最常用吧。。。其他感觉要么复杂要么不靠谱。
5 ^2 Z$ Q! n* T& M+ a
' B4 {; F- h! X- o3 x: x2 ~对了,二维散乱插值有个方法叫v4,效果不错,拿来用就是了。。。2 g, N/ t- U/ H9 n
6 ?+ K: O+ K7 C* W0 v |9 d: U基本内容:
k+ I: p6 q% L ~- D; C2 ?& l- J) q* f6 p0 M3 |) B
一维插值+ F4 s9 W2 G# D4 I& L7 h
二维有序插值
% M( \* C2 c- Z G f二维散乱插值
7 ?5 @! ~# I3 V$ p基本语法:y = interp1(x0,y0,x,'spline'); %一维插值0 l! X1 V) ^. u; F, Z
%x0必须单调;x要落在x0区间范围内;x指的是待求的值
" I% h3 c5 Q) q, H, }# ?4 Z, x" e& i+ f! F" u
%示例0 F( ~0 i) D+ k* v6 e2 V! C
hours=1:12;2 {5 s- d6 [1 F3 ~
temps=[5 8 9 15 25 29 31 30 22 25 27 24];
. ]# G& j+ n2 Jh=1:0.1:12;. J- o9 Q4 T7 r( Q- a3 F3 v8 y
t=interp1(hours,temps,h,'spline');
- o3 Z0 e. A* H4 Y" W" o) a# g! e
4 ^* t7 `: X# d, e; t b7 _
8 k! F9 H4 k& k4 Ky = interp2(x0,y0,z0,x,y,'spline'); %二维插值--规则点
0 e9 j/ A& {. ?3 E%x0,y0必须单调;x,y是一个是行向量一个是列向量;x,y要落在x0,y0区间范围内;(x,y)指的是待求的坐标
/ r4 ~4 d( M+ c, h$ m- ~/ }3 c; J4 C' q! C6 V+ Z
%示例" Z! z" {! q: T! a4 z7 |
x=1:5;7 N% d9 H/ P3 ~
y=1:3;
" h! Q& y7 P6 }9 p4 q4 Wtemps=[82 81 80 82 84;79 63 61 65 81;84 84 82 85 86];
' x/ V c# K' rxi=1:0.2:5;* N# s: h8 }8 E& U. _& O
yi=1:0.2:3;- |4 d3 P; P2 R" K, l
zi=interp2(x,y,temps,xi',yi,'spline');# _7 T6 } {& g1 T6 ~
' d: q! K7 T" ?: k$ T
0 J: Y% u1 x: v ^
& o0 ~" j! _) U8 R( my = interp2(x0,y0,z0,x,y,'v4'); %二维插值--散乱点9 O& v& Q8 [; A, s- R3 \
3 c" h1 q. v# w% A7 M
%示例
2 D- @8 v% |' K3 S' P0 Sx=[129.0 140.0 103.5 88.0 185.5 195.0 105.5 157.5 107.5 77.0 81.0 162.0 162.0 117.5 ];) m2 Z/ E, p% {6 n: Z5 H/ @
y=[ 7.5 141.5 23.0 147.0 22.5 137.5 85.5 -6.5 -81 3.0 56.5 -66.5 84.0 -33.5 ];* r7 D2 ^ D0 K* m. a
z=[ 4 8 6 8 6 8 8 9 9 8 8 9 4 9 ];
& s: T! B& M7 S7 N8 g/ Jx1=75:1:200;5 u2 F: X- }7 V4 O& i8 Y
y1=-50:1:150;
5 k0 w) F4 S) I% u[x1,y1]=meshgrid(x1,y1);% n1 Q" I. G' l4 P. N% c8 M
z1=griddata(x,y,z,x1,y1,'v4');: V A' T2 X `" A! j) Q
9 d7 b5 q, r) }% `% F: l @3 s, x( w
2、拟合:, |/ E( v9 e( N& Q: [4 j/ ~+ a
. n* Z* Q: O) @+ k总的的说,已知一组已知数据,寻求一个函数y = f (x),使 f (x)在某种准则下与所有数据点最为接近,即曲线拟合得最好。
- \( f0 [4 ]$ Z! M' C按照函数的不同,可以将拟合问题进行分类。' w% o7 w7 `; I/ U3 W
感觉多项式拟合比线性最小二乘法实用多了,就合并了吧23333
) N3 ^' i* m6 p" m! h8 v( Z+ e B& i- m5 W
基本内容:$ L ?' I* F% X3 M# }
a=polyfit(x0,y0,m) %多项式拟合,线性最小二乘法就是使m=1
3 q- S/ {9 n- E6 }/ z+ w%m是最高次项系数,a返回m+1维向量(还有一个常数项系数)8 d3 Z0 B* u H2 u
k# t% {+ w7 `8 D%示例:5 y) g% W9 e, {6 m8 x
x=[1 2 3 4 5 6 7 8 9];
( K# v4 [: @0 [+ u ]& J- Ty=[9 7 6 3 -1 2 5 7 20];
N/ N9 Y, d$ P, E" O* xP=polyfit(x,y,3)9 K! \+ m! ]( V, |) S. A& b
' A$ n, {# a& J4 E/ ]
+ n/ q" u/ ~" ~' m- C& C/ P4 W%指定函数拟合---看着头晕,贴一段代码要用直接调参就行7 t |; v( T9 G4 U- [6 R
syms t;% m% t! c* y, K9 C" d: D- J
x=[0 0.4 1.2 2 2.8 3.6 4.4 5.2 6 7.2 8 9.2 10.4 11.6 12.4 13.6 14.4 15];5 ~9 P, C$ X( g- T# m
y=[1 0.85 0.29 -0.27 -0.53 -0.4 -0.12 0.17 0.28 0.15 -0.03 -0.15 -0.071 0.059 0.08 0.032 -0.015 -0.02];4 V: b8 {0 d3 i, z
f=fittype('a*cos(k*t)*exp(w*t)','independent','t','coefficients',{'a','k','w'}); %输入要拟合的函数,以及参数,自变量等,自定义拟合函数
- K) G. D8 W7 ]# Q Icfun=fit(x',y',f) %显示拟合后的结果* L3 u, s6 ]" {8 r* `
xi=0:.1:20;; H g. R5 A! H2 x: S' \
yi=cfun(xi);
! _: T& e) A% o6 ^plot(x',y','r*',xi,yi,'b--');, S2 z) u$ c9 h" I. F
: [9 c/ S" _# S* Y0 l& j" `
! N9 ^$ y _1 y区别:5 @/ Y+ L% m# N' B3 U# j
插值一般经过所有数据点,拟合不一定经过所有数据点
9 f/ F* |. N# Z% Z. D! b插值不一定得到近似函数的表达形式,仅找到未知点对应值。拟合要求得到一个具体的近似函数表达式。
) ?; B e6 U' z# W通常建议:数据比较准确,用插值;数据误差较大,用拟合' k- T: W% _- r9 Z$ @# b
参考资料:
' w3 q% P0 |4 H; Y4 b, u9 ?2 x; B) S7 J. j2 ]; F+ F
数学建模之拟合插值方法# O6 A" _4 c# _7 Y) B6 \
数学建模-插值与拟合模型* A4 }1 L' u5 r# }. K
数学建模常规算法:插值和拟合
# M$ m4 @, T9 Z7 Q4 R& d* f* a S" O6 U; c
二、K-means聚类与高斯混合聚类
% \# V8 Y5 R3 q. X
4 U8 Q; V5 j% g9 u7 ?" _常用于数据异常值诊断与剔除。8 v1 {6 C1 \5 ]1 Y' U6 N! N% N
通过聚类检测离群点,进而进行删除
- n, x' M1 F* g
# ]0 m7 x( p# U8 Y' H1、 K-means聚类0 O) ~. ~4 K; `' d) K4 f7 C3 A! }
( o' v) b, O; I2、高斯混合聚类
+ f: ]) c6 ]* c- V# R1 V8 L5 y9 l; R: D& |
涉及到聚类的知识,怪复杂的,等学到聚类再写吧。。。/ i o- |. O2 R6 [7 D& |4 Z5 c
三、主成分分析
' m( u/ }) O |$ a+ J
4 u; V" U4 M. B, G# H0 v5 H常用于多维数据的降维,减少数据的冗余
4 T! ^2 I; G8 s8 D. ]" ]
8 n& b* \: j# \主成分分析(PCA), 用于将多个变量通过线性变换以选出较少个数重要变量。
o3 d* i3 H) z3 T6 M+ L2 R! A# ^* ]! o9 S0 ^& I8 O/ x
主成分与原始变量之间的关系:
, h9 ^- n" n/ i3 @+ W- k9 V. B. m7 B* G' a6 b5 a% G3 r1 E7 j- c
(1)主成分保留了原始变量绝大多数信息。
1 [ K# d |) G0 V5 n& q2 }# V# a
2 z/ J2 d" q- w5 o (2)主成分的个数大大少于原始变量的数目。
3 j7 p$ t2 Q; I t8 ?; i
: c+ K& ^/ t! q (3)每个主成分都是原始变量的线性组合。
; A* U( S: r7 }( I5 ]/ O/ D7 R$ [; v& ?, o3 Y
(4)每个主成分的贡献率不同。, e/ I4 c& S E- O
1 d, z3 b2 S# ^) |: P. Z
(5)各个主成分之间互不相关。4 y6 N* J/ w* `! p
4 R+ _, R y& X1 N处理步骤:
1 Y, a: k" R/ n( k* A0 d9 @
1 T. P; a' B' k( I数据标准化2 D" o' n% z* _# c% `7 G& V
计算相关系数矩阵: J0 z+ f6 R/ U3 R
计算特征值与特征向量5 w4 J; o5 Y& v* {2 r6 l+ M7 k
求出贡献率与累计贡献率(一般累计贡献率达到85%即可)1 f3 B- Z9 S6 `0 n7 _1 M8 X
计算主成分载荷(即线性系数)与主成分得分* f2 {( X9 u3 U8 w4 y/ x/ w2 B
代码:
2 K- n C- ?8 i, @3 z3 @4 m) q%示例:%示例:
% V: Y: B- {) e. C# T* z% h9 gda=xlsread('data.xlsx');
: R# | s Y% K/ }%%标准化矩阵
) n" t8 K. ~; X- Eda=zscore(da);
( W# Z& L# }2 gfprintf('相关系数矩阵:\n')
\* J7 t: K: V' J1 x0 ?std=corrcoef(da) %计算相关系数矩阵
7 |* P+ V: Y. ?. z4 S[vec,val]=eig(std); %求特征值(val)及特征向量(vec)
# G. t0 u& W/ O. }newval=diag(val) ; ) W2 }, p, F4 a( K! u+ B
[y,i]=sort(newval) ; %对特征根进行排序,y 为排序结果,i 为索引
/ s2 o7 ]* ^& N( T+ H$ Wfprintf('特征根排序:\n'); k) b- u" F& D7 G1 f& f, C
for z=1:length(y) " l- [6 P) u: c# O- t
newy(z)=y(length(y)+1-z); $ P( f3 G' e: u9 d$ [9 d* h* r
end9 y0 G7 h, G$ O2 U
fprintf('%g\n',newy) %%显示特征根8 f, T# l9 j; g& r* A, T- X/ P z
rate=y/sum(y);
) V& t2 _3 q% l4 I& {fprintf('贡献率:\n')
6 W* O _+ v* R1 P! Z: @newrate=newy/sum(newy)
9 W) b3 j# Z: V1 N3 |+ ]9 X1 \1 K! ksumrate=0;
( c0 `' r3 _$ {( cnewi=[]; ; V+ C/ o' P. ]2 P' ^( k) |
for k=length(y):-1:1
3 {0 l' i( I7 h9 @, m' ? sumrate=sumrate+rate(k); ], x7 _3 X5 `& e) s
newi(length(y)+1-k)=i(k); 5 u7 f, u' P h! q' B4 ^: s2 F
if sumrate>0.85 %记下累积贡献率大于85%的特征值的序号放入 newi 中 $ i5 i z& c7 b: l& S
break;
9 M2 O$ s# i( _6 f" ?! N w- y end! T# |7 g, }7 F# o7 n
end
* T0 i: G; X8 l% G, vfprintf('主成分数:%g\n\n',length(newi)); " q6 M4 O/ I( [7 P$ U; T
for p=1:length(newi) 6 w6 a3 N) W5 l6 y1 r/ ]
for q=1:length(y)
& q8 z8 {: G6 @* _& t vector2(q,p)=sqrt(newval(newi(p)))*vec(q,newi(p));%%%主成分载荷 # d/ U1 X# O, `: A. o. g! c$ O
end! n1 k/ D x* {1 k6 {; ~) t
end
1 L( c3 Z2 P ^) v& X" u* vfprintf('显示载荷:\n'); 4 ?9 ~: r7 @7 E8 q# _0 j# w" E5 b
disp(vector2); %显示载荷 %%%求各主成分得分
- T$ E; s5 O' c/ rsco=da*vector2;
) Y) |: C( s! H$ x4 B2 y& j6 w* Ocsum=sum(sco,2);
) l$ b( x$ U6 O' a[newcsum,i]=sort(-1*csum);
6 r+ R3 i1 n- i h5 K2 z% C[newi,j]=sort(i);
. { S, Y1 v6 h* E6 O7 [! F# n& Jfprintf('计算得分:\n') %得分矩阵:sco 为各主成分得分;csum 为综合得分;j 为排序结果 ) V* q, o7 w/ k* t' U
score=[sco,csum,j]
( @+ m% W( w! }% Y; O- {2 I& T' c8 ], c" f9 y; M. e
参考资料:# m6 s7 Z) h+ M( a# v0 m
关于主成分分析matlab代码实现的总结1 P K4 S+ _+ `$ c; x) j" K
数学建模算法笔记(2)——主成分分析) ~8 x$ Y5 Y+ ~4 T2 l w$ Y
数学建模之主成分分析matlab
8 y* j, U# R% {9 w; U数学建模之主成分分析法* v6 A& t3 N( b& y8 `
( l7 f: Z+ {8 a
四、方差分析与协方差分析
" r4 J4 `" T4 J, g
. g/ ^, V& u0 w. N5 F8 b. i& b常用于数据截取与特征选择。通俗的来说,就是判断某个特征对结果对影响是否显著。7 ^0 ^) {* X2 |, ^& Z$ b( q# V
. F/ E9 E4 e2 X5 Y) R
1、方差分析
. d4 I& d" r. U8 W3 R+ p
8 J% `1 E4 e8 r8 s/ g(1)单因素方差分析
# h% }8 O3 X; {9 D% i( ?$ K7 [" [
8 A+ V' x$ S! X) f+ h维持其他因素保持不变,仅仅对一个因素进行考虑并计算方差,这称为单因素方差分析。' q' B, H" ]& ?0 E+ ]4 L
3 r6 C5 F/ h% b* \数据集分为均衡数据(各组数据个数相等)与非均衡数据(各组数据个数不等)。# C6 w" V. E' `
%均衡数据: O4 E: V2 H; `
p=anova1(x) %p是一个概率;x每一行代表不同样本,每一列代表特征中的不同序号% e: k1 C) l4 ^; B: {2 M
4 G! ?, n$ j' v) f" C) U5 z
%示例
' y1 `, g3 ]* T6 O9 Zx=[162 158 146 150: C& i6 z% U, C& k
167 160 154 155) N& z' N4 G3 P- u% I
170 164 162 161
. X5 v+ x3 H' X# L6 q# b3 m175 172 168 180];
) K& C4 e7 {( ^9 C: s) k1 T r! w2 Z7 X9 i; w3 x2 J1 [
p=anova1(x)
" ]' E) X" r& b$ a- }
* E3 S/ S& n$ W: `! Z( V
( }9 S8 D8 f. n: t
. K: j; i/ d: z求得 p=0.1109>0.05,所以几种工艺制成的灯泡寿命没有显著差异( U9 K/ |2 M, X' O
" N" m5 c' C8 c1 y%非均衡数据* B; S! ]' z+ F0 ]2 i# R
p=anova1(x,group) %x为向量,从第1组到第r组数据依次排列;roup为与x同长度的向量,标志x中数据的组别(在于x第i组数据相对应的位置出输入整数i)
6 ^/ N k W2 \8 k* v
& ]0 }- ^0 w, a& w/ R* n3 {7 a%示例( `% e5 E/ \* W! ~% X$ N9 K
x=[1620 1580 1460 1500
( J% O7 _8 q4 z1670 1600 1540 1550- ^, d! E6 ~/ u; o1 k1 v) D
1700 1640 1620 1610/ Z$ j. k# |9 C& ?0 g
1750 1720 1680 1800];
2 ^1 O; F C$ Ux=[x(1:4),x(16),x(5:8),x(9:11),x(12:15)];( `6 Z1 T! }, ^7 E2 |- X
g=[ones(1,5),2*ones(1,4),3*ones(1,3),4*ones(1,4)];# i: o9 Z4 W. B
p=anova1(x,g)4 i) ~; z" r# |7 S. }! \$ Z
% p+ Z3 A; \7 i: ^
6 K4 Z3 F; {5 A
求得 0.01<p=0.0331<0.05,所以几种工艺制成的灯泡寿命有显著差异 单因素方差分析结果对应一般如下(单因素显著性水平取0.05): 2 r3 s8 q) p6 H
+ r& f- W x) v; Z, ~9 S4 f2 ~ P; \! Gp值结果
' y( N& p5 R* k2 A' a9 ^p<0.01非常显著
: T( M9 A9 A L+ }, ?, ]4 a8 T0.01<p<0.05显著
/ e8 F' k3 q9 n' yp>0.05不显著- F8 p$ @2 _3 u8 K
(2)双因素方差分析/ U f: {$ e+ k( y. b
2 w1 M8 F; d. D( Y$ O& Y
与单因素方差分析类似,这次我们探究两个因素。对两个因素的实验可能进行一次,或者很多次。
, ~* U3 e7 _6 n. K6 O; O6 L9 J, b3 P) i4 C L' K6 c
单一观测值:7 \/ c0 i/ J8 J- b
p=anova2(x) %x不同列的数据表示单一因素的变化情况,不同行中的数据表示另一因素的变化情况: x& Z( E' O- u% U2 A
+ K- Y) e4 x* y; a
%示例3 x/ {! _. N/ b2 T
x=[58.2 56.2 65.3
8 u& ]& Y( [2 I' K8 z49.1 54.1 51.61 \0 L3 `/ ]- ^9 A9 P" o
60.1 70.9 39.2
o/ S' j8 `1 J* j; T; [8 W75.8 58.2 48.7];
( o+ e- N: A. }+ N0 j: a[p,t,st]=anova2(x)7 v1 S6 b6 a# A
$ A& h; P& y' _+ b' {! M' V% B9 X
: `5 y' d8 F* n% r0 N
求得p=0.4491 0.7387,均>0.10,表明两个特征不同数据之间的差异对于结果无显著影响。
* Y4 A0 @& \# Z8 v. P1 B: ]; a' R
2 i% B% J, q1 ~$ p4 F. v多观测值:
) O. Q. h% u9 s# Z/ t! v$ wp=anova2(x,reps) %如果每一“单元”有不止一个观测值,则用参数reps来表明每个“单元”多个观测值的不同标号,即reps给出重复试验的次数t' Y: ~9 L, X! o8 M6 A9 M/ B+ f
9 {+ T* G& |# o! S* ~9 d4 R
%示例 w. J, ]# H; S, K B
x0=[58.2 52.6 56.2 41.2 65.3 60.8# y# N) g1 r5 s. o& {9 {
49.1 42.8 54.1 50.5 51.6 48.4
, w9 e" v" G- J8 o/ v/ {( u3 u60.1 58.3 70.9 73.2 39.2 40.7
& d2 p9 ?: f4 b {. _4 N75.8 71.5 58.2 51.0 48.7 41.4];
3 F" F# K! H, G) D$ Qx=x0';9 X) U. [7 a8 `: A& F5 ]" ~2 N
[p,t,st]=anova2(x,2)
7 ~# L% \' {3 z3 {% `' H8 A
0 G# v# K) P3 K( w, ~. k2 c4 @0 c8 Q% A6 o6 J% i, m8 H: w
求得p = 0.0035 0.0260 0.0001,其中第三个参数表明两个特征联合作用下对结果的影响。结果表明,这两个特征的影响均是显著的。
0 f8 `3 q$ E. ` _3 U3 `2 v
3 H" P" k" n+ p2 ]& i- e: g值得注意的是,上式使用转置,保证x的形式如下图所示(需要注意行列分别代表的含义):, E$ F; _- \" E" G
! d1 m1 ` `; A: r+ S' S2 n
其中,一二维代表特征维,第三维代表样本维。
# L. X) p& f& Z& O0 g) d
0 N1 ]+ g7 ?. N; t, {3 z6 b(3)多因素方差分析 R) d& ?/ k" H* G& J$ ~5 c3 ~& P
- f, I0 l5 L! g* l
这里用到了正交表的处理方法,我们直接使用anovan函数:( w( v" m) b* _/ K( c
X i$ O7 r5 G' v
![]()
4 k+ x6 V5 p3 b& B, B其中,特征样本不同的取值用特征水平1,2,3…来替代。( e2 ]* Q* k5 E9 z# I$ u7 e
& F% w8 X \4 a
最后,双因素与多因素方差分析结果对应一般如下(双因素与多因素显著性水平取0.10):
- Q a3 Y$ |$ Q- I; @p值结果: K0 b. b. o' S% n' S# j) E4 b
p<0.01非常显著
: x' Z3 k: D" T' d# O* `, |0.01<p<0.10显著/ w0 _" q' n" J! x. ~8 m
p>0.10不显著
6 {! y) E2 F& T, C( h
- X* j9 Z. [3 Z0 y( B" p2、协方差分析
9 M$ }: W9 |$ p- B% H, x
' z; ?- Y* ]- d; j0 V对于特定的特征,为了寻找那些样本之间差异较大,运用协方差分析。0 s9 T- j8 S- A" b0 g. b/ Z; C
# O) x6 {/ j+ Y! m! S4 S; {9 ]3 F
在进行完方差分析的基础上,进行协方差分析。1 h5 {1 f8 r# F3 g4 p* n
%分析列
8 v0 D8 t2 w" `. u3 W; o9 g- w% iCOMPARISON = multcompare(st,'alpha',0.05, 'estimate','column')
3 d! N9 U1 E. f: t. J* s* c" w%分析行
1 y& F/ M1 Y7 A: x* c; f4 VCOMPARISON = multcompare(st,'alpha',0.05, 'estimate','row')) d+ N5 r4 @4 U5 @! A- y$ {
9 {. W, k3 M5 i1 z( {& j3 t1 _" }* y8 u: | y: ?! `" U0 e4 ^; t* u7 w& v
参考资料:- c. c$ B0 @9 }# l# m
数学建模常用模型19 :方差分析
3 c) R$ d" c" w: K2 h' W) g7 q数学建模之方差分析
9 Q0 z0 S! Z1 I5 _7 E7 x————————————————
5 @( I4 ?( J L' B3 Y, D4 [/ w' p原文链接:https://blog.csdn.net/soviet1941/article/details/104120359
; V9 `+ x- C4 S* T+ J7 D
0 [5 p8 W0 p: l+ ~
' Y0 }. g# i/ ` |
zan
|