1. Главная
  2. Библиотека
  3. Высшая математика
  4. Написать код на python функция 2x2 + 8x + 4 + 22|x-3|,...
Решение задачи на тему

Написать код на python функция 2x2 + 8x + 4 + 22|x-3|, a = -3, b = 4 Найти приближенное значение минимума заданной функции при N = 24 а) методом Фибоначчи б) методом пассивного поиска Вывести теоретическую и фактическую точность приближения для каждого из

  • Высшая математика
  • #Математический анализ
  • #Численные методы
Написать код на python функция 2x2 + 8x + 4 + 22|x-3|, a = -3, b = 4 Найти приближенное значение минимума заданной функции при N = 24 а) методом Фибоначчи б) методом пассивного поиска Вывести теоретическую и фактическую точность приближения для каждого из

Условие:

Написать код на python
функция 2x2 + 8x + 4 + 22|x-3|, a = -3, b = 4 Найти приближенное значение минимума заданной функции при N = 24 а) методом Фибоначчи б) методом пассивного поиска
Вывести теоретическую и фактическую точность приближения для каждого из методов

Решение:

Ниже приведён готовый пример кода на Python, который решает задачу “Найти приближённое значение минимума функции

f(x) = 2·x² + 8·x + 4 + 22·|x – 3|

на отрезке [–3; 4] с использованием N = 24 итераций двумя методами: а) методом Фибоначчи, б) методом пассивного (равномерного) поиска. Код также выводит теоретическую точность (размер неопределённости, то есть длину конечного интервала или расстояние между соседними точками) и фактическую точность (абсолютную погрешность, то есть разность между...

Решение задачи нахождения минимума функции: f(x) = 2x + 8x + 4 + 22|x–3| на отрезке [a,b] = [–3, 4] с количеством итераций N = 24. Реализованы 2 метода: а) метод Фибоначчи б) метод пассивного поиска (равномерный перебор) Выводятся теоретическая точность (по неопределённому интервалу) и фактическая точность (абсолютная ошибка относительно истинного минимума x = 3).

def f(x):

Заданная функция.

return 2 * x**2 + 8 abs(x - 3)

xrue = 3 ftrue) # должно получиться 46

def fibonacciumbers(n):

Функция генерирует список Fibonacci чисел от F[0] = 1, F[1] = 1, ... Всего n чисел.

fib = [1, 1] while len(fib) n: fib.append(fib[-1] + fib[-2]) return fib

def fibonacciearch(a, b, N, f):

Функция поиска минимума методом Фибоначчи с количеством итераций N. Аргументы: a, b - границы отрезка; N - число итераций (для определения точности); f - функция, минимум которой ищется. Возвращает: xin: найденная точка минимума (среднее финального отрезка) intervalength: длина окончательного отрезка неопределённости (теоретическая точность).

Для алгоритма потребуется N+1 число Фибоначчи.

fib = fibonacciumbers(N + 1) L = b - a

Первый шаг: вычисление двух внутренних точек

x1 = a + (F[N-2]/F[N])(b – a)

x1 = a + (fib[N - 2] / fib[N]) * L x2 = a + (fib[N - 1] / fib[N]) * L f1 = f(x1) f2 = f(x2)

Выполняем итерационный процесс:

for k in range(1, N - 1):

Сравниваем значения функции в сгенерированных точках

if f1 f2:

Оптимум находится в правой части

a = x1 # левая граница сдвигается x1 = x2 # старая x2 становится новой x1 f1 = f2

Вычисляем новую точку x2 на основании оставшегося числа Фибоначчи

L = b - a x2 = a + (fib[N - k - 1] / fib[N - k]) * L f2 = f(x2) else:

Оптимум находится в левой части

b = x2 x2 = x1 # x1 переносим в x2 f2 = f1 L = b - a x1 = a + (fib[N - k - 2] / fib[N - k]) * L f1 = f(x1)

После завершения итераций окончательный интервал:

finalnterval = b - a

В качестве приближённого минимума берём центр оставшегося отрезка:

xin = (a + b) / 2 return xinterval

def passiveearch(a, b, N, f):

Метод пассивного (равномерного) поиска: Рассматриваем N равномерно распределённых точек на отрезке. Аргументы: a, b - границы отрезка. N - количество точек (итераций). f - функция. Возвращает: xin: найденная точка минимума; delta: расстояние между соседними точками (теоретическая точность метода).

Формируем N равномерно распределённых точек, включая концы.

points = [a + i*(b - a)/(N - 1) for i in range(N)] falues = [f(x) for x in points]

Индекс минимального значения:

minvalues.index(min(falues)) xindex] delta = (b - a) / (N - 1) # шаг между точками return xin, delta

if == : a, b = -3, 4 # Границы отрезка N = 24 # Число итераций/точек

print(Аналитически найденный минимум:) print(x = {:.6f}, f(x) = {:.6f}.format(xtrue)) print(--------------------------------------------------)

Метод Фибоначчи

xfib, intervalsearch(a, b, N, f) ffib = f(xfib)

Фактическая точность – отклонение найденного x от истинного минимума x = 3

errormintrue)

print(Метод Фибоначчи:) print(Приближённое значение минимума: x = {:.6f}, f(x) = {:.6f}.format(xfib, ffib)) print(Теоретическая точность (длина финального интервала): {:.6f}.format(intervalength)) print(Фактическая точность (|x - 3|): {:.6f}.format(errorib)) print(--------------------------------------------------)

Метод пассивного поиска (равномерного перебора)

xpass, delta = passiveearch(a, b, N, f) fpass = f(xpass) errormintrue)

print(Метод пассивного поиска:) print(Приближённое значение минимума: x = {:.6f}, f(x) = {:.6f}.format(xpass, fpass)) print(Теоретическая точность (шаг между точками): {:.6f}.format(delta)) print(Фактическая точность (|x - 3|): {:.6f}.format(errorass))

Пояснение по коду:

  1. Функция f(x) реализует заданное выражение.
  2. Функция fibonacciumbers(n) генерирует последовательность чисел Фибоначчи, которая используется в алгоритме.
  3. В функции fibonacciearch() используется стандартный алгоритм поиска минимума методом Фибоначчи. В каждом шаге отрезок [a,b] сокращается, а точки рассчитываются с использованием отношений соответствующих чисел Фибоначчи. Теоретическая точность здесь определяется как длина окончательного интервала неопределённости.
  4. Метод passiveearch() строит N равномерно распределённых точек в отрезке [a,b] и выбирает ту, где функция принимает минимальное значение. Теоретическая точность – расстояние между соседними точками.
  5. В основной части программы выводятся аналитическое решение, а также результаты обоих методов с расчётом теоретической и фактической точности.

Сохраните этот код в файл (например, minearch.py) и запустите его.

Выбери предмет