Метод Ньютона-Рафсона
Оптимизация функций нескольких переменных с помощью метода Ньютона-Рафсона. Определение с его помощью точки минимума функций и количества итераций, необходимых для достижения заданной точности. Блок-схема вычислительного алгоритма и текст программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 30.09.2014 |
Размер файла | 725,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ
ФИЛИАЛ ФЕДЕРАЛЬНОГО ГОСУДАРСТВЕННОГО БЮДЖЕТНОГО ОБРАЗОВАТЕЛЬНОГО УЧРЕЖДЕНИЯ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ «МЭИ»» в г. Смоленске
Отчет по лабораторной работе
Тема: «Метод Ньютона-Рафсона»
по курсу: «Методы оптимизации»
Студент: Морозова А.В
Лишик А.Ю
Группа: АС-10
Смоленск, 2012
Цель работы
Изучение методов оптимизации функций нескольких переменных с помощью метода Ньютона - Рафсона.
Задание
Определить с помощью метода Ньютона - Рафсона точки минимума функций
и количество итераций, необходимых для достижения заданной точности .
Блок-схема вычислительного алгоритма метода Ньютона-Рафсона
Рис. 1 - Блок-схема вычислительного алгоритма
Блок-схема программы
Рис. 2 - блок-схема программы
Текст программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Grids;
type оптимизация программа вычислительный
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
Edit4: TEdit;
Edit5: TEdit;
RadioGroup1: TRadioGroup;
StringGrid1: TStringGrid;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Edit6: TEdit;
RadioGroup2: TRadioGroup;
Label7: TLabel;
Edit7: TEdit;
procedure Button1Click(Sender: TObject);
procedure RadioGroup2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
function f(x,y:real):real;
begin
if form1.RadioGroup1.ItemIndex=0 then
result:=2*x*x+5*(x+y)*(x+y)+10*(y-2)*(y-2)
else
result:=0.5*x*x+x*x*(x-y)*(x-y)+0.5*(y-2)*(y-2);
end;
function dfdx(x,y:real):real;
begin
if form1.RadioGroup1.ItemIndex=0 then
result:=14*x+10*y
else
result:=x*x*(2*x-2*y)+2*x*(x-y)*(x-y)+x;
end;
function dfdy(x,y:real):real;
begin
if form1.RadioGroup1.ItemIndex=0 then
result:=10*x+30*y-40
else
result:=y-x*x*(2*x-2*y)-2;
end;
function d2fdx2(x,y:real):real;
begin
if form1.RadioGroup1.ItemIndex=0 then
result:=14
else
result:=2*x*x+4*x*(2*x-2*y)+2*(x-y)*(x-y)+1;
end;
function d2fdy2(x,y:real):real;
begin
if form1.RadioGroup1.ItemIndex=0 then
result:=30
else
result:=2*x*x+1;
end;
function d2fdxdy(x,y:real):real;
begin
if form1.RadioGroup1.ItemIndex=0 then
result:=10
else
result:=-2*x*x-2*x*(2*x-2*y);
end;
function opredelitel(x,y:Real):Real;
begin
result:=d2fdx2(x,y)*d2fdy2(x,y)-d2fdxdy(x,y)*d2fdxdy(x,y);
end;
function zolotoeSechenie(a1,a2,b1,b2,e:Real):Real;
var a,b,x:real;
begin
a:=-100;
b:=100;
repeat
x:=(a+b)/2;
if f(a1+b1*(x-e/2),a2+b2*(x-e/2))> f(a1+b1*(x+e/2),a2+b2*(x+e/2)) then
a:=x else
b:=x;
until abs(b-a)<=e;
result:=(b+a)/2;
end;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var x,y,e,l,x1,norma:Real;
n,num:Integer;
flag:Boolean;
begin
x:=StrToFloat(Edit1.text);
y:=StrToFloat(Edit2.text);
if RadioGroup2.ItemIndex=0 then e:=StrToFloat(Edit3.text) else num:=StrToInt(Edit3.text);
n:=0;
stringgrid1.Cells[0,0]:='N';
stringgrid1.Cells[1,0]:='X';
stringgrid1.Cells[2,0]:='Y';
stringgrid1.Cells[3,0]:='L';
stringgrid1.Cells[4,0]:='Norma';
stringgrid1.Cells[5,0]:='F';
repeat
Inc(n);
StringGrid1.rowCount:=n+1;
l:=zolotoeSechenie(x,y,-(1/opredelitel(x,y)*(d2fdy2(x,y)*dfdx(x,y)-d2fdxdy(x,y)*dfdy(x,y))),-(1/opredelitel(x,y)*(-d2fdxdy(x,y)*dfdx(x,y)+d2fdx2(x,y)*dfdy(x,y))),0.000001);
x1:=x-l*(1/opredelitel(x,y)*(d2fdy2(x,y)*dfdx(x,y)-d2fdxdy(x,y)*dfdy(x,y)));
y:=y-l*(1/opredelitel(x,y)*(-d2fdxdy(x,y)*dfdx(x,y)+d2fdx2(x,y)*dfdy(x,y)));
x:=x1;
norma:=sqrt(dfdx(x,y)*dfdx(x,y)+dfdy(x,y)*dfdy(x,y));
stringgrid1.Cells[0,n]:=IntToStr(n);
stringgrid1.Cells[1,n]:=FloatToStr(Trunc(x*100000)/100000);
stringgrid1.Cells[2,n]:=FloatToStr(Trunc(y*100000)/100000);
stringgrid1.Cells[3,n]:=FloatToStr(Trunc(l*100000)/100000);
stringgrid1.Cells[4,n]:=FloatToStr(Trunc(norma*100000)/100000);
stringgrid1.Cells[5,n]:=FloatToStr(Trunc(f(x,y)*100000)/100000);
if RadioGroup2.ItemIndex=0 then flag:=norma<e else flag:=num<=n;
until flag;
Edit4.Text:=FloatToStr(Trunc(x*100000)/100000);
Edit5.text:=FloatToStr(Trunc(y*100000)/100000);
Edit6.text:=FloatToStr(Trunc(f(x,y)*100000)/100000);
if RadioGroup2.ItemIndex=0 then Edit7.text:=IntToStr(n) else Edit7.text:=floatToStr(Trunc(norma*100000)/100000);
end;
procedure TForm1.RadioGroup2Click(Sender: TObject);
begin
if RadioGroup2.ItemIndex=0 then begin
label3.Caption:='E';
Label7.Caption:='Число итераций';
end else begin
label3.Caption:='N';
label7.caption:='Погрешность';
end;
end;.
Тестирование
Тестирование функции на отрезке [-2,2].
1) При заданном количестве итераций (N=5) получаем:
Рис. 3 - Для функции 1 с заданным числом итераций
Тестирование функции на отрезке [-2,20].
2) При заданной погрешности (е=0,0005) получаем:
Рис. 4 - Для функции 1 с заданной точностью0.5*x*x+x*x*(x-y)*(x-y)+0.5*(y-2)*(y-2)
Тестирование функции на отрезке [-2,20].
3) При с заданным числом итераций (N=5) получаем:
Рис. 5 - Для функции 2 с заданным числом итераций
Тестирование функции на отрезке [-2,20].
4) с заданной точностью (E=0.0005) получаем:
Рис. 6 - Для функции 2 с заданной точностью
Вывод
В ходе лабораторной работы был исследован метод Ньютона - Рафсона для оптимизации функций нескольких переменных. Для этого метод был реализован на языке Delphi для заданных функций.
Размещено на Allbest.ru
...Подобные документы
Отделение действительных корней нелинейного уравнения. Метод хорд и касательных (Ньютона), геометрическая интерпретация. Графическая схема алгоритма. Описание реализации базовой модели в MathCAD. График сравнения числа итераций в зависимости от точности.
курсовая работа [2,0 M], добавлен 16.05.2013Создание программы в среде программирования MatLab для решения задачи одномерной оптимизации (нахождение минимума и максимума заданных функций) методом золотого сечения, построение блок-схемы алгоритма и графическое изображение исследованных функций.
реферат [112,0 K], добавлен 14.06.2010Создание программы для поиска минимума функции двух вещественных переменных в заданной области с помощью генетического алгоритма. Генетические алгоритмы и операторы. Создание начальной популяции. Размножение. Мутация и селекция. Тестирование программы.
курсовая работа [131,6 K], добавлен 22.02.2015Нахождение XI–неизвестных. Определение количества ITER-итераций. Составление текста программы, ее тестирование. Условия применения итерационного метода. Выбор количества итераций, исследование их зависимости от точности (eps). Получение корней уравнений.
контрольная работа [33,8 K], добавлен 27.02.2014Изучение методов решения нелинейных уравнений таких как: метод Ньютона, модифицированный метод Ньютона, метод Хорд, метод простых Итераций. Реализация программы для персонального компьютера, которая находит решение нелинейного уравнения разными способами.
практическая работа [321,9 K], добавлен 24.06.2012Численные методы в задачах без ограничений. Схема методов спуска. Среда редактора Visual Basic. Использование объектов ActiveX в формах. Блок-схема алгоритма моделирования. Задачи оптимизирования детерменированных функций с единственной точкой экстремума.
курсовая работа [129,5 K], добавлен 26.04.2010Необходимые условия экстремума. Разработка машинного алгоритма и программы многомерной оптимизации для градиентного метода с использованием метода равномерного поиска. Проверка необходимых и достаточных условий экстремума для найденной точки минимума.
курсовая работа [249,8 K], добавлен 25.09.2013Суть основных идей и методов, особенностей и областей применения программирования для численных методов и решения нелинейных уравнений. Методы итераций, дихотомии и хорд и их использование. Алгоритм метода Ньютона, создание программы и ее тестирование.
курсовая работа [423,0 K], добавлен 17.02.2010Определение недостатков итерационного численного способа нахождения корня заданной функции (метод Ньютона). Рассмотрение основ математического и алгоритмического решения поставленной задачи, ее функциональной модели, блок-схемы и программной реализации.
курсовая работа [364,8 K], добавлен 25.01.2010Метод установления границ начального отрезка локализации минимума. Метод золотого сечения. Оценивание точки минимума внутри найденного отрезка локализации. Программная реализация метода Свенна на языке C++. Текст программы нахождения точки минимума.
контрольная работа [47,3 K], добавлен 27.01.2011Способы отделения корней. Решение задачи методами Ньютона уточнения корней и простых итераций. Формула нахождения погрешностей. Геометрическая интерпретация методов. Составление блок-схем и текстов программ. Результаты их работы на тестовом примере.
курсовая работа [3,1 M], добавлен 15.06.2013Нахождение с заданной погрешностью корней уравнения. Оценка скорости сходимости. Нахождение промежутка, в котором содержится какой-либо корень уравнения для методов итераций и Ньютона. Разработка текста компьютерных программ для решения данных уравнений.
лабораторная работа [253,9 K], добавлен 19.12.2012Сравнение графиков заданной функции и интерполяционных полиномов на определенном интервале при двух вариантах выбора узлов (равномерно с шагом, по Чебышеву). Создание программы на основе метода Ньютона для построения графиков и расчета значений функции.
контрольная работа [1,1 M], добавлен 07.07.2012Анализ метода касательных (метода секущих Ньютона), аналитическое решение нелинейного уравнения. Описание алгоритма решения задачи, пользовательских идентификаторов, блок-схем, программного обеспечения. Тестирование программы на контрольном примере.
курсовая работа [97,1 K], добавлен 10.01.2014Создание приложения, исполняющего трансляцию программы из языка Паскаль в язык Си: разработка алгоритма реализации задачи, описание необходимых констант, переменных, функций и операторов, представление листинга программы и распечатка результатов.
курсовая работа [305,9 K], добавлен 03.07.2011Разработка программы, применяемой для интерполяции таблично заданной функции методом Ньютона. Метод структурного программирования для облегчения написания и отладки программы, повышения ее наглядности, читаемости. Применение языка программирования Pascal.
курсовая работа [371,8 K], добавлен 05.01.2010"Рой частиц" как наиболее простой метод эволюционного программирования, основанный на идеи о возможности решения задач оптимизации с помощью моделирования поведения групп животных. Схема работы алгоритма, составление кода программы и блок-схемы.
курсовая работа [38,5 K], добавлен 18.05.2013Разработка программы на языке С++ по определению величин и направлений токов в ветвях электрической цепи с использованием метода Гаусса. Блок-схема алгоритма. Контрольный расчет с помощью электронных таблиц Excel, используя метод обратной матрицы.
курсовая работа [30,3 K], добавлен 10.11.2010Решение задачи на тему максимизации функций многих переменных. Описание метода дихотомии, его применение для решения нелинейных уравнений. Решение данной задачи с использованием метода покоординатного спуска. Составление алгоритмов, листинг программы.
курсовая работа [138,5 K], добавлен 01.10.2009Интерполирование рабочих точек в пакете Mathcad с помощью полиномов (канонического, Лагранжа и Ньютона) и сплайнов (линейного, квадратичного, кубического). Реализация программы для решения системы линейных алгебраических уравнений на языке Pascal.
лабораторная работа [202,8 K], добавлен 15.11.2012