Mathematica技术需求:多样本量H1(t)同图绘制及y=1网格线设红
多样本量下H1(t)曲线的同图绘制(Mathematica实现)
需要将样本量n=10、100、1000、2000对应的H1(t)曲线绘制在同一坐标系中,同时将y=1的网格线设置为红色。以下是实现方案:
1. 封装H1(t)生成函数
先把单样本量的H1(t)生成逻辑封装成工具函数,避免重复代码:
GenerateH1[n_] := Module[{m, eval, evec, h, imin, lambda2minlambda1, tn, h1Func}, m = RandomVariate[GaussianOrthogonalMatrixDistribution[Sqrt[2]/Sqrt[n], n]]; {eval, evec} = Eigensystem[m]; h = evec[[All, 1]]; imin = Ordering[eval, 1][[1]]; lambda2minlambda1 = Sort[eval][[2]] - Sort[eval][[1]]; tn = 1/(4*lambda2minlambda1); h1Func[t_] := Abs[h[[imin]]]*Exp[-2*eval[[imin]]*t]/Sqrt[Sum[h[[i]]^2*Exp[-4*eval[[i]]*t], {i, 1, n}]]; {h1Func, tn} ]
2. 生成各样本量的函数与参数
调用函数生成不同n对应的H1(t)表达式和tn值:
(* 生成各样本量的H1(t)函数与tn *) {n10Func, tn10} = GenerateH1[10]; {n100Func, tn100} = GenerateH1[100]; {n1000Func, tn1000} = GenerateH1[1000]; {n2000Func, tn2000} = GenerateH1[2000]; (* 确定统一的x轴范围,取最大tn的10倍 *) maxTn = Max[tn10, tn100, tn1000, tn2000]; xRange = {0, 10*maxTn};
3. 同图绘制与样式设置
用Show组合多条曲线,同时指定网格线样式:
Show[ Plot[n10Func[t], Evaluate[xRange], PlotStyle -> Red, PlotLegends -> {"n=10"}], Plot[n100Func[t], Evaluate[xRange], PlotStyle -> Blue, PlotLegends -> {"n=100"}], Plot[n1000Func[t], Evaluate[xRange], PlotStyle -> Green, PlotLegends -> {"n=1000"}], Plot[n2000Func[t], Evaluate[xRange], PlotStyle -> Orange, PlotLegends -> {"n=2000"}], GridLines -> {{tn10, tn100, tn1000, tn2000}, {1}}, GridLinesStyle -> {Directive[Blue, Thickness[0.005]], Directive[Red, Thickness[0.008]]}, PlotRange -> Full, AxesLabel -> {"t", "H1(t)"}, PlotLabel -> "H1(t) Curves for Different Sample Sizes" ]
关键说明
- 函数封装:将重复逻辑打包,只需传入n即可生成对应曲线,简化代码维护。
- 统一坐标轴:基于最大tn设置x范围,确保所有曲线完整展示。
- 网格线区分:通过
GridLinesStyle分别指定x轴tn网格线(蓝色)和y=1网格线(红色),精准满足需求。 - 图例区分:用不同颜色标记不同样本量的曲线,便于对比趋势。
内容的提问来源于stack exchange,提问作者oliver
相关产品推荐
相关产品推荐

