八度指数超出范围

时间:2015-05-12 19:38:16

标签: octave gradient-descent

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

以下是代码:

    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):索引越界;值2超出界限1

     

错误:来自:

     

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

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

1 个答案:

答案 0 :(得分:0)

您只定义了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); 

它应该有用。