Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2010, 18:25   #1
Potemkin
Новичок
Джуниор
 
Регистрация: 29.09.2010
Сообщений: 2
По умолчанию VBA: Одномерный поиск оптимума функции методом поиска с использованием квадратичной аппроксимации

Здравствуйте. Надеюсь, название получилось не слишком длинным =-)
Прошу помочь в решении следующей задачи:
Просят реализовать процедуру одномерного поиска оптимума функции методом с использованием квадратичной аппроксимации.
Функция: f(x)=3*x^2+12/x^2-5
Интервал поиска: 1/2<=x<=5/2

Соль в том, что нужно провести только 4 вычисления значения функции и целью расчета является не определение той самой точки оптимума, а получение результирующего интервала поиска после 4-х итераций.

Пробовал сделать самостоятельно, но что-то пошло не так... Помогите разобраться пожалуйста. Быть может, я сделал мелкую ошибку, а может и вовсе пошел не тем путём...

Код:
Function f3(x As Double) As Double
'Функция, для которой ищем минимум

f3 = 3 * x ^ 2 + 12 / x ^ 3 - 5

End Function

Function find4(LOW As Double, HIGT As Double) As Double

'Ищет минимум функции f(x) на интервале [LOW,HIGT], проводя 4 итерации
'метод: квадратичная апроксимация

Dim x1 As Double, x2 As Double, x3 As Double, a1 As Double, a2 As Double
Dim xmin As Double, fmin As Double, fmin2 As Double, L As Double
Dim xshtr As Double
Const eps = 0.003
'константа задает точность расчета
    x1 = LOW
    x3 = HIGT
    x2 = (x3 - x1) / 2
    a1 = (f3(x2) - f3(x1)) / (x2 - x1)
    a2 = 1 / (x3 - x2) * ((f3(x3) - f3(x1)) / (x3 - x1) - (f3(x2) - f3(x1)) / (x2 - x1))
    xshtr = (x2 + x1) / 2 - (a1 / (2 * a2))

For i = 1 To 4
    fmin = Application.Min(f3(x1), f3(x2), f3(x3))
    If f3(x1) = fmin Then
            x1 = xmin
    ElseIf f3(x2) = fmin Then
            x2 = xmin
    ElseIf f3(x3) = fmin Then
            x3 = xmin
    End If
    
'условие прекращения вычислений
  If Abs(f3(xshtr) - fmin) / fmin < eps And Abs(xmin - xshtr) / xmin Then
                GoTo TheRabbit
  Else
    fmin2 = Application.Min(fmin, f3(xshtr))
  End If

  If fmin2 = f3(xshtr) Then xmin = xshtr
  
    If xmin > x2 And xmin < x3 Then
        x1 = x2
        x2 = xmin
  ElseIf xmin > xshtr And xmin < x3 Then
        x1 = xshtr
        x2 = xmin
  ElseIf xmin > x1 And xmin < x2 Then
        x2 = xmin
        x3 = x2
    End If

Next
TheRabbit:
  
L = x3 - x1

find4 = L

End Function
Potemkin вне форума Ответить с цитированием
Старый 29.09.2010, 22:28   #2
Potemkin
Новичок
Джуниор
 
Регистрация: 29.09.2010
Сообщений: 2
По умолчанию

Сам, вроде, разобрался...

Function kaprocs(x As Double) As Double
'Ôóíêöèÿ, äëÿ êîòîðîé èùåì ìèíèìóì
Код:
kaprocs = 3 * x ^ 2 + 12 / x ^ 3 - 5

End Function

Function find4(LOW As Double, HIGT As Double) As Double


Dim x1 As Double, x2 As Double, x3 As Double, a1 As Double, a2 As Double
Dim xmin As Double, fmin As Double, fmin2 As Double, L As Double
Dim xshtr As Double

    x1 = LOW
    x3 = HIGT
    x2 = (x3 + x1) / 2

   
For i = 1 To 5
    a1 = (kaprocs(x2) - kaprocs(x1)) / (x2 - x1)
    a2 = 1 / (x3 - x2) * ((kaprocs(x3) - kaprocs(x1)) / (x3 - x1) - (kaprocs(x2) - kaprocs(x1)) / (x2 - x1))
    xshtr = (x2 + x1) / 2 - (a1 / (2 * a2))
        
        If kaprocs(x2) > kaprocs(xshtr) Then
            L = x3 - x1
            If xshtr > x2 Then
            x1 = x2
            x2 = xshtr
            ElseIf xshtr < x2 Then
            x3 = x2
            x2 = xshtr
            End If
        ElseIf kaprocs(xshtr) > kaprocs(x2) Then
            L = x3 - x1
            If xshtr > x2 Then
            x3 = xshtr
            ElseIf xshtr < x2 Then
            x1 = xshtr
            End If
        End If
Next

find4 = L

End Function
Potemkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск оптимума Sparky Помощь студентам 3 13.09.2010 21:57
график квадратичной функции Student_2008 Помощь студентам 0 01.05.2010 14:22
Функции в VBA, поиск макросов. Ант@н Помощь студентам 1 17.11.2009 12:17
Значение квадратичной функции MAKEDON Общие вопросы C/C++ 3 07.03.2009 13:33
Помогите пожалуйста!!! С использованием функции Random сформировать одномерный массив Vanya_www_333 Помощь студентам 1 17.08.2007 13:38