在线时间 1630 小时 最后登录 2024-1-29 注册时间 2017-5-16 听众数 82 收听数 1 能力 120 分 体力 564690 点 威望 12 点 阅读权限 255 积分 174630 相册 1 日志 0 记录 0 帖子 5313 主题 5273 精华 3 分享 0 好友 163
TA的每日心情 开心 2021-8-11 17:59
签到天数: 17 天
[LV.4]偶尔看看III
网络挑战赛参赛者
网络挑战赛参赛者
自我介绍 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
群组 : 2018美赛大象算法课程
群组 : 2018美赛护航培训课程
群组 : 2019年 数学中国站长建
群组 : 2019年数据分析师课程
群组 : 2018年大象老师国赛优
% c7 M& M- [, x 【数学建模】数据处理问题 1 d; K9 q# x; k
一、插值与拟合
! z/ ? g7 C4 x+ b$ B4 @( F9 _' M
/ ^0 P- N7 N+ Y3 B# K 常用于数据的补全以及趋势分析% {) i4 I9 I& s' c0 n) m
+ l( V8 z9 l/ g1 c+ m8 q) m' _ 1、插值
, I( Z, T7 w* `$ R. ^1 k
" K/ }2 ~5 \9 K( p w1 W 总的思想,就是利用函数f (x)若干已知点的函数值,求出适当的特定函数g(x)。这样f(x)其他未知点上的值,就可以用g(x)在这一点的值来近似。这种通过已知求未知的方法称为-----插值。
9 ]& s A& m2 n" v' a; | 4 ]6 X& Y T, C" e$ U; m# q
插值方法有很多,个人感觉样条插值spline最常用吧。。。其他感觉要么复杂要么不靠谱。
3 g4 E$ V) K6 h6 n |! a
$ T3 _3 Q+ |, {3 r! ~. R3 o 对了,二维散乱插值有个方法叫v4,效果不错,拿来用就是了。。。
' c( d: b# w5 i
* \* z5 D5 d7 L3 n4 ?! q6 i 基本内容:: ~( q: o* S2 ~" ^7 e6 l
* U- [: { _ W& ~8 G. C
一维插值
+ W' ]8 h! G( |! r% P: r T$ f) }: D 二维有序插值
! t3 k" b0 a3 i7 h; {9 ] 二维散乱插值
9 j; I: ~5 i2 ]) z2 I0 ]% v# e 基本语法:y = interp1(x0,y0,x,'spline'); %一维插值% N# F0 S5 ]1 b+ Q9 W; J+ [4 o6 t6 t
%x0必须单调;x要落在x0区间范围内;x指的是待求的值
/ m6 L/ R) B) [* h 0 U5 r C6 U% Y- g1 f9 M
%示例) r- u) L" Y( h c- V5 k
hours=1:12;
: U- ?8 b7 c: \ temps=[5 8 9 15 25 29 31 30 22 25 27 24];- L6 G* S3 j$ O2 m3 |' i4 G
h=1:0.1:12;* {) d; j8 r8 z: g) @; z
t=interp1(hours,temps,h,'spline');
; g; W2 I' |# Q% U
M0 @1 F' d i( k' k
9 q; G& {" \8 n2 P* d3 I) ?' A y = interp2(x0,y0,z0,x,y,'spline'); %二维插值--规则点 d1 g! J* M9 ?( G/ C& P" i8 u
%x0,y0必须单调;x,y是一个是行向量一个是列向量;x,y要落在x0,y0区间范围内;(x,y)指的是待求的坐标
* }/ i @* i3 }' r9 Q 9 ?/ x8 c+ j- N4 j1 B
%示例8 X% s+ u* o8 t! D
x=1:5;
4 e) \, r& K8 u$ H) J y=1:3;, J0 C) y& j# ~2 x1 q& m
temps=[82 81 80 82 84;79 63 61 65 81;84 84 82 85 86];; u: F, j4 `" Q) ]/ _
xi=1:0.2:5;* a Z# \5 o$ @7 S* q# F
yi=1:0.2:3;. @& ~+ T4 K% N" m, f* ]: ^3 W
zi=interp2(x,y,temps,xi',yi,'spline');
+ ` I2 {' r) ~% _& v, n5 n
% b1 M- n3 ?" I5 \: `4 ^ 5 z2 g% y4 r w
2 e+ [* b) B" f* V3 b3 G
y = interp2(x0,y0,z0,x,y,'v4'); %二维插值--散乱点; U" ~9 l4 I6 L% o/ F! p- q3 w
+ c: z2 D5 a9 O) _. ^0 R- E7 I3 q %示例* q, f4 ]0 z) R( j
x=[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 ];+ m ? [* @# c' J; s7 b
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 ];
) A+ z! m& |: [# A. `. i z=[ 4 8 6 8 6 8 8 9 9 8 8 9 4 9 ];
9 w9 k0 P6 l( K( p x1=75:1:200;
5 Y/ Z% F& o- l" [8 O y1=-50:1:150;
; }" `( U( d d' [* q' y [x1,y1]=meshgrid(x1,y1);
7 }* [5 Y0 [! | z1=griddata(x,y,z,x1,y1,'v4');
4 w R# l h' p 6 e: I& {& K' z) C6 K
- c. j. Q, Y" B, L+ t 2、拟合:, S! `* Z7 s8 o
! Z+ N! r O. r* n3 j
总的的说,已知一组已知数据,寻求一个函数y = f (x),使 f (x)在某种准则下与所有数据点最为接近,即曲线拟合得最好。
8 e7 `$ y- H* n# i: D 按照函数的不同,可以将拟合问题进行分类。
3 ]( K9 p- d, l. Q' l 感觉多项式拟合比线性最小二乘法实用多了,就合并了吧23333$ ~# ?7 Z8 F1 }8 ~ q
0 q H9 U" C3 V% P 基本内容:9 ~$ P) ^% S2 p' _- E
a=polyfit(x0,y0,m) %多项式拟合,线性最小二乘法就是使m=14 _ z5 y' S5 _) Y1 ]# M! K
%m是最高次项系数,a返回m+1维向量(还有一个常数项系数)
) s" w1 O% W5 S) C$ m% E ! W) D' f5 v2 r; b/ C, b
%示例:
' t" c+ n6 B4 o: C! d+ y x=[1 2 3 4 5 6 7 8 9];6 C; x# |/ M4 B9 u u" [
y=[9 7 6 3 -1 2 5 7 20];' @. b. }7 g- o
P=polyfit(x,y,3)
g# n3 C9 M! J4 n& G/ _4 B5 n) P
. G g# }: u- D" M, P x$ }
$ i3 O7 [. U3 h; e+ K %指定函数拟合---看着头晕,贴一段代码要用直接调参就行/ R& u# l# n0 j6 m
syms t;
2 g9 R4 X7 I5 L# o0 S 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];
' e+ ~8 m" F& M; h: Z 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]; o; E" ?9 D* v9 p7 v) U6 n
f=fittype('a*cos(k*t)*exp(w*t)','independent','t','coefficients',{'a','k','w'}); %输入要拟合的函数,以及参数,自变量等,自定义拟合函数6 W/ V. H5 [7 E& `% T7 u
cfun=fit(x',y',f) %显示拟合后的结果8 k7 A/ Y7 @$ y0 N0 Z5 u1 S
xi=0:.1:20;- U. a+ M% r( L- y8 n& k% {+ [
yi=cfun(xi);8 v: v- B- w2 Z% T
plot(x',y','r*',xi,yi,'b--');
E% J4 u! n' D' \( f 5 ^. x6 o( p) b; ]
; V; A& F3 m9 A' O 区别:, L% P4 C2 ?1 L6 h6 O! m
插值一般经过所有数据点,拟合不一定经过所有数据点9 l% O5 u; J, C0 s8 K* z0 M1 [
插值不一定得到近似函数的表达形式,仅找到未知点对应值。拟合要求得到一个具体的近似函数表达式。
0 G( `2 ?0 }! @# D& o! T, S) V0 _ 通常建议:数据比较准确,用插值;数据误差较大,用拟合* w3 j% i& V% A* T0 c& l; V7 u
参考资料:6 v0 @, }/ _: r9 g% h
* S1 k) [7 W' N: q0 B8 r
数学建模之拟合插值方法
. l6 _) X+ I( E- S 数学建模-插值与拟合模型% n7 p$ u$ G* r: V
数学建模常规算法:插值和拟合" z8 O' j0 c, Q; ^
) ~: p+ B r% d* C7 O 二、K-means聚类与高斯混合聚类
& [% S+ t3 w1 Y( X7 K
- H n' V% U' b2 `* Y# v' \) a& V 常用于数据异常值诊断与剔除。4 h+ q9 }/ _! Q+ O7 g& ]$ V
通过聚类检测离群点,进而进行删除0 ?7 V& d- E2 b4 A3 T' b
* s3 Z7 H+ i& X# F% U, v% y& ]; i 1、 K-means聚类4 D- q2 P4 d- N2 W$ a& y/ o! l
$ f, ?- W+ D8 Y9 f 2、高斯混合聚类
6 ~ l" v0 O/ l) t! _ % Z; L9 U2 |- F4 s( H
涉及到聚类的知识,怪复杂的,等学到聚类再写吧。。。$ J) E: p" A$ I! r
三、主成分分析
! U: d) ?7 P6 {* i7 w% |+ R
4 S- w2 K, b6 ^ 常用于多维数据的降维,减少数据的冗余9 B) f l3 @" ~, b, I ~( `* j
: t' m ~6 h7 Q/ V6 M. P3 H" n9 K5 N 主成分分析(PCA), 用于将多个变量通过线性变换以选出较少个数重要变量。
! k( C+ d" M& |" A2 h& a( m7 \ f& t0 Y/ v$ N& N! n' F8 o
主成分与原始变量之间的关系:* G1 r, d! R( v! G: J- N2 Y; w
: q8 I: x3 z5 y; t9 j; Y; C$ V (1)主成分保留了原始变量绝大多数信息。
2 k$ f# {* U( C) L+ T2 W- M- U ( N! k% Q4 h5 M/ C# ]" b2 l) b4 \
(2)主成分的个数大大少于原始变量的数目。- A2 I. T6 W* e& v
2 A( E f7 m5 o$ z& V; H
(3)每个主成分都是原始变量的线性组合。
7 m% `3 I+ M) U0 F# f# o$ n8 P" ~/ i2 T 2 {7 q' B* i/ {! R) o6 n
(4)每个主成分的贡献率不同。
* \- F' E- m$ w8 ^% Y: n 1 c3 `! ~- }+ [
(5)各个主成分之间互不相关。* b& d+ c( ~8 g0 _
3 w w# L( l$ ~4 z- k 处理步骤:
' @" m6 f: O2 Z0 A3 n4 W" ]$ D ( z2 T( x4 k: [# c
数据标准化0 V* w+ V1 ]2 q/ `
计算相关系数矩阵
( w6 W3 g3 D. w, R 计算特征值与特征向量
g3 i& c3 A+ ?4 p& t" W 求出贡献率与累计贡献率(一般累计贡献率达到85%即可)
+ e3 k5 o+ H$ N& u 计算主成分载荷(即线性系数)与主成分得分' g* _/ ]( {- B% j3 a
代码:
. F0 v- ` _2 v3 W %示例:%示例:
/ ? I& j$ a2 N) Y" f da=xlsread('data.xlsx');
( m2 [, m' @6 N5 A %%标准化矩阵
& x4 `2 f: z* R. M da=zscore(da);) o% U7 ?& x* e. i) Q
fprintf('相关系数矩阵:\n') : P* L1 S9 J" k( A8 S+ c8 D1 S
std=corrcoef(da) %计算相关系数矩阵 ! ?7 F( E: O1 N: L' t
[vec,val]=eig(std); %求特征值(val)及特征向量(vec) # [ P# l5 @8 D4 a8 b* c) q. i
newval=diag(val) ;
- w) |# U- @. P2 g3 \ r2 k& }, g [y,i]=sort(newval) ; %对特征根进行排序,y 为排序结果,i 为索引 . ?: {$ g% h7 U7 N
fprintf('特征根排序:\n')$ Z! l! Y/ ~5 f' R. R J/ M+ M
for z=1:length(y) , D. d# F( K1 E5 e4 D0 J* N2 ?% }
newy(z)=y(length(y)+1-z);
( T# x0 z- v8 D% P, L* D7 c end
+ ?2 n* s# E% }# i6 {' A fprintf('%g\n',newy) %%显示特征根/ T" c* d3 C- l ^3 e& b% H
rate=y/sum(y);
3 F+ z& g+ s' Q0 E" Y7 \& h fprintf('贡献率:\n') 1 E/ N1 { p8 B8 v- b
newrate=newy/sum(newy)
1 A a! K+ E7 Q r( p sumrate=0; h& y4 E" _( d; W+ t; x( @
newi=[]; + ^- ^: r5 H0 D, Z/ ~0 ^$ z, X
for k=length(y):-1:1
! |& n, }! H' o2 v' q sumrate=sumrate+rate(k);
& U! ?/ O* p T6 U6 |, |5 H5 t( ` newi(length(y)+1-k)=i(k); ' e) v5 u, L) J' J8 D# }1 g7 l
if sumrate>0.85 %记下累积贡献率大于85%的特征值的序号放入 newi 中
, l/ T$ L- P+ E, C Z3 m! E3 E break;
& e6 @5 z0 Y g4 @7 ` end1 o, ~7 f; Q* n' o0 m/ p
end
9 D! t7 b. }4 ]* H fprintf('主成分数:%g\n\n',length(newi)); - p; R' U. { `1 t" j3 p6 h
for p=1:length(newi)
+ F) [5 C. g- d, C/ t- i, i for q=1:length(y) 1 T' [* C1 W3 K
vector2(q,p)=sqrt(newval(newi(p)))*vec(q,newi(p));%%%主成分载荷
3 d- ^" k0 a e9 _) e" X end& Z& M9 @4 o; h3 _
end& d- Y7 y/ L9 @: ?0 V7 k. M6 Y
fprintf('显示载荷:\n'); - p, B) q- Z& H& T" Z
disp(vector2); %显示载荷 %%%求各主成分得分
# q# Z$ d U0 s2 |* _ sco=da*vector2;
3 {& |% V6 ]% x) B- K/ U8 w. P2 q- ?1 A csum=sum(sco,2); " k& Y; w% a0 j9 v; M- N
[newcsum,i]=sort(-1*csum); ( ~! Z8 G7 T0 D, Z6 ]
[newi,j]=sort(i); 3 Q$ Z% l- v! P; b/ @9 J
fprintf('计算得分:\n') %得分矩阵:sco 为各主成分得分;csum 为综合得分;j 为排序结果
3 {/ g. I! j- ]( P' r4 h score=[sco,csum,j]
0 q& q# z, b# m- m) \4 A/ {& x
% a* i3 X- |+ |$ w) S 参考资料:
2 A8 S1 m, I: e1 R6 b2 K0 H& Q 关于主成分分析matlab代码实现的总结
; ?, j l% g- E( H0 }. ]. r 数学建模算法笔记(2)——主成分分析* a2 G2 k' }( s; K
数学建模之主成分分析matlab. w1 b% L! v4 a; y# G# T8 p& n
数学建模之主成分分析法
7 d$ e- @) ^) i) A9 I
- D) R1 K+ v6 ]) R1 b$ j- O 四、方差分析与协方差分析% @" U, [" C0 B" |- Q1 I
! y1 w4 Z- ?6 t- ?; U. E
常用于数据截取与特征选择。通俗的来说,就是判断某个特征对结果对影响是否显著。: M+ S$ k. E: f! f6 G
% W: ?, D' n5 t9 v; ^
1、方差分析$ J# v, x! ] `
. ]/ T( ^) O4 H
(1)单因素方差分析4 X( L2 t7 H$ k* }! O
, P7 s. X/ @. v8 v! v" f: _% p) U
维持其他因素保持不变,仅仅对一个因素进行考虑并计算方差,这称为单因素方差分析。
5 [$ B6 F/ ^6 C* u1 \2 g- [3 T" c
8 M% n% \8 M8 u0 S& ]/ f 数据集分为均衡数据(各组数据个数相等)与非均衡数据(各组数据个数不等)。+ r& d u+ N$ v. C
%均衡数据# j/ U& T2 o* ^3 [
p=anova1(x) %p是一个概率;x每一行代表不同样本,每一列代表特征中的不同序号+ l$ B. E% m8 S! v `4 B
2 i+ w8 ?- J- c: ~& ]4 F, p
%示例0 s4 |; R [. t8 w+ T: L) [
x=[162 158 146 150" | J9 F# w7 ]. h( p, p
167 160 154 155
$ X8 ]% G% m7 E, z 170 164 162 161' F4 m; t3 P% r( t& c
175 172 168 180];
" v& E5 t( O: y& h* j9 y1 s( q
/ `5 x, x, J, }7 G p=anova1(x); F' _$ z L. G$ f
& e# a$ j: a2 W4 ?% b; W
; `9 X4 d+ M! F8 h) c4 d; J# G
6 k* `. I6 {9 A, G/ b 求得 p=0.1109>0.05,所以几种工艺制成的灯泡寿命没有显著差异
9 Q8 W5 U) B: U
9 K& {/ s1 f9 s- V7 V A9 R %非均衡数据
5 P% m0 A4 V! k- {5 e" O p=anova1(x,group) %x为向量,从第1组到第r组数据依次排列;roup为与x同长度的向量,标志x中数据的组别(在于x第i组数据相对应的位置出输入整数i)9 `/ t" K. D* E) J- c4 A
5 d) U" `- e# q; J' P7 V7 U/ {9 f %示例
3 _4 s+ Z6 f; {% J" | x=[1620 1580 1460 1500$ n6 w# e: p. {" F! h3 c
1670 1600 1540 1550; Z5 k# l) d. G
1700 1640 1620 16105 V1 e7 [3 ~7 Z, O# J+ j
1750 1720 1680 1800];
; ?4 ?, w4 Q b$ h9 U8 R9 D x=[x(1:4),x(16),x(5:8),x(9:11),x(12:15)];
! Y2 j1 m4 }+ w l0 |) @- R% C w g=[ones(1,5),2*ones(1,4),3*ones(1,3),4*ones(1,4)];
( g7 F8 W* E, e0 Y9 h- N. P p=anova1(x,g) y! S/ e# K( N9 B
; |" v, [' ~9 t: T5 L
( P" H4 f% ` T# ^/ S4 b 求得 0.01<p=0.0331<0.05,所以几种工艺制成的灯泡寿命有显著差异
单因素方差分析结果对应一般如下(单因素显著性水平取0.05):
. ^5 r1 t1 X7 t) g4 q/ C
% V8 ]; I( [6 `1 S: _0 x p值结果
; Y* M, J! x9 D" e- O2 \4 _ p<0.01非常显著
/ @5 |$ y& n; s- v3 f 0.01<p<0.05显著8 O5 q: i. l6 J$ s9 K8 o% m, A4 M
p>0.05不显著3 C& d/ P* C7 z& k9 F/ o/ @
(2)双因素方差分析( U5 \$ P/ }6 F F
3 L: D* D: f% b5 g2 c4 T
与单因素方差分析类似,这次我们探究两个因素。对两个因素的实验可能进行一次,或者很多次。
# z" Y( O) u+ r8 I5 a/ l, G. k% w
1 F8 ?& q1 v1 t3 u; p 单一观测值:
0 N( g- O( ^. T) a& t+ k } p=anova2(x) %x不同列的数据表示单一因素的变化情况,不同行中的数据表示另一因素的变化情况
2 d2 P% K `, @ E4 E( x : ~1 W6 ?( Y+ V/ U" ~/ X/ M
%示例
0 E& G5 S4 O- v9 X2 v) F) U x=[58.2 56.2 65.3
6 L. P' W, K G7 N" c4 Z; u4 p 49.1 54.1 51.6
! t1 U+ ~: w- N* [. Y, a M9 V 60.1 70.9 39.2
0 w8 k: \8 Q5 {; h; r! J# f 75.8 58.2 48.7];
3 }7 `7 L* B8 j! b* b% f [p,t,st]=anova2(x)
8 [) E* D/ D" {( V2 _! r7 ]
$ o! M6 t& h% q5 c3 }' y# {
- o2 c% B5 f$ f" v 求得p=0.4491 0.7387,均>0.10,表明两个特征不同数据之间的差异对于结果无显著影响。
. N2 B- U0 `0 W3 R5 W4 T- b
5 V& o" z7 A0 n( E: B 多观测值:, k; R$ t- \3 r: q8 J( e6 f
p=anova2(x,reps) %如果每一“单元”有不止一个观测值,则用参数reps来表明每个“单元”多个观测值的不同标号,即reps给出重复试验的次数t
1 T6 }1 [; E+ K5 I2 G( N; @ # M0 z5 O* j. i: B c. o$ N
%示例: u U3 h+ S0 R/ ?1 r- {
x0=[58.2 52.6 56.2 41.2 65.3 60.81 c$ _- L) y/ M, ~
49.1 42.8 54.1 50.5 51.6 48.4
7 H) ~# y4 I7 ?& [; T 60.1 58.3 70.9 73.2 39.2 40.75 f9 \, o( e+ o; @
75.8 71.5 58.2 51.0 48.7 41.4];& r& ~% F+ [- w) R
x=x0';( o8 J+ s, }2 \6 R0 [ ^
[p,t,st]=anova2(x,2)% @8 a: e/ v3 u1 L1 B+ N
4 b- ?9 G5 l8 _, D- G: m
7 }/ [$ h$ f$ Y% G9 U4 X 求得p = 0.0035 0.0260 0.0001,其中第三个参数表明两个特征联合作用下对结果的影响。结果表明,这两个特征的影响均是显著的。
9 g# y' z8 G) c1 N! I 7 }9 y! Q8 P: {$ T4 l' N4 c
值得注意的是,上式使用转置,保证x的形式如下图所示(需要注意行列分别代表的含义):
+ d! p, b4 v' [ * Y3 @) T( n% e! k& P! y
其中,一二维代表特征维,第三维代表样本维。
3 B! b. a" }) ^3 O; M ' x* W! ]1 ?0 C1 D( z9 _ q
(3)多因素方差分析" J) ]& e" Q8 t5 Q7 {
8 |9 j; W5 A2 N# w
这里用到了正交表的处理方法,我们直接使用anovan函数:) Y- {4 \: d3 S& F, b" ?
& n& E, |' T; y3 V
+ X0 r I, x* k9 S- W
其中,特征样本不同的取值用特征水平1,2,3…来替代。
. M" f: g% ]0 h: I 8 U9 \* D. ?# F# [! K, s
最后,双因素与多因素方差分析结果对应一般如下(双因素与多因素显著性水平取0.10):" t# A* Q0 f- x" P( n# e
p值结果( Y4 g0 r7 y4 S3 d' \
p<0.01非常显著4 k" ^0 P, m( O
0.01<p<0.10显著
# f8 y* o9 D/ r) C- Q p>0.10不显著
/ P# p2 e# U; [8 Q( w i% @; |
6 i, s& G' d0 o" H6 U 2、协方差分析, j, z, f* y. d1 ?- \1 p( ?
, z: X9 [4 {& [" [! T 对于特定的特征,为了寻找那些样本之间差异较大,运用协方差分析。
# V, }, e& X" D1 \% x) W0 ` . \$ G* Q9 K7 o. q$ D
在进行完方差分析的基础上,进行协方差分析。7 c' T- {# H$ c- |& k
%分析列" o7 f4 a7 h2 i$ b$ m6 l9 g2 |
COMPARISON = multcompare(st,'alpha',0.05, 'estimate','column')0 L5 j: `# D! s) J
%分析行" a/ M. [/ z6 E6 e; \
COMPARISON = multcompare(st,'alpha',0.05, 'estimate','row')0 R: r' j# C5 X+ k3 f) F
8 @( [! w4 B# K( g/ i' k
& o1 p+ \& w- n& I, f
参考资料:' N4 g* j; P3 m' }. i
数学建模常用模型19 :方差分析
, r5 u" \8 a- q. y3 P0 _ 数学建模之方差分析
/ [! y6 o- h; `) i2 c$ y ————————————————
* |( H# Y; _; Y) Y: h. @. r x, i! V 原文链接:https://blog.csdn.net/soviet1941/article/details/104120359
/ t* g$ h$ h, x% _
7 T4 B% O( y0 r% D & Y9 s" y0 E6 n; l& O9 \
zan