【发布时间】: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 的更正,我写得很快,英语不是我的母语...