【问题标题】:Octave index out of bounds八度索引超出范围
【发布时间】:2015-05-12 19:38:15
【问题描述】:

程序是一个优化的梯度下降。

代码如下:

    clear all
    close all
    [x,y] = meshgrid(-2:0.1:2);                                            
   z = x.^2 + 100*y.^2;                                          
   n = 1;
   k(n)=0.01;
   arret = 0.0001;                                                         
   mesh(x,y,z);                                                            
   [x1(n),y1(n)] = ginput(1);                                             
   diff_x(n) = 2*x1(n);                                                   
   diff_y(n) = 200*y1(n);                                                 
   while sqrt(diff_x(n)^2 + diff_y(n)^2) > arret && n < 30
     k(n) = sqrt(diff_x(n)^2 + diff_y(n)^2)/(8*x1(n).^2+2*10.^6*y1(n).^2);         
     x1(n+1) = x1(n) - k(n)*diff_x(n);                                    
     y1(n+1) = y1(n) - k(n)*diff_y(n);    
     n = n+1;  
     diff_x(n) = 2*x1(n);
     diff_y(n) = 200*y1(n);
     z1(n) = x1(n).^2 + 100*y1(n).^2;                                     
     plot3(x1(n),y1(n),z1(n));                                             
   end

   x1(n)
   y1(n)
   n

所以我得到了这个,但我不明白为什么。

错误: GradientPasOptFinal2: A(I): index out of bounds;值 2 超出范围 1

错误:调用自:

错误:错误:C:\Octave\octave-3.8.2\GradientPasOptFinal2.m 第 13 行第 8 列

已解决:y1(n) 和 n 之间的 k(n) 是原因,我不知道为什么,但现在程序可以运行了,谢谢!

【问题讨论】:

  • 感谢 Doelleri 的更正,我写得很快,英语不是我的母语...

标签: octave gradient-descent


【解决方案1】:

您只定义了 k(1)。 k(2) 未定义。 移动这一行:

k(n) = sqrt(diff_x(n)^2 + diff_y(n)^2)/(8*x1(n).^2+2*10.^6*y1(n).^2); 

在这些行之前:

x1(n+1) = x1(n) - k(n)*diff_x(n);                                    
y1(n+1) = y1(n) - k(n)*diff_y(n); 

它应该可以工作。

【讨论】:

  • 感谢您的快速回答,我是 Octave 的新手,但 x1(n) 和 y1(n) 需要 k(n) 的值,另一方面,k(n ) 需要 x1(n) 和 y1(n) 的值。其他编辑:同时,计算机是否知道他有k(n)= 0.01,所以他可以计算x1(n + 1)和y1(n + 1),然后他可以计算k(n + 1),然后 x1(n+2) 和 y1(n+2) .... 我不明白这个问题。
  • 我还是卡住了,我试了很多东西都没用,我不知道该怎么办。
  • 感谢您的宝贵时间,我试过了,它不起作用。랬error: GradientPasOptFinal2: A(I): index out of bounds;值 2 超出范围 1 错误:调用自:错误:C:\Octave\octave-3.8.2\GradientPasOptFinal2.m 在第 13 行第 8 列我只是不知道修复它,第 13 行第 8 列它是 diff_x( n),一切都定义好了,很奇怪……
  • 现在我有了它:错误:C:\Octave\octave-3.8.2\GradientPasOptFinal2.m 第 25 行第 1 列错误:GradientPasOptFinal2: A(I): index out of bounds;值 10 超出界限 9
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多