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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.07.2022, 11:54   #1
Condit
Новичок
Джуниор
 
Регистрация: 25.07.2022
Сообщений: 4
По умолчанию Метод простых итераций, не выводит значение

Код на Python. В чём причина? Исходное уравнение: x^2-5x+4=0

Код:
import math

def Function(x):
    return (x*x+4) / 5

def Iterations(X, dX, Xlast):
    X = -3.0
    print(X)
    dX = 1.7976931348623157e+308
    while (math.pow(dX, 2) > 1e-13):
        Xlast = X
        X = Function(Xlast)
        dX = X - Xlast
        print(X)
Condit вне форума Ответить с цитированием
Старый 25.07.2022, 12:31   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

(x*x+4)/5 не эквивалентно x^2-5x+4.
x*x-5*x+4
macomics вне форума Ответить с цитированием
Старый 25.07.2022, 13:13   #3
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Что бы функции что-то считали, их надо вызывать.
Например:
Код:
Iterations(-3, ...)
Не стоит задавать dX. Его можно и нужно получить в первом приближении.
Код:
import math

def f(x):
    return (x*x+4) / 5

def Iterations(X):
    print(X)
    dX = X - f(X)
    while (dX**2 > 1e-13):
        Xlast = X
        X = f(Xlast)
        dX = X - Xlast
        print(X)

Iterations(-3)


Ненужные параметры убрал. Решение сходится к X = 1.
Но у уравнения два корня: 1 и 4.
Как получить второй корень?
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 25.07.2022, 13:33   #4
Condit
Новичок
Джуниор
 
Регистрация: 25.07.2022
Сообщений: 4
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
(x*x+4)/5 не эквивалентно x^2-5x+4.
x*x-5*x+4
Это приведение относительно x
Condit вне форума Ответить с цитированием
Старый 25.07.2022, 13:33   #5
Condit
Новичок
Джуниор
 
Регистрация: 25.07.2022
Сообщений: 4
По умолчанию

ViktorR, благодарю за помощь. Буду думать
Condit вне форума Ответить с цитированием
Старый 25.07.2022, 13:35   #6
Condit
Новичок
Джуниор
 
Регистрация: 25.07.2022
Сообщений: 4
По умолчанию

А, ну в моём коде и задумано, что считается только 1 корень)) А как второй найти, я и не знаю
Condit вне форума Ответить с цитированием
Старый 25.07.2022, 13:46   #7
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Или взять другое начальное значение или изменить функцию на f(x)/(x-x1), где x1 - первый найденный корень.
FPaul вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод простых итераций Varyana Помощь студентам 0 20.11.2015 22:15
метод простых итераций хаскер Паскаль, Turbo Pascal, PascalABC.NET 6 30.12.2012 03:30
Метод простых итераций Su-34 Помощь студентам 0 07.12.2011 16:11
метод простых итераций, с++ kaljan775 Помощь студентам 0 08.03.2011 16:55
Метод простых итераций bloodargus Общие вопросы C/C++ 0 24.11.2010 19:20