1. Главная
  2. Библиотека
  3. Высшая математика
  4. Написать простой и понятный код для новичка на языке phyton...
Решение задачи на тему

Написать простой и понятный код для новичка на языке phyton, не использовать сложные конструкции: Методом простой итерации найти все вещественные корни уравнения -0.8x3+2.3x2+14.1x-3.7 с точностью E=10^-13. На всех трех отрезках локализации. Предусмотреть

  • Высшая математика
  • #Математический анализ
  • #Численные методы
Написать простой и понятный код для новичка на языке phyton, не использовать сложные конструкции: Методом простой итерации найти все вещественные корни уравнения -0.8x3+2.3x2+14.1x-3.7 с точностью E=10^-13. На всех трех отрезках локализации. Предусмотреть

Условие:

Написать простой и понятный код для новичка на языке phyton, не использовать сложные конструкции: Методом простой итерации найти все вещественные корни уравнения -0.8x3+2.3x2+14.1x-3.7 с точностью E=10^-13. На всех трех отрезках локализации. Предусмотреть возможность подсчета количества итераций. Вывести диапазон изменения производной на каждом отрезке локализации

Решение:

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

–0.8·x³ + 2.3·x² + 14.1·x – 3.7 = 0

с точностью E = 1e–13 на трёх отрезках локализации корней. Код не использует сложных конструкций, а для наглядности снабжён комментариями и пошаговыми расчётами, включая подсчёт количества итераций и вывод диапазона изменения производной (то есть phi′(x)) на каждом отрезке.

Общая идея такова. Чтобы применить метод простой итерации, мы приводим уравнение к виду   x = φ(x) например, записывая   φ(x) = x + c·f(x), где f(x)= –0.8·x³+2.3·x²+...

def f(x): return -0.8x**3 + 2.3x**2 + 14.1*x - 3.7

def frime(x): return -2.4x**2 + 4.6x + 14.1

def simpleteration(a, b, c, E):

Функция phi(x) = x + c * f(x)

def phi(x): return x + c * f(x)

Начальное приближение выбираем как середину отрезка

xrev = (a + b) / 2.0 iterations = 0 while True: xprev) iterations += 1 if abs(xprev) E: # условие останова break xnext return xext, iterations

def derivativeange(a, b, c):

φ(x) = 1 + c * f(x)

def phirime(x): return 1 + c * frime(x)

Вычисляем значения на концах отрезка

values = [phiprime(b)]

Для поиска экстремума внутри отрезка рассмотрим вершину функции f(x)

f(x) = -2.4x + 14.1

Вершина x = -B/(2A), где A = -2.4, B = 4.6

xertex = -4.6 / (2 * -2.4) # = 4.6/4.8 if a = xertex = b: values.append(phivertex))

return min(values), max(values)

E = 1e-13 # требуемая точность

a1, b1 = -10, -2 c1 = 0.007 # подобрано вручную для сходимости root1, iter1 = simpleteration(a1, b1, c1, E) derivmax1 = derivativeange(a1, b1, c1) print(Интервал [{}, {}]:.format(a1, b1)) print( Найденный корень: {:.15f}.format(root1)) print( Количество итераций: {}.format(iter1)) print( Диапазон значений phi(x): от {:.6f} до {:.6f}.format(derivmax1)) print()

a2, b2 = 0, 1 c2 = -0.06 # для положительного f(x) подбираем отрицательное c root2, iter2 = simpleteration(a2, b2, c2, E) derivmax2 = derivativeange(a2, b2, c2) print(Интервал [{}, {}]:.format(a2, b2)) print( Найденный корень: {:.15f}.format(root2)) print( Количество итераций: {}.format(iter2)) print( Диапазон значений phi(x): от {:.6f} до {:.6f}.format(derivmax2)) print()

a3, b3 = 5, 10 c3 = 0.005 # аналогично, подобрано для сходимости root3, iter3 = simpleteration(a3, b3, c3, E) derivmax3 = derivativeange(a3, b3, c3) print(Интервал [{}, {}]:.format(a3, b3)) print( Найденный корень: {:.15f}.format(root3)) print( Количество итераций: {}.format(iter3)) print( Диапазон значений phi(x): от {:.6f} до {:.6f}.format(derivmax3)) print()

Пояснение пошагово:

  1. Задаём функцию f(x) и её производную f(x) для исходного уравнения.
  2. Преобразуем уравнение к виду x = φ(x) = x + c·f(x). Константа c выбирается отдельно для каждого отрезка, чтобы выполнялось условие сходимости (|φ(x)| 1 на всём отрезке).
  3. Функция simpleteration(a, b, c, E) начинает итерационный процесс с начального приближения (середина отрезка) и продолжает, пока разность между последовательными приближениями не станет меньше E. При этом считается число итераций.
  4. Функция derivativeange(a, b, c) вычисляет φ(x) = 1 + c·f(x) на концах отрезка и, если вершина функции f(x) (которая для квадратичной функции находится по формуле x = –B/(2A)) попадает в отрезок, то и там.
  5. Далее для каждого из трёх отрезков ([-10,-2], [0,1], [5,10]) запускается метод с соответствующим значением c, и выводятся найденный корень, число итераций и диапазон изменения φ(x).

Код использует только базовые конструкции Python, что делает его понятным для начинающих.

Запустив этот код, вы получите решение задачи методом простой итерации с отображением всей необходимой информации.

Не нашел нужную задачу?

Воспользуйся поиском

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