Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Все лабораторные работы / Всё стасовское новое / prog / laba6
.cpp#include <stdio.h>
#include <conio.h>
#include <math.h>
#include "laba6M.h"
#include "laba6F.h"
//поиск нового значения Hk
Matrix Function :: GetHk(Matrix X, Function F)
{
Matrix H(2, 2);
H.element[0][0] = F.df_dx1dx1 (X);
H.element[0][1] = F.df_dx1dx2 (X);
H.element[1][0] = F.df_dx2dx1 (X);
H.element[1][1] = F.df_dx2dx2 (X);
return H;
}
//метод Ньютона
Matrix Function :: Newton (Matrix x1, Function F)
{
Matrix H (2, 2);
Matrix P (2, 1);
Matrix X = x1;
Matrix tmp (2, 1);
int s = 0;
do
{
if (!(s++%10))
{
H = GetHk (X, F);
tmp = F.AntiGrad(X);
P = H * F.AntiGrad (X);
s = 1;
}
X = X + P * F.GetAlpha(X, P);
tmp = F.AntiGrad (X);
}
while (tmp.Module() > 0.0001); //критерии окончания поиска
return (X); //искомый минимум
}
void main()
{
//начальные параметры
Matrix startPoint(2,1); //задание стартовых значений
Matrix result(1,2); //для хранения результата
startPoint.element[0][0] = -1;
startPoint.element[1][0] = -1;
//заданная функция
Function func;
//вызов метода Ньютона
result=func.Newton(startPoint,func);
cout<<"Minimum:"<<endl;
result.PrintMatrix();
getch();
}