微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Mathematica 的 KarhunenLoeveExpansion 输出问题

如何解决Mathematica 的 KarhunenLoeveExpansion 输出问题

我有一个叫做实现矩阵的矩阵,它包含一个随机过程的 90 个实现的 101 个测量值。我将发布一个删节的 11*5 较小的示例

meshgrid[x_List,y_List] := {ConstantArray[x,Length[x]],Transpose@ConstantArray[y,Length[y]]}     
{xx,yy} = meshgrid[Range[0,1,.1],Range[0,.1]];
kernel = Exp[(-1)*Abs[xx - yy]]; 
{eval,evec} = Eigensystem[kernel];
realizationNumber = 5;
longitudeOfEigA = Length[evec];
realizationNumber = 5;
evecRand = 0*ConstantArray[1,{longitudeOfEigA}];
realizationMat = 0*ConstantArray[1,{realizationNumber}];
For[i = 0,i < realizationNumber + 1,i++,For[j = 0,j < longitudeOfEigA,j++;
evecRand[[j]] = 
eval[[j]]^0.5*RandomVariate[normaldistribution[]]*
evec[[j]]; (*Print[i];*)realization = Total[evecRand,{1}]; 
realizationMat[[i]] = realization]];
VA1 = realizationMat[[1]];
VA2 = realizationMat[[2]];
VA3 = realizationMat[[3]];
VA4 = realizationMat[[4]];
VA5 = realizationMat[[5]];
KLVariablesB = KarhunenLoeveDecomposition[{VA1,VA2,VA3,VA4,VA5}];

在文档中写道:变换矩阵 m 的行是由数组 ai 形成的协方差矩阵的特征向量。此外,变换后的数组 bi 是不相关的,在方差递减的顺序,总方差与 ai 相同。

但是,如果我写 ListPlot[{KLVariablesB[[2,1]]},Joined -> True],它看起来根本不像特征向量,见图 1

Figure 1,fist row of m

。此外,如果我改为绘制 ListPlot[{KLVariablesB[[1,Joined -> True],它看起来更像是一个特征向量,见图 2

Figure 2

,但这些不是原始协方差矩阵的特征向量。

有人可以告诉我我的代码有什么问题吗?

最好的问候。

我还附上了内核原始特征向量的图像

enter image description here

解决方法

按照给定的方式运行代码

meshgrid[x_List,y_List] := {ConstantArray[x,Length[x]],Transpose@ConstantArray[y,Length[y]]}     
{xx,yy} = meshgrid[Range[0,1,.1],Range[0,.1]];
kernel = Exp[(-1)*Abs[xx - yy]]; 
{eval,evec} = Eigensystem[kernel];
realizationNumber = 5;
longitudeOfEigA = Length[evec];
realizationNumber = 5;
evecRand = 0*ConstantArray[1,{longitudeOfEigA}];
realizationMat = 0*ConstantArray[1,{realizationNumber}];
For[i = 0,i < realizationNumber + 1,i++,For[j = 0,j < longitudeOfEigA,j++;
evecRand[[j]] = 
eval[[j]]^0.5*RandomVariate[NormalDistribution[]]*
evec[[j]]; (*Print[i];*)realization = Total[evecRand,{1}]; 
realizationMat[[i]] = realization]];
VA1 = realizationMat[[1]];
VA2 = realizationMat[[2]];
VA3 = realizationMat[[3]];
VA4 = realizationMat[[4]];
VA5 = realizationMat[[5]];
KLVariablesB = KarhunenLoeveDecomposition[{VA1,VA2,VA3,VA4,VA5}];

lp = ListLinePlot[{KLVariablesB[[2,1]]},PlotMarkers -> Automatic];

Manipulate[Show[Plot[a Sin[b + c x],{x,3 Pi}],lp,PlotRange -> {{0,5},{-6,6}}],{{a,6},0.5,8},{{b,0.21},4},{{c,3.1},10}]

您似乎没有足够的分辨率。正弦波可以匹配到输出。

enter image description here

注意,这里有一个专门用于 Mathematica 的 Stack Exchange 站点:https://mathematica.stackexchange.com/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。