Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторные / Лаба1

.docx
Скачиваний:
13
Добавлен:
13.07.2022
Размер:
36.29 Кб
Скачать

ФГБОУ ВО

«Уфимский государственный авиационный технический университет»

Лабораторная работа №1

по вычислительной математике

МЕТОД ГРАДИЕНТНОГО СПУСКА

Вариант №1

Выполнил: студент гр. ИВТ-

Проверила:

Шерыхалина Н. И.

Уфа 2022

1 Цель работы

Ознакомление с методами поиска экстремума нелинейной выпуклой функции нескольких переменных и решение таких задач с помощью ЭВМ.

2 Описание метода

Задача состоит в отыскании минимума функции двух переменных f(x,y) (следует отметить, что если необходимо найти максимум некоторой функции F(x,y), то эта задача сводится к поиску минимума функции f(x,y)=F(x,y) ).

Большинство численных методов состоит в отыскании некоторой последовательности (x0,y0), (x1,y1),..,(xk,yk), которая при k®®¥R (или при k®®kM) сходится к точке минимума (x*,y*). Если при этом выполняется f(x0,y0)>f(x1,y1)>..>f(xk,yk), то есть значения функции монотонно убывают при увеличении k, то такой метод называется методом спуска.

Известно, что вектор градиента функции

направлен в сторону наибольшего возрастания функции f(x,y). Поэтому в качестве направления движения можно принять противоположное градиенту направление (антиградиент), т.е. координаты точек пересчитываются по формулам

(5.1)

Выбор величины aak, с которой связана длина k-го шага, в общем случае является сложной задачей. Если k мало, то движение будет слишком медленным и потребует значительного объема вычислений. Если aak велико, то существует возможность перескочить точку минимума и выйти на противоположный склон функции. При этом возможно нарушение требования монотонного убывания последовательности f(xk,yk) и появляется опасность зацикливания, то есть колебания последовательности (xk,yk) в некоторой окрестности точки минимума (x*,y*) без приближения к ней.

Существует несколько различных способов выбора aak. В данной работе рассматривается разновидность метода с дроблением шага. Для этого задается начальное приближение (x0,y0) и начальное значение aa0 (например, x0=y0=0, 0=1). Вычисление x1,y1 и всех последующих xk+1,yk+1 производится по формуле (5.1). При этом если окажется, что f(xk+1,yk+1)>f(xk,yk), то величина k уменьшается в два раза и вычисление xk+1,yk+1 повторяется от точки (xk,yk) с новым значением k. Если же значение функции убывает, то величина k=k1.

Критерием окончания счета принимается неравенство

(5.2)

либо одновременное выполнение двух неравенств

, (5.3)

3 Выполнение работы

­Составим программу для формулы: , где

a

b

c

d

1

-1.4

0.01

0.11

Листинг программы:

import numpy as np import math a = 1 b = -1.4 c = 0.01 d = 0.11 xx = 0 #начальное значение yy = 0 #начальное значение lmd = 1#шаг сходимости def f(x, y): #main func return a*x + b*y + math.exp(c*x*x + d*y*y) def dfx(x, y): #производная по x return a + 2*c*x*math.exp(c*x*x + d*y*y) def dfy(x, y): #производная по y return b + 2*d*y*math.exp(c*x*x + d*y*y) n = 0 fl = 1 # вывод таблицы print("№:\tx\ty\tf(x,y)\tdf/dx\tdf\dy") print(n, ":\t", round(xx, 5), "\t", round(yy, 5), "\t", round(f(xx, yy), 5), "\t", round(dfx(xx, yy), 5), "\t", round(dfy(xx, yy), 5)) while fl: n += 1 #счетчик if abs(dfx(xx, yy)) > 0.00005: xx = xx - lmd*dfx(xx, yy) if abs(dfy(xx, yy)) > 0.00005: yy = yy - lmd*dfy(xx, yy) # вывод таблицы print(n, ":\t", round(xx, 5), "\t", round(yy, 5), "\t", round(f(xx, yy), 5), "\t", round(dfx(xx, yy), 7), "\t", round(dfy(xx, yy), 7)) if (abs(dfx(xx, yy)) < 0.00005) & (abs(dfy(xx, yy)) < 0.00005): fl = 0

