Вопрос задан 28.07.2023 в 11:07. Предмет Информатика. Спрашивает Кулагин Илья.

В чём ошибка (метод простых итераций) делает одну итерацию import math def fun(x): return

(2-0.4*x**2)**0.5+math.cos(x) x1=float(input("Введите приближенное значение Х=")) e=float(input("Введите точность e=")) a=float(input("a=")) b=float(input("b=")) a=abs((fun(a+0.0001)-fun(a))/0.0001) b=abs((fun(b+0.0001)-fun(b))/0.0001) q=max(a,b) q=(1-q)/q iters=0 x0=x1 x1=fun(x0) while abs(x1-x0) <= abs(q*e): iters+=1 x0=x1 x1=fun(x0) print('Точное значение корня:',2.0926) print('Вычисленное значение корня:',x1) print('Число итераций:',iters)
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Маяцкий Егор.

Где задается функция:

def fun(x):

   return ((2-0.4)*x**2**0.5)+math.cos(x)

Поставьте в скобочки.

Кстати, возможно, что вы хотели возвести (0.4*x) во вторую степень, а не 1.6:

return (2-(0.4*x)**2**0.5)+math.cos(x)

Вот так вот. Одни скобочки поворачивают ответ вспять. Если бы вы написали, что вы хотели сделать, я, может, бы "допер". А так..

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

В данном коде возможны две проблемы:

  1. Условие завершения цикла:
python
while abs(x1-x0) <= abs(q*e):

Это условие не совсем верное для метода простых итераций. В методе простых итераций обычно проверяется не разница между текущим и предыдущим значением икса, а разница между текущим и следующим значением икса с учетом функции простой итерации.

Исправим условие, чтобы оно учитывало правильное вычисление следующего значения икса:

python
while abs(fun(x1) - x1) >= e:
  1. Вычисление коэффициента q:
python
a=abs((fun(a+0.0001)-fun(a))/0.0001) b=abs((fun(b+0.0001)-fun(b))/0.0001) q=max(a,b) q=(1-q)/q

Здесь q вычисляется как обратное значение максимальной производной функции fun(x) на отрезке [a, b]. В методе простых итераций условие сходимости требует, чтобы |f'(x)| была меньше единицы на всем интервале.

Исправим вычисление коэффициента q следующим образом:

python
q = max(abs(1 - 0.4 * x ** 2 * (2 - 0.4 * x ** 2) ** (-0.5)), abs(-math.sin(x)))

После внесения этих исправлений, код должен работать правильно для метода простых итераций.

0 0

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос