无法在 Octave 中绘制两个数组的图形

Failed to plot graph of two arrays in Octave

我使用 for 循环在八度音程中创建了两个数组,我想使用这两个数组的数据创建一个图形。但它显示错误“数组 属性 "xdata" 的无效值”并显示一个空图。

for i=1:16
 x=1+(10^6)*2
 h{i}=1/(10.^i)
 fdd1{i}=(sin(1+h{i})-sin(1))/h{i}
 error_f1{i}=fdd1{i}-cos(1)
endfor
**fplot(loglog(h,error_f1));**

我在绘制图表时犯了错误吗?我可以知道如何解决这个问题吗?

是的,您犯了那个片段中所有可能的错误。

  1. 您的变量 herror_f 是元胞数组。函数 loglog 接受数值数组。我相信你的具体错误来自那里。您可以像 loglog (cell2mat (h), cell2mat (error_f1)) 那样使用 cell2mat 转换它们,但我认为这仍然是不正确的,因为您一开始就不应该创建元胞数组(请参阅第 4 点)。

  2. 您的数据具有非正值,您无法使用对数标度绘制这些值。

  3. fplot 函数将函数句柄作为参数。你为什么要将图形句柄(loglog 的输出)传递给它?

  4. Octave 是一种围绕矢量化操作设计的语言。它的语法非常强调,如果你不这样做,你就会受苦。你不应该为此使用 for 循环。只需删除索引并按元素进行乘法和除法。这也解决了问题 1,因为您最终会得到一个数字数组


r = 1:16;
x = 1 + (10^6)*2;
h = 1 ./ (10.^r);
fdd1 = (sin (1+h) - sin (1)) ./ h;
error_f1 = fdd1 - cos(1);

Octave 中的经验法则:如果您看到 for 循环,很可能是您做错了。