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

时间:2015-02-16 11:27:30

标签: arrays plot 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 个答案:

答案 0 :(得分:1)

是的,你正在解决该片段中所有可能出现的错误。

  1. 您的变量herror_f是单元格数组。函数loglog采用数字数组。我相信你的具体错误来自那里。您可以使用cell2mat中的loglog (cell2mat (h), cell2mat (error_f1))转换它们,但我认为这仍然是错误的,因为您应该从未创建过一个单元格数组(参见第4点)。

    < / LI>
  2. 您的数据具有非正值,您无法以对数刻度绘制。

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

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


  5. 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循环,那么您可能做错了。