在Matlab中,我有一个功能:
函数[Result] = Calc_Result(A,B,C,D)
如何绘制此函数的输出,对于值A = 0.00到A = 1.00,步长为0.01?变量B,C,D是常数。
如果函数在图上的任何一点返回NaN,我需要一些处理它的方法(Matlab不应该忽略)。
答案 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_Result
。 fplot
未绘制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个值我不认为这是一个大问题。