Скачиваний:
23
Добавлен:
07.01.2014
Размер:
174.08 Кб
Скачать

Российский химико-технологический университет им. Д.И.Менделеева

Кафедра вычислительной математики

ОТЧЕТ

Методы Одномерной Оптимизации

Вариант 17

Выполнил: Павлов В.А. гр. И-24

Проверил: Епишкин А.П.

Москва 2006

Методы одномерной оптимизации

Дана некоторая функция от одной переменной , надо определить такое значение , при котором функция принимает экстремальное значение. Под ним обычно понимают минимальное или максимальное значения. В общем случае функция может иметь одну или несколько экстремальных точек. Нахождение этих точек с заданной точностью можно разбить на два этапа. Сначала экстремальные точки отделяют, т.е. определяются отрезки, которые содержат по одной экстремальной точке, а затем уточняют до требуемой точности . Отделение можно осуществить, как графически, так и табулированием. Все методы уточнения точек экстремумов будем рассматривать относительно уточнения минимума на заданном отрезке.

Метод деления на три равных отрезка.

1. Дан отрезок , на котором определена функция и точность . Надо уточнить точку минимума с заданной точностью. Введём новое обозначение точек и . И вычислим Z=1/3.

2. Делим отрезок на три равные части и определяем точку и точку . Вычисляем значения функции в этих точках , .

3. Определяем новый отрезок, содержащий точку экстремума, сравнив значения функций F2 и F3. Если F2 < F3, то границы нового отрезка определим как , а , иначе , а .

4. Проверяем условие окончания итерационного процесса . Если оно выполняется, то определим решение, как и значение функции в этой точке . Иначе перейдем на пункт 2.

Метод деления отрезка пополам.

1. Дан отрезок , на котором определена функция и точность . Надо уточнить точку минимума с заданной точностью. Введём новое обозначение точек и .

2. Делим отрезок пополам и определяем точку середины и точку , отстоящую на незначительное расстояние от середины . Вычисляем значения функции в этих точках , .

3. Определяем новый отрезок, содержащий точку экстремума, сравнив значения функций F2 и F3. Если , то границы нового отрезка определим как , а , иначе а .

4. Проверяем условие окончания итерационного процесса . Если оно выполняется, то определим решение, как и значение функции в этой точке . Иначе перейдем на пункт 2.

Метод золотого сечения.

1. Дан отрезок , на котором определена функция и точность . Надо уточнить точку минимума с заданной точностью. Вычислим и введём новое обозначение точек и

2. Делим отрезок на три части и определяем точку и точку . Вычисляем значения функции в этих точках F2=f(x2) F3=f(x3).

3. Определяем новый отрезок, содержащий точку экстремума, сравнив значения функций F2 и F3. Если F2 < F3, то пункт 4, иначе пункт 5

4. Границы нового отрезка определим как x1=x1, x4=x3, а x3=x2, F3=F2, x2=x1+Z(x4-x1) и F2=f(x2) пункт 6

5. Границы нового отрезка определим как x1=x2, x4=x4, а x2=x3, F2=F3, x3=x4-Z(x4-x1) и F3=f(x3) пункт 6

6. Проверяем условие окончания итерационного процесса | x4-x1 | ≤ 2ε. Если оно выполняется, то определим решение, как и значение функции в этой точке . Иначе перейдем на пункт 3.

Программа по методу половинного деления, методу золотого сечения,

методу деления на три отрезка:

Private Sub CommandButton1_Click()

Dim i As Byte, x!(21), f!(21), h!, e!, s!, a!, b!, Fa!, Fb!, k!, Fk!, R!, bet!, xn!

e = 0.01

h = 0.5

s = -5

For i = 0 To 20

x(i) = s

s = s + h

Cells(1, 1) = "i"

Cells(1, 2) = "X(i)"

Cells(i + 2, 1) = i

Cells(i + 2, 2) = x(i)

Next i

For i = 0 To 20

f(i) = x(i) ^ 3 + 0.518 * x(i) ^ 2 - 10.805 * x(i) - 2.598

Cells(1, 3) = "f(i)"

Cells(i + 2, 3) = f(i)

Next i

End Sub

Function f!(x!)

f = x ^ 3 + 0.518 * x ^ 2 - 10.805 * x - 2.598

End Function

Private Sub commandbutton2_click()

Dim a!, b!, e!, x1!, x2!, x3!, x4!, z!, f2!, f3!, x!

a = Cells(14, 2)

b = Cells(16, 2)

e = 0.01

x1 = a

x4 = b

z = 1 / 3

i = 0

met1:

x2 = x1 + z * (x4 - x1)

x3 = x4 - z * (x4 - x1)

f2 = f(x2)

f3 = f(x3)

Cells(5 + i, 5) = x1

Cells(5 + i, 6) = x2

Cells(5 + i, 7) = x3

Cells(5 + i, 8) = x4

Cells(5 + i, 9) = f2

Cells(5 + i, 10) = f3

Cells(5 + i, 11) = Abs(x4 - x1)

i = i + 1

If f2 < f3 Then x4 = x3 Else x1 = x2

If Abs(x4 - x1) <= 2 * e Then x = (x1 + x4) / 2: GoTo met2 Else GoTo met1

met2:

Cells(25, 2) = x

Cells(25, 3) = f(x)

End Sub

Private Sub commandbutton3_click()

Dim a!, b!, e!, x1!, x2!, x3!, x4!, f2!, f3!, x!

a = Cells(14, 2)

b = Cells(16, 2)

e = 0.01

x1 = a

x4 = b

met1:

x2 = (x1 + x4) / 2

x3 = x2 + (x4 - x1) / 100

f2 = f(x2)

f3 = f(x3)

Cells(23 + i, 5) = x1

Cells(23 + i, 6) = x2

Cells(23 + i, 7) = x3

Cells(23 + i, 8) = x4

Cells(23 + i, 9) = f2

Cells(23 + i, 10) = f3

Cells(23 + i, 11) = Abs(x4 - x1)

i = i + 1

If f2 < f3 Then x4 = x3 Else x1 = x2

If Abs(x4 - x1) <= 2 * e Then x = (x1 + x4) / 2: GoTo met2 Else GoTo met1

met2:

Cells(26, 2) = x

Cells(26, 3) = f(x)

End Sub

Private Sub commandbutton4_click()

Dim a!, b!, e!, x1!, x2!, x3!, x4!, z!, f2!, f3!, x!

a = Cells(14, 2)

b = Cells(16, 2)

e = 0.01

x1 = a

x4 = b

z = (3 - Sqr(5)) / 2

i = 0

met1:

x2 = x1 + z * (x4 - x1)

x3 = x4 - z * (x4 - x1)

f2 = f(x2)

f3 = f(x3)

Cells(36 + i, 5) = x1

Cells(36 + i, 6) = x2

Cells(36 + i, 7) = x3

Cells(36 + i, 8) = x4

Cells(36 + i, 9) = f2

Cells(36 + i, 10) = f3

Cells(36 + i, 11) = Abs(x4 - x1)

i = i + 1

If f2 < f3 Then x4 = x3: x3 = x2: f3 = f2: x2 = x1 + z * (x4 - x1): f2 = f(x2) Else x1 = x2: x2 = x3: f2 = f3: x3 = x4 - z * (x4 - x1): f3 = f(x3)

If Abs(x4 - x1) <= 2 * e Then x = (x1 + x4) / 2: GoTo met2 Else GoTo met1

met2:

Cells(27, 2) = x

Cells(27, 3) = f(x)

End Sub