我使用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));**
我在绘制图表时犯了错误吗?我可以知道如何解决这个问题吗?
答案 0 :(得分:1)
是的,你正在解决该片段中所有可能出现的错误。
您的变量h
和error_f
是单元格数组。函数loglog
采用数字数组。我相信你的具体错误来自那里。您可以使用cell2mat
中的loglog (cell2mat (h), cell2mat (error_f1))
转换它们,但我认为这仍然是错误的,因为您应该从未创建过一个单元格数组(参见第4点)。
您的数据具有非正值,您无法以对数刻度绘制。
fplot
函数将函数句柄作为参数。为什么要将数字句柄(loglog
的输出)传递给它?
Octave是一种围绕矢量化操作设计的语言。它的语法非常强调,如果你不这样做,你会受到影响。你不应该为此循环。只需删除索引,然后按元素进行乘法和除法。这也解决了问题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循环,那么您可能做错了。