Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 21.07.2022
Сообщений: 17

Как оптимизировать количество вычислений функции? Написать код на Python для отделения корней

03.04.2023, 10:34. Показов 1224. Ответов 1

Студворк — интернет-сервис помощи студентам
Здравствуйте! Вчера я думал, что для завершения работы над контрольной достаточно будет спросить, как вычислить порядок сходимости, но сейчас понял, что нет.

Задание - написать код на Python для отделения корней их уточнения методом дихотомии.

Входные данные:

функция f(x);
интервал [a,b];
точность по аргументу и по функции ε1 ε2.

Выходные данные:

корни ξi , точность;
значения функции f ( ξi) ;
количество итераций n;
количество вычислений функции f(x) ;
время счета;
параметр сходимости

a = |xn+1-xn|/|xn-xn-1|

Преподаватель не принял и вот что ответил:

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

Насчёт строк, где alpha - это я всё ещё не могу понять, как вычислить параметр сходимости, какие переменные и как использовать.

А ещё я запутался в условиях окончания итерации.

Вот как-то так.
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
from math import *
import time
 
print('Метод дихотомии')
 
def f(x): #функция
    return 10*cos(x) - 0.1*x**2
 
def findRoot(f,a,b,eps1,eps2): #функция поиска корня
    roots = []
    count = 0 #количество вычислений функции f(x)
    c = (a+b)/2
    roots.append(c)
    n = 1 #количество итераций
    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):
    #while (b-a)/2 >= min(eps1,eps2):
        n += 1
        count += 1
        if f(a)*f(c) < 0:
            b = c
            count += 2
        else:
            a = c
        c = (a+b)/2
        roots.append(c)
    #alpha = abs(c-a)/abs(b-a) #параметр сходимости, формула взята с киберфорума
    #alpha = (log()-log())/log()
    alpha
    #https://www.cyberforum.ru/cpp-beginners/thread2816840.html
    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)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.04.2023, 10:34
Ответы с готовыми решениями:

Написать программу для графического отделения действительных корней нелинейного уравнения
Уравнение x^4 +7*x^3-x+12=0 Помогите решить методом Ньютона при заданной точности E=10^-3 Метод Ньютона прикрепил картинкой

Написать программу отделения корней
Всем привет, просить крайне не удобно но все же.. Учусь на первом курсе института. дали задание по высшей математике. В паскале не силен,...

Написать программу отделения корней их уточнения одним из нижеперечисленных методов
Всем привет! Написать программу отделения корней их уточнения одним из нижеперечисленных методов (любым): а) методом дихотомии; б)...

1
29 / 19 / 10
Регистрация: 24.04.2023
Сообщений: 62
25.04.2023, 00:12
Преподаватель указал на несколько проблем в вашем коде, которые могут быть улучшены:

Оптимизация количества вычислений функции
Вычисление коэффициента сходимости
Уточнение условий окончания итерации
Недостаточное количество выходных данных

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
from math import *
import time
 
print('Метод дихотомии')
 
def f(x): #функция
    return 10*cos(x) - 0.1*x**2
 
def findRoot(f,a,b,eps1,eps2): #функция поиска корня
    count = 0 #количество вычислений функции f(x)
    c = (a+b)/2
    n = 1 #количество итераций
    while abs(b-a)/2 > max(eps1, eps2):
        count += 2
        if f(a)*f(c) < 0:
            b = c
        else:
            a = c
        c = (a+b)/2
        n += 1
    count += 1
    return c, f(c), n, count, abs(c-a)/(b-a) # возвращаем корень, значение функции в корне, количество итераций, количество вычислений f(x), и коэффициент сходимости
 
t1 = time.time() # для записи времени
 
while True:
    try:
        a = float(input('Введите a: '))
        b = float(input('Введите b: '))
        eps1 = float(input('Введите точность по функции: '))
        eps2 = float(input('Введите точность по аргументу: '))
    except ValueError:
        print('Неверный формат ввода, попробуйте еще раз')
    else:
        break
 
h = 0.5
 
roots = []
 
x1 = a
x2 = a + h
 
while x2 <= b:
    if f(x1)*f(x2) < 0:
        root, value, n, count, alpha = findRoot(f, x1, x2, eps1, eps2)
        roots.append((root, value, n, count, alpha))
    x1 = x2
    x2 = x1+h
 
for root, value, n, count, alpha in roots:
    print('Корень:', root)
    print('Значение функции f(x) в корне:', value)
    print('Количество итераций:', n)
    print('Количество вычислений функции f(x):', count)
    print('Порядок сходимости:', alpha)
    print()
 
print('Время счёта (с):', time.time() - t1)
Обновленный код устраняет ошибки и вычисляет коэффициент сходимости в соответствии с формулой из задания. Также он оптимизирует количество вычислений функции, вычисляет все необходимые данные и уточняет условия окончания итерации.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.04.2023, 00:12
Помогаю со студенческими работами здесь

Как правильно написать (оптимизировать) код для меню?
Есть менюшка из заголовков, сам список выежает при нажатии на заголовок (метод .slideToggle ). Назначил каждому списку и заголовку свои...

Написать код функции на Python для проверки соответствий
Пользователь должен ввести Время в формате HH:MM(:SS), а программа проверить на соответствие

Разработка программы для отделения корней аналитически и уточнения одного методом хорд с точностью до 0.001
Помогите срочно, в моём училище не было паскаля уже как год и дали курсач по нему, а сам на вэб перешёл для себя: Разработка программы...

Написать код уточнения значения корня (корней) функции комбинированным методом хорд и секущих
Здравствуйте, надо написать код уточнения значения корня(корней) функции( x^3 - 6x + 3 ) комбинированным методом хорд и секущих, пытался...

Построить график функции f (x); Определить количество корней и их примерное значение или диапазоны поиска корней
Здравствуйте! Посмотрите, пожалуйста, в чем мои ошибки (ругается на 3-ю и 4-ю строки). Задание, в общем, таковое: 1) Построить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru