绘制颤振极坐标

时间:2018-11-17 19:27:33

标签: matlab

我想绘制半径为a的圆形结构内的场分布。 我期望看到的是这样的圆形箭头,即从中心0沿径向朝a方向移动 enter image description here

但是我从这个结果中获得了一些东西。我写了这个

x_np = besselzero(n, p, 1); %toolbox from mathworks.com for the roots
R = 0.1:1:a; PHI = 0:pi/180:2*pi;

for r = 1:size(R,2)
    for phi = 1:size(PHI,2)
        u_R(r,phi) = -1/2*((besselj(n-1,x_np*R(1,r)/a)-besselj(n+1,x_np*R(1,r)/a))/a)*cos(n*PHI(1,phi));
        u_PHI(r,phi) = n*(besselj(n,x_np*R(1,r)/a)/(x_np*R(1,r)))*sin(PHI(1,phi));
    end
end


[X,Y] = meshgrid(R);
quiver(X,Y,u_R,u_PHI)

其中u_R应该是径向分量,u_PHI是角度分量。假设我正在编写的公式正确,那么您认为for周期是否存在问题?另外,由于R和PHI的尺寸不同(在这种情况下,R为1x20而PHI为1X361),我也得到了错误

The size of X must match the size of U or the number of columns of U.

如果我弄清楚哪个是周期问题,我希望解决它。 这是我得到的情节 enter image description here

1 个答案:

答案 0 :(得分:0)

问题与坐标系的不同有关。

quiver期望在笛卡尔坐标系中输入。

其余代码似乎用极坐标系统表示。

这是应该执行您想要的内容的代码段。初始参数部分填充有随机值,因为我没有besselzero或您问题的其他详细信息。

% Define initial parameters
x_np = 3;
a = 1;
n = 1;

% Set up domain (Cartesian)
x = -a:0.1:a;
y = -a:0.1:a;

[X, Y] = meshgrid(x, y);

% Allocate output
U = zeros(size(X));
V = zeros(size(X));

% Loop over each point in domain
for ii = 1:length(x)
    for jj = 1:length(y)
        % Compute polar representation
        r = norm([X(ii,jj), Y(ii,jj)]);
        phi = atan2(Y(ii,jj), X(ii,jj));

        % Compute polar unit vectors
        rhat = [cos(phi); sin(phi)];
        phihat = [-sin(phi); cos(phi)];

        % Compute output (in polar co-ordinates)
        u_R = -1/2*((besselj(n-1, x_np*r/a)-besselj(n+1, x_np*r/a))/a)*cos(n*phi);
        u_PHI = n*(besselj(n, x_np*r/a)/(x_np*r))*sin(phi);

        % Transform output to Cartesian co-ordinates
        U(ii,jj) = u_R*rhat(1) + u_PHI*phihat(1);
        V(ii,jj) = u_R*rhat(2) + u_PHI*phihat(2);
    end
end

% Generate quiver plot
quiver(X, Y, U, V);