Скачиваний:
13
Добавлен:
01.05.2014
Размер:
1.19 Кб
Скачать
#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();
}
Соседние файлы в папке prog