Составим таблицу преобразований:

x

y

f(x, y)

df/dx

df/dy

0

0,00000

0,00000

1.0

1.0

-1.4

1

-1.0

1.4

-1.70693

0.9749385

-1.0140531

2

-1.97494

2.4027

-3.37659

0.9224985

-0.3628349

3

-2.89744

2.71785

-4.25144

0.8579687

0.0655071

4

-3.75541

2.56626

-4.97208

0.8215365

-0.058516

5

-4.57694

2.52973

-5.6257

0.7718061

-0.0126208

6

-5.34875

2.43189

-6.202

0.7270645

-0.0349631

7

-6.07581

2.34863

-6.71028

0.6775438

-0.0288885

8

-6.75336

2.253

-7.14974

0.6275098

-0.0330621

9

-7.38087

2.15928

-7.52427

0.5749229

-0.0320737

10

-7.95579

2.06526

-7.83659

0.5209702

-0.0321215

11

-8.47676

1.97512

-8.09107

0.4658173

-0.0308621

12

-8.94258

1.89026

-8.29285

0.4104898

-0.0292984

13

-9.35307

1.81265

-8.44818

0.356023

-0.0271486

14

-9.70909

1.7434

-8.56397

0.3036888

-0.0246478

15

-10.01278

1.68315

-8.64747

0.2547032

-0.0218667

16

-10.26748

1.63196

-8.70569

0.2101134

-0.0189675

17

-10.4776

1.5894

-8.74498

0.1706406

-0.0160898

18

-10.64824

1.55469

-8.77071

0.136621

-0.0133675

19

-10.78486

1.52686

-8.7871

0.1080154

-0.0108978

20

-10.89287

1.50485

-8.79729

0.0844829

-0.008739

21

-10.97735

1.48764

-8.80349

0.0654848

-0.0069103

22

-11.04284

1.47432

-8.8072

0.050387

-0.0054015

23

-11.09323

1.46408

-8.8094

0.0385421

-0.0041827

24

-11.13177

1.45625

-8.81068

0.0293448

-0.0032149

25

-11.16111

1.4503

-8.81142

0.0222611

-0.0024567

26

-11.18337

1.44579

-8.81184

0.01684

-0.0018687

27

-11.20021

1.44237

-8.81209

0.0127116

-0.0014166

28

-11.21293

1.4398

-8.81222

0.0095795

-0.001071

29

-11.22251

1.43786

-8.8123

0.0072102

-0.000808

30

-11.22972

1.4364

-8.81235

0.0054217

-0.0006087

31

-11.23514

1.43531

-8.81237

0.0040739

-0.000458

32

-11.23921

1.43448

-8.81239

0.0030595

-0.0003443

33

-11.24227

1.43386

-8.8124

0.0022968

-0.0002587

34

-11.24457

1.4334

-8.8124

0.0017237

-0.0001942

35

-11.24629

1.43305

-8.8124

0.0012933

-0.0001458

36

-11.24758

1.43279

-8.8124

0.0009702

-0.0001094

37

-11.24856

1.43259

-8.8124

0.0007277

-8.21e-05

38

-11.24928

1.43245

-8.8124

0.0005458

-6.16e-05

39

-11.24983

1.43234

-8.81241

0.0004093

-4.62e-05

40

-11.25024

1.43225

-8.81241

0.0003069

-3.46e-05

41

-11.25054

1.43219

-8.81241

0.0002302

-2.6e-05

42

-11.25077

1.43219

-8.81241

0.0001579

4.65e-05

43

-11.25093

1.43209

-8.81241

0.0001387

-4.03e-05

44

-11.25107

1.43209

-8.81241

9.52e-05

3.4e-06

45

-11.25117

1.43209

-8.81241

6.53e-05

3.34e-05

46

-11.25123

1.43204

-8.81241

6.18e-05

-2.26e-05

47

-11.25129

1.43204

-8.81241

4.24e-05

-3.1e-06

Вывод: был изучен метод поиска экстремума нелинейной выпуклой функции нескольких переменных и приобретены навыки решение подобных задач с помощью ЭВМ.

Соседние файлы в папке Лабораторные