【问题标题】:Check matrix element检查矩阵元素
【发布时间】:2018-11-19 21:45:21
【问题描述】:

我需要一个(rho,theta) meshgrid,为此我首先在笛卡尔坐标中定义了meshgrid,然后将其转换为极坐标:

[X,Y] = meshgrid(x,y);
R = sqrt(X.^2+Y.^2);
PHI = atan2(Y,X);

现在我得到的是极坐标中的网格,但是由于它是平方网格,所以我得到了这个东西

我说大于R 的值是错误的,因此我将它们设置为零。我是这样弄的

for i = 1:1:length(R)
    for j = 1:1:length(R)
        if R(i,j) > a
            R(i,j) = 0;
        else
            R(i,j);
        end
    end
end

我怎样才能不那么复杂?

【问题讨论】:

    标签: matlab matrix polar-coordinates cartesian-coordinates


    【解决方案1】:

    对于直角坐标到极坐标的直接转换:使用cart2pol

    [theta,rho] = cart2pol(x,y)
    

    然后进行简单的逻辑检查:

    tmp = rho>R;
    rho(tmp)=0; %=[] to delete completely
    theta(tmp)=0;
    

    为了它的价值:你当然可以创建一个直接的极坐标:

    [theta,rho] = meshgrid(0:dtheta:theta,0:dR:R)
    

    最后:i and j denote the imaginary unit 在 MATLAB 中,出于本文中提到的原因,我反对将它们用作常规变量,但这是我的观点。

    【讨论】:

    • 我想直接创建一个极坐标网格,但由于矩阵thetarho 的维度不同,我无法使用quiver 绘制结果。使用我选择的解决方案(cartesian-polar-cartesian),我有一个方形网格,更易于管理
    • @Shika93 你可以让你的thetarho 向量,你提供给meshgrid 的长度相同,然后quiver 就可以了。无论如何,cart2pol 与您手动操作的功能基本相同,只是包装在一个方便的功能中。
    【解决方案2】:

    如果我们说 a 是您想要使用的限制,您可以使用下面的代码而不是 for 循环:

    R = (R<=a).*R
    

    或者你也可以使用:

    R(R>a) = 0
    

    【讨论】:

    • 请注意,在您的代码中,您使用R 表示半径,a 表示限制。而在图中,您使用R 作为限制,使用rho 作为半径。我使用了您在代码中声明的符号。
    • 我喜欢第二个选项。哦,是的,我没有遵循我在图像内的代码中使用的符号,抱歉。这只是为了澄清我需要什么。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 2015-02-09
    相关资源
    最近更新 更多