使用fplot函数时如何矢量化?

时间:2018-12-21 03:15:04

标签: matlab plot vectorization

我正在使用fplot。 (我也可以使用plot,我刚刚发现了更多fplot的示例)。 我想绘制形式为y = m * x的两条直线 其中m = V1和V2。 V1和V2是标量。 以下代码给我一个错误。

Matlab代码

fplot(@(x) V1,[-4 4],'green')
xlim([-4 4])
ylim([-4 4])

错误消息提示要向量化。我不确定该怎么做? 稍后,我将使用meshgrid功能将指定的网格添加到该图中。

[x,y]=meshgrid(-4:.5:4,-4:.5:4);

困扰我的是我没有在fplot语句中指定增量.5。 Matlab代码

fplot(@(x) V1,[-4 4],'green')

给出以下错误消息:

错误消息 警告:函数在数组输入上的行为异常。至 为了提高性能,请对函数进行适当的矢量化处理,以返回与输入参数相同的大小和形状的输出。

  In matlab.graphics.function.FunctionLine>getFunction
  In matlab.graphics.function.FunctionLine/updateFunction
  In matlab.graphics.function.FunctionLine/set.Function_I
  In matlab.graphics.function.FunctionLine/set.Function
  In matlab.graphics.function.FunctionLine
  In fplot>singleFplot (line 234)
  In fplot>@(f)singleFplot(cax,{f},limits,extraOpts,args) (line 193)
  In fplot>vectorizeFplot (line 193)
  In fplot (line 163)
  In m01 (line 121) 

有人可以帮我把这些放在一起吗?谢谢。

2 个答案:

答案 0 :(得分:2)

赋予fplot的函数句柄应实现要绘制的y(x)函数。因此,如果要绘制y = V1*x线,则需要在函数句柄中将V1乘以x,如下所示:

fplot(@(x) V1*x,[-4 4],'green');

您的代码试图绘制y = V1函数,该函数只是一个常数。 MATLAB期望函数句柄的输出与x具有相同的尺寸,但是由于函数始终返回标量V1,因此它无法按预期运行(因此出现警告)。如果您确实想绘制一个常数函数,则可以执行以下操作来消除警告:

fplot(@(x) V1*ones(size(x)),[-4 4],'green');

答案 1 :(得分:2)

  

您说过要绘制两行等式y = m * x,   其中x是向量,m是标量V1和V2,因此您要   在同一图形上为两个标量绘制2条线。

因此,您可以同时使用V1和V2将匿名函数直接放在fplot()命令中。

close all

% declare the x interval
x =[-4:1:4];


% declare the m values as V1 and V2
V1 = 3;
V2 = 4;

% plot the 1st function
fplot(@(x)V1*x, 'green')
% hold the axis to plot the
% 2nd function within the same axis
hold on
% plot the 2nd function
fplot(@(x)V2*x, 'red')

xlim([-4 4])
ylim([-4 4])
hold off
  

在声明函数时要注意的最重要的事情是   声明函数是否必须使用点(。)运算符   适用于正确地向量化该功能。

例如

y = @(x)x.^2 + 2*x;