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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2023, 09:34   #1
Марат Петров
Новичок
Джуниор
 
Регистрация: 03.04.2023
Сообщений: 1
По умолчанию Метод дихотомии на Python

Здравствуйте! Нужно написать на Python программу отделения корней их уточнения методом дихотомии.

Задание

Входные данные:
• функция f(x);
• интервал [a,b];
• точность по аргументу и по функции ε1 ε2.
Выходные данные:
• корни ξi , точность;
• значения функции f ( ) ξi ;
• количество итераций n ;
• количество вычислений функции f x ( ) ;
• время счета;
• параметр сходимости

α = |xn+1-xn|/|xn-xn-1|

, где n – порядок сходимости

Вот что сделал

Код:
from math import *
import time

print('Метод дихотомии')

def f(x): #функция
    return 10*cos(x) - 0.1*x**2

def findRoot(f,a,b,eps1,eps2): #функция поиска корня
    n = 1 #количество итераций
    count = 0 #количество вычислений функции f(x)
    c = (a+b)/2
    if f(c) == 0:
        count += 1
        return count,n,c,time.time() - t1,t1
    #while abs(f(c)) > eps1 and abs(b-a)/2 > eps2:
    while a >= min(eps1,eps2) and b >= min(eps1,eps2):
        n += 1
        count += 1
        if f(a)*f(c) < 0:
            b = c
            count += 2
        else:
            a = c
        c = (a+b)/2
    alpha = abs(c-a)/abs(b-a) #параметр сходимости, формула взята с киберфорума
    return count,n,c,alpha

while True:
    a = input('Введите a')
    try:
        a = float(a)
    except:
        continue
    else:
        break

while True:
    b = input('Введите b')
    try:
        b = float(b)
    except:
        continue
    else:
        break

while True:
    eps1 = input('Введите точность по функции')
    try:
        eps1 = float(eps1)
    except:
        continue
    else:
        break

while True:
    eps2 = input('Введите точность по аргументу')
    try:
        eps2 = float(eps2)
    except:
        continue
    else:
        break

h = 0.5

t = time.time() #для записи времени

#дальше идёт отделение корней

x1 = a
x2 = a + h

while x2 <= b:
    if f(x1)*f(x2) < 0:
        count,n,root,alpha = findRoot(f,x1,x2,eps1,eps2)
        '''print('Корень',root)
        print('Функция f(x) от корня',
            f(root)
            )
        print('Количество итераций',n)
        print('Количество вычислений функции f(x)',count)
        print('Порядок сходимости',alpha)'''
    x1 = x2
    x2 = x1+h

print('Корень',root)
print('Функция f(x) от корня',
    f(root)
    )
print('Количество итераций',n)
print('Количество вычислений функции f(x)',count)
print('Порядок сходимости',alpha)

print('Время счёта (с)',time.time() - t)
Вот что ответил преподаватель

Уточнение корней прекращается, когда обе погрешности меньше заданных
значений. Не оптимизировано количество вычислений функции – не исправлено.
Коэффициент сходимости вычисляется не так (см. формулу в задании). Выходных данных
по-прежнему не хватает.

Вот что непонятно

В чём разница между точностью по аргументу и точностью по функции?

Когда прерывать цикл деления на два?

Как вычислить параметр сходимости? Что такое xn+1?
Марат Петров вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод дихотомии funke_monkey Помощь студентам 1 15.11.2012 21:51
Метод перебора, Метод дихотомии, Метод золотого сечения Delphi !!! OneBri Помощь студентам 0 03.10.2012 08:42
метод дихотомии dielk2006 Помощь студентам 2 28.01.2012 10:58
Метод Дихотомии Roland_Lviv_ua Помощь студентам 5 13.06.2010 18:23
Метод дихотомии britva666 Помощь студентам 3 17.06.2009 18:06