【问题标题】:How do I graph the output of an equation in Matlab?如何在 Matlab 中绘制方程的输出?
【发布时间】:2011-09-06 06:38:39
【问题描述】:

在 Matlab 中,我有一个函数:

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

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

如果函数在图表上的任何点返回 NaN,我需要一些方法来处理这个问题(Matlab 不应该翻倒)。

【问题讨论】:

  • 您的意思是“对于值 A=0.00 到 A =1.00”?

标签: matlab


【解决方案1】:

正如 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 - 我不记得arrayfun()cellfun()。谢谢你提醒我:)
  • @strictly 不客气 :-)。我从 StackOverflow 中学会了使用这些函数......所以感谢 gnovice、Jonas、Amro 和 Matlab 标签的其他英雄 ;-)
【解决方案2】:
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 循环。它可能比使用矩阵输入要慢一些,但只有 100 个值要计算,我认为这没什么大不了的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    相关资源
    最近更新 更多