使用for循环在同一图中绘制几个值

时间:2019-12-09 13:41:02

标签: matlab for-loop plot

我正在尝试通过for循环中的反复试验方法来绘制重力异常。我有一个由圆体引起的重力异常gal1的公式,下面,我试图更改质量(m)和重心深度({{1 }}),以便为插入的不同hm绘制重力异常的每个值。

发生的事情是,它不会使用h绘制任何值,而仅在我执行plot(x,gal1(j)时绘制一个值。我期望它可以绘制循环中每次迭代的值,以便针对不同的plot(x,gal1)

具有各种图形
gal1

1 个答案:

答案 0 :(得分:2)

问题在于,Adam mentioned每次绘制一个点而不是一个完整的数组,因此会导致错误。相反,请计算整个数组gal1,然后然后将其完整绘制。

x=[-3 ; -2.5; -2; -1.5; -1; -0.5; 0; 0.5; 1.5];
for j=1:9
    for i = 10:10:90
        for k = 10:10:90
            h(i)=i/100;
            m(k)=k/100;
            gal1(j)=(6.67 * (m(k)) * (h(i))/(x(j, 1)^2 + (h(i)) ^2)^(3/2));
        end
    end
end

figure;
plot(x,gal1,'-o') % - means a line, o gives dots on each measurement

结果:

enter image description here


与简单的矢量化计算相比,所有这些循环都过于冗长,难以理解,易于出错,并且可能比以下循环慢:

x=[-3 ; -2.5; -2; -1.5; -1; -0.5; 0; 0.5; 1.5];
h = (0.1:0.1:0.9).';
m = (0.1:0.1:0.9).'; % =h?

gal1 = 6.67.*m.*h./((x.^2+h.^2).^(3/2));

figure;
plot(x,gal1,'-o')  % Same figure as above

请注意,您需要事先创建hm(尽管在这种情况下它们是相等的?),请确保将它们转置为列向量,就像您拥有x一样。然后,只需对gal1使用相同的公式,并通过在所有*, /, ^运算符前面添加点,就可以删除所有索引并用其元素对应的运算符替换运算符。

使用一些隐式扩展魔术,您甚至可以直接绘制hm的所有组合:

x=[-3 ; -2.5; -2; -1.5; -1; -0.5; 0; 0.5; 1.5];
h = (0.1:0.1:0.9).';
m = (0.1:0.1:0.9); DO NOT transpose this

gal1 = 6.67.*m.*h./((x.^2+h.^2).^(3/2)); % is now 9x9

figure;
plot(x,gal1,'-o')
legend

为每列提供一个图,即不同的h值:

enter image description here