生成显示
图表的图表y=(2*a+1)*exp(-x)-(a+1)*exp(2*x)
在x∈< -2,4>的范围内。对于介于-3和3之间的所有整数值
我知道如何为2个值制作典型的绘图并在轴上设置范围,但是如何根据参数a绘制图形?
答案 0 :(得分:3)
详细说明Ben Voigt's comment:更高级的技术是通过调用for
来替换bsxfun
- 循环,以生成M(i,j) = f(x(i),a(j))
和plot
的评估矩阵使用此矩阵调用%%// Create a function handle of your function
f = @(x,a) (2*a+1)*exp(-x)-(a+1)*exp(2*x);
%%// Plot the data
x = linspace(-2, 4);
as = -3:3;
plot(x, bsxfun(f,x(:),as));
%%// Add a legend
legendTexts = arrayfun(@(a) sprintf('a == %d', a), as, 'uni', 0);
legend(legendTexts, 'Location', 'best');
。然后,Matlab将使用矩阵的列,并使用单独的颜色绘制每列。
ndgrid
您还可以使用x
创建评估矩阵,明确返回as
和bsxfun
值的所有组合。在这里你必须密切注意正确地矢量化代码。 (我们很幸运f
方法无需更改原始f = @(x,a) (2*a+1).*exp(-x)-(a+1).*exp(2*x); %// Note the added dots.
[X,As] = ndgrid(x,as);
plot(x, f(X,As))
就可以了。)
{{1}}
然而对于初学者来说,你应该熟悉循环。
答案 1 :(得分:1)
您可以使用简单的for循环执行此操作,如下所示。您基本上遍历a
的每个值并绘制相应的y
函数。
clear
clc
close all
x = -2:4;
%// Define a
a = -3:3;
%// Counter for legend
p = 1;
LegendText = cell(1,numel(a));
figure;
hold on %// Important to keep all the lines on the same plot.
for k = a
CurrColor = rand(1,3);
y= (2*k+1).*exp(-x)-(k+1).*exp(2.*x);
plot(x,y,'Color',CurrColor);
%// Text for legend
LegendText{p} = sprintf('a equals %d',k);
p = p+1;
end
legend(LegendText,'Location','best')
其中包含以下内容:
您可以根据需要自定义图表。希望有助于您入门!