#matlab #iteration #mathematical-optimization #numerical-methods #newtons-method
#matlab #итерация #математическая оптимизация #численные методы #метод ньютонов
Вопрос:
Не могли бы вы, пожалуйста, объяснить, как работает этот код? Я могу понять большую часть этого, но cnt
команда сбивает меня с толку. Что cnt
означает и как оно используется для решения уравнения?
t=0; %% Initial estimate of t
idx=1; %% Number of iterations
iter=zeros(1,100); %% Array to store sequence of t values
func=zeros(1,100); %% Array to store sequence of f(t) values
eps=1e-6; %% Required accuracy
n_max=100; %% Number of iterations
f=1; %% f contains f(t)
while abs(f)>eps amp;amp; idx<n_max
f=-5-exp(-t) cos(.3*pi*t) (.1*t*t);
dfdt=exp(-t)-(0.3*pi*sin(0.3*pi*t)) (0.2*t);
iter(idx)=t;
func(idx)=f;
idx=idx 1;
t=t-f/dfdt;
end
cnt=idx-1;
t=linspace(0,10,100);
f=zeros(1,100);
for idx=1:100
f(idx)=-5-exp(-t(idx)) cos(.3*pi*t(idx)) (.1*t(idx)*t(idx));
end
figure, hold on;
grid on;
plot(t,f);
scatter(iter(1:cnt),func(1:cnt),'r');
title('Newton-Raphson Example','FontSize', 12)
legend('f(t)','Iterations', 'NorthWest');
xlabel('t', 'FontSize', 12);
ylabel('f(t)','FontSize', 12);
Комментарии:
1. Для будущих посетителей — wiki о методе Ньютона-Рафсона. Также известен как метод Ньютона.
Ответ №1:
cnt
, которое обычно расшифровывается как «count» или «counter», используется не для того, чтобы что-либо решать, а для того, чтобы отобразить это.
Если мы будем следовать алгоритму, мы увидим, что:
- Первоначально
iter
иfunc
предварительно распределяются как векторы длиной 100, что указывает на то, что ожидается, что алгоритм сойдется в течение этого числа итераций (или меньше). - Позже, когда
while
цикл завершается,cnt
отслеживается, сколько итераций фактически потребовалось для сходимости. - Наконец, при создании
scatter
графика,cnt
используется в качестве конечного индекса для построения графика, так что в конечном итоге мы не показываем все нули, соответствующиеiter(cnt 1:n_max)
иfunc(cnt 1:n_max)
.