在 Matlab 中处理为不同参数构建的图形

计算科学 matlab
2021-12-22 04:53:12

对于我在 Matlab 中尝试做的这件事,我找不到简单的答案。我有一个函数文件,它对给定的参数a进行一些计算:

[]=my_function(...,a)
...
Calculations to obtain some functions y_1(x),y_2(x),... for a given parameter a.
...

figure(1);
plot(x,y_1);
title('y_1(x)');
xlabel('x');
ylabel('y_1');
set(legend(sprintf('y_1(x) for a=%g',a)),'interpreter','latex','Location','best');

figure(2);
plot(x,y_2);
title('y_2(x)');
xlabel('x');
ylabel('y_2');
set(legend(sprintf('y_2(x) for a=%g',a)),'interpreter','latex','Location','best');

...

我有兴趣为a的不同值(比如 5 个不同的值)绘制 y_1(x),所有这些都在一个图中(当然还有适当的图例)。同样对于 y_2(x)、y_3(x) 等也一样......

最简单的方法是什么?

我正在考虑让 my_function 返回每个 y_i 的绘图/图形句柄,然后制作一个新的脚本/函数文件,该文件将执行以下操作:

a=[0,1,3,5,7];

h_1=my_function(...,a(1));
h_2=my_function(...,a(2));
...

并以某种方式将 h_1 和 h_2 中的数字结合起来,但我不确定如何正确处理图例和所有内容。

1个回答

执行此操作的最惯用的 MATLAB 方法是将不同的y结果存储在一个数组中,然后使用单个 plot 调用绘制结果。

例如:

a = 1:5;
x = linspace(0,2*pi);
y = sin(bsxfun(@times, a.', x));
figure
plot(x,y)

这相当于

x = linspace(0,2*pi);
for a = 1:5
    y(ii,:) = sin(a*x);
end
figure
plot(x,y)

hold或者,您可以通过调用该函数在同一轴上绘制多个事物。例如:

x = linspace(0,2*pi);
figure
hold on
for a = 1:5
    y = sin(a*x);
    plot(x,y)
end

编辑:
您可以按如下方式制作图例:

a = 1:5;
x = linspace(0,2*pi);

figure
hold on
for ii = 1:numel(a)
    y(i,:) = sin(a*x);
    legendStrs{ii} = sprintf('y_%d(x) for a=%g', ii, a(ii));
end
h = plot(x,y);
legend(h,legendStrs)