代码之家  ›  专栏  ›  技术社区  ›  smyslov

Maple densityplot的Matlab等价物

  •  1
  • smyslov  · 技术社区  · 8 年前

    我想创建此函数的密度图:

    enter image description here

    在Maple中,可以使用 densityplot

    density plot

    然而,我不确定在MATLAB中绘制类似图形时使用什么。

    x = [0:10:100];
    y = [-50:10:50];
    s = [10, 0];
    i = [50,25];
    for ii = 1 : length(x)
        sir(ii) = -10 * 9.8 * log10((power((x(ii) - s(1)),2) + power((y(ii) - s(2)),2)) / (power((x(ii) - i(1)),2) + power((y(ii) - i(2)),2)));  
    end
    


    对于Maple中的密度图,我使用了

    densityplot(sir(x,y), x=0..100, y=-50..50, axes=boxed, style=patchnogrid, scaletorange=-5..50, colorscheme = [black, "green", "white"])
    
    1 回复  |  直到 8 年前
        1
  •  3
  •   Wolfie Radu Stefan    8 年前

    您可以使用 surf (一个3D曲面图)来实现这一点,但你需要一个比10步更精细的网格才能看起来很好!

    此外,您还需要 meshgrid x y 协调。

    请参阅评论了解更多详细信息。

    % Set up grid points
    x = 0:0.1:100;
    y = -50:0.1:50;
    [x,y] = meshgrid(x,y);
    % Set up parameters i, s and g
    i = [50 25]; s = [10 0]; g = 9.8;
    % Work out density  
    % - no need for loop if we use element-wise operations ./ and .^
    % - power(z,2) replaced by z.^2 (same function, more concise)
    % - You forgot the sqare roots in your question's code, included using .^(1/2)
    % - line continuation with "...", could remove and have on one line
    sir = -10*g*log10( ((x-s(1)).^2 + (y-s(2)).^2).^(1/2) ./ ...
                       ((x-i(1)).^2 + (y-i(2)).^2).^(1/2)        ); 
    % Plot, and set to a view from above
    surf(x,y,sir,'edgecolor','none','facecolor','interp');
    view(2);
    % Change the colour scheme
    colormap('bone')
    

    plot

    匹配您的示例

    你使用了Maple命令 scaletorange=-5..50 -5 50 ( docs sir

    % Restrict sir to the range [-5,50]
    sir = min(max(sir,-5),50);
    % Of course we now have to replot
    surf(x,y,sir,'edgecolor','none','facecolor','interp');
    view(2);
    

    现在,如果你想要黑色/绿色,你可以使用定制的 colormap ,这也将平滑由 'bone' 颜色表 只有64种颜色。

    % Define the three colours to interpolate between, and n interpolation points
    black = [0 0 0]; green = [0 1 0]; white = [1 1 1]; 
    n = 1000; 
    % Do colour interpolation, equivalent to Maple's 'colorscheme = [black, "green", "white"]'
    % We need an nx3 matrix of colours (columns R,G,B), which we get using interp1
    colormap(interp1(1:3, [black; green; white], linspace(1,3,n)));
    

    具有 g=3.5

    compare

    推荐文章