【问题标题】:Problem with Mathematica's KarhunenLoeveExpansion's output输出 Mathematica Karhunen Loeve 展开的问题
【发布时间】:2021-06-15 08:17:14
【问题描述】:

我有一个名为 implementationMat 的矩阵,它包含一个随机过程的 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, .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 -&gt; True],它看起来根本不像特征向量,见图1

。另外,如果我改为绘制ListPlot[{KLVariablesB[[1, 1]]}, Joined -&gt; True],它看起来更像是一个特征向量,见图2,但这些不是原始协方差矩阵的特征向量。

谁能告诉我我的代码有什么问题?

最好的问候。

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

【问题讨论】:

    标签: statistics wolfram-mathematica eigenvalue coordinate-transformation eigenvector


    【解决方案1】:

    按照给定的方式运行代码

    meshgrid[x_List, y_List] := {ConstantArray[x, Length[x]], 
    Transpose@ConstantArray[y, Length[y]]}     
    {xx, yy} = meshgrid[Range[0, 1, .1], Range[0, 1, .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, 0, 3 Pi}], lp,
      PlotRange -> {{0, 5}, {-6, 6}}],
     {{a, 6}, 0.5, 8}, {{b, 0.21}, 0, 4}, {{c, 3.1}, 1, 10}]
    

    看来您的分辨率不够。一个正弦波可以匹配到输出。

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

    【讨论】:

    • 感谢您的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    相关资源
    最近更新 更多