【问题标题】:3-D Plotting with MATLAB for Galton's Skewness and Moor's Kurtosis使用 MATLAB 绘制 Galton 偏度和 Moor 峰度的 3-D 绘图
【发布时间】:2014-11-16 20:02:41
【问题描述】:

我知道网上有很多 Matlab 绘图文档,我很确定它已经被问过很多次了。对于给您带来的任何不便,我深表歉意。

我正在处理一个新分布,我需要为不同的参数值绘制 3D 图(但是,我可以使用 Excel 或任何其他程序来绘制,因为我的其他图表是使用 MATLAB 绘制的,我需要将这个 3D 在 Matlab 中也可以作为文章发表)。我使用 MATLAB 循环计算了结果,但是,绘图给了我最困难的时间。我别无选择,只能寻求您的帮助。我有这些方程,用于具有恒定 sigma 的不同 alpha 和 beta,并计算最后两个方程给出的 Galton 偏度和 Moor 峰度。

median=sqrt(2*(sigma^2)*beta*gammaincinv(0.5,alpha));
q1=sqrt(2*(sigma^2)*beta*gammaincinv((6/8),alpha));
q3=sqrt(2*(sigma^2)*beta*gammaincinv((2/8),alpha));
q4=sqrt(2*(sigma^2)*beta*gammaincinv((7/8),alpha));
q5=sqrt(2*(sigma^2)*beta*gammaincinv((5/8),alpha));
q6=sqrt(2*(sigma^2)*beta*gammaincinv((3/8),alpha));
q7=sqrt(2*(sigma^2)*beta*gammaincinv((1/8),alpha));
galtonskewness=(q1-2*median+q3)/(q1-q3);
moorskurtosis=(q4-q5+q6-q7)/(q1-q3);

让我们假设,

sigma=1
beta=[0.1 0.2 0.5 1 2 5];
alpha=[0.1 0.2 0.5 1 2 5];

我已将 mesh(X,Y,Z) 用于具有相同增量的相同范围的 alpha 和 beta,但我认为错误“这些值不能很复杂”。我只想画如下图。

我错过了一定很容易,但我不明白错误在哪里。我很感激任何帮助。谢谢!

【问题讨论】:

    标签: matlab plot 3d distribution


    【解决方案1】:

    我为alphabeta 的二维点网格运行上述代码,两个维度都在 0.1 和 5 之间,我得到了两者的结果。

    我怀疑这是由于您的 alphabeta 声明。你只是提供了几点,如果你尝试使用mesh,它不会得到好的结果。因此,为alphabeta 定义一个meshgrid 点,然后矢量化您的 MATLAB 代码以生成峰度和偏度曲线。只有在某些情况下才应该使用for 循环。一般来说,您应该尽可能避免使用它们。

    meshgrid 的工作原理是,在给定 XY 值的范围内,它将生成两个(或如果需要 3D 坐标,则为三个)数组,其中每个数组中的每个位置都会为您提供空间坐标- 坐标在那个特定的位置。因此,如果我们这样做:

    [X,Y] = meshgrid(1:3, 1:3);
    

    这是我们得到的:

    X =
    
         1     2     3
         1     2     3
         1     2     3
    
    
    Y =
    
         1     1     1
         2     2     2
         3     3     3
    

    请注意,在二维网格中,对于左上角,(x,y) = (1,1),因此对于 X 中的相应位置,我们得到 1,Y 我们得到 1。如果你对2D 网格中的任何其他位置,您只需查看每个数组中的 XY 值,它就会告诉您每个维度的组件是什么。

    因此,不是循环遍历网格中所有可能的点,而是使用meshgrid 生成它们全部,然后通过一次计算所有值而不是单独计算值来向量化计算。完成此操作后,您就有了正确的结构,可以将其放入 mesh

    因此,请尝试这样做:

    %// Define meshgrid of points
    [alpha,beta] = meshgrid(0.1:0.1:5, 0.1:0.1:5);
    
    %// From your code
    sigma = 1;
    
    %// Calculate quantities - Notice that this is all vectorized
    med=sqrt(2*(sigma^2)*beta.*gammaincinv(0.5,alpha));
    q1=sqrt(2*(sigma^2)*beta.*gammaincinv((6/8),alpha));
    q3=sqrt(2*(sigma^2)*beta.*gammaincinv((2/8),alpha));
    q4=sqrt(2*(sigma^2)*beta.*gammaincinv((7/8),alpha));
    q5=sqrt(2*(sigma^2)*beta.*gammaincinv((5/8),alpha));
    q6=sqrt(2*(sigma^2)*beta.*gammaincinv((3/8),alpha));
    q7=sqrt(2*(sigma^2)*beta.*gammaincinv((1/8),alpha));
    galtonskewness=(q1-2*med+q3)./(q1-q3);
    moorskurtosis=(q4-q5+q6-q7)./(q1-q3);
    
    %// Show our meshes
    figure;
    mesh(alpha, beta, galtonskewness);
    figure;
    mesh(alpha, beta, moorskurtosis);
    

    还请注意,我将您的 median 变量重命名为 med。 MATLAB 有一个名为 median 的函数,因此您不希望无意中使用同名变量掩盖此函数。

    这是我得到的:


    请注意,我没有收到您在帖子中放置的情节。这可能是因为我选择了错误的变量来定义mesh,或者您的方程式可能不正确。仔细检查您在理论上知道的内容与您在代码中的内容,然后重试。

    不过,这应该能给你足够的开始!

    【讨论】:

    • 亲爱的 rayreng,非常感谢您!老实说,这与我运行的代码相同,但出现了错误:/ 抱歉耽误您的时间。我会看看它是否有效。对于这些图表,您不能仅仅因为它属于另一个新生成的分布而得到相同的结果是完全可以的,该分布具有不同的偏度和峰度公式。
    猜你喜欢
    • 2017-02-16
    • 1970-01-01
    • 2011-04-12
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 1970-01-01
    相关资源
    最近更新 更多