2015-05-12 4 views
0

Программа представляет собой оптимизированный спуск градиента.Октавный индекс за пределами

Вот код:

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 

Так что я получил это, и я не понимаю, почему.

error: GradientPasOptFinal2: A(I): index out of bounds; value 2 out of bound 1

error: called from:

error: error: C:\Octave\octave-3.8.2\GradientPasOptFinal2.m at line 13, column 8

решаемые: к (п) между y1 (п) и п была причина, я не знаю, почему, но теперь программа работает, спасибо!

+0

Thank you Doelleri для исправления, я написал его быстро, а английский - не мой родной язык ... – avers

ответ

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); 

И он должен работать.

+0

Спасибо за быстрый ответ, я новичок в 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) .... Я не понимаю проблему. – avers

+0

Я все еще застрял, я пробовал много вещей, он не работает, я не знаю, что делать. – avers

+0

Спасибо за ваше время, я попробовал, он не работает. 랬 ошибка: GradientPasOptFinal2: A (I): индекс за пределами; значение 2 из-за границы 1 ошибка: вызывается из: ошибка: C: \ Octave \ octave-3.8.2 \ GradientPasOptFinal2.m в строке 13, столбец 8 Я просто не знаю, как это исправить, строка 13 столбца 8 это diff_x (n), все определено, это очень странно ... – avers

Смежные вопросы