如何在Matlab中绘制方程的输出?

时间:2011-09-06 06:38:39

标签: matlab

在Matlab中,我有一个功能:

函数[Result] = Calc_Result(A,B,C,D)

如何绘制此函数的输出,对于值A = 0.00到A = 1.00,步长为0.01?变量B,C,D是常数。

如果函数在图上的任何一点返回NaN,我需要一些处理它的方法(Matlab不应该忽略)。

2 个答案:

答案 0 :(得分:4)

正如strictrude27所说,如果你的函数可以处理矢量化,你可以使用

x=0:0.01:1;
y=Calc_Result(A, B, C, D);
plot(x,y,'.-');

如果没有,您可以使用arrayfun来避免循环:

x=0:0.01:1;
y=arrayfun(@(A) Calc_Result(A, B, C, D),x);
plot(x,y,'.-');
默认情况下,

plot优雅地处理NaN(它不会绘制它们并打破它在每个NaN处绘制的线条。)

答案 1 :(得分:3)

fplot(@(A) Calc_Result(A, B, C, D), [0 1]);

fplot立即在[0 1]区间绘制Calc_Resultfplot未绘制NaN值。请注意,此代码未指定您想要在0和1之间绘制100个点(即,步长为0.01的绘图); fplot并不关心这一点。

如果除了绘制数据之外还需要数据,您可以先生成数据,然后再绘制数据。如果尚未构建函数来处理矩阵输入,则可以执行以下操作:

xvals = [];
yvals = [];
for A = 0:0.01:1
    y = Calc_Result(A, B, C, D);
    if ~ isnan(y)
        yvals = [yvals y];
        xvals = [xvals A];
    end
end
plot(xvals, yvals);

如果构建 来处理矩阵输入(即,你在正确的位置有.来执行逐元素乘法和除法),你可以做到

之类的东西
A = 0:0.01:1;
y = Calc_Result(A, B, C, D);

虽然不知道它何时返回NaN值,但我认为你最好的选择是使用for-loop。它可能比使用矩阵输入慢一点,但只计算100个值我不认为这是一个大问题。