【问题标题】:Using a for-loop to plot several values in the same figure使用 for 循环在同一图中绘制多个值
【发布时间】:2019-12-09 13:41:02
【问题描述】:

我正在尝试通过for 循环中的反复试验方法来绘制重力异常。我有以下由圆形物体引起的重力异常gal1 的公式,我试图在循环中更改质量(m)和重心深度(h)的值, 这样它就可以为插入的不同 mh 绘制重力异常的每个值。

发生的情况是它没有使用plot(x,gal1(j) 绘制任何值,而当我使用plot(x,gal1) 时只绘制一个值。我期望它绘制循环中每次迭代的值,以便我有不同的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));
                plot(x,gal1(j))
                hold on
            end
        end
    end

【问题讨论】:

  • 对不起,是MatLab,我弄错了
  • 你应该比“它不工作”更精确。同样在代码的开头使用mhx,但这些变量还不存在。提供一个最小且可重现的问题示例。
  • 好的,我更正了,但 m 和 h 在循环中指定,我希望它们的值在 0.1 步内从 0.1 变化到 0.9
  • 您的绘图不会输出任何内容,因为您只是在绘制一个点。您可以使用plot(x,gal1(j),'o') 显示一个点。但老实说,您的代码是如此奇怪和低效,我几乎可以肯定某处存在更大的错误。由于您没有提供预期的结果,我无法提供更多帮助。

标签: matlab for-loop plot


【解决方案1】:

问题是,作为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

结果:


所有这些循环都过于冗长、难以阅读、容易出错,而且可能比简单的矢量化计算慢:

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 值:

【讨论】:

    猜你喜欢
    • 2020-09-06
    • 1970-01-01
    • 2022-01-05
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 2020-05-21
    • 1970-01-01
    相关资源
    最近更新 更多