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

Интерполяционная формула Ньютона

17.10.2022, 23:38. Показов 5363. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задана таблица значений функции
y=exp^x

Пользуясь одной из линейных интерполяционных формул Ньютона, вычислить из
точностью до 10-4
значение у для указанного значения аргумента х и произвести оценку
остаточного члена R

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
plt.style.use('seaborn-poster')
 
 
def table(x_, y):
    """
         Получить таблицу интерполяции Ньютона
         : param x_: значение списка x
         : param y: значение списка y
         : return: вернуть таблицу интерполяции
    """
    quotient = [[0] * len(x_) for _ in range(len(x_))]
    for n_ in range(len(x_)):
        quotient[n_][0] = y[n_]
    for i in range(1, len(x_)):
        for j in range(i, len(x_)):
            # j-i определяет диагональные элементы
            quotient[j][i] = (quotient[j][i - 1] - quotient[j - 1][i - 1]) / (x_[j] - x_[j - i])
    return quotient
 
 
def get_corner(result):
    """
         Получить диагональные элементы через таблицу интерполяции
         : param result: результат таблицы интерполяции
         : return: диагональный элемент
    """
    link = []
    for i in range(len(result)):
        link.append(result[i][i])
    return link
 
 
def newton(data_set, x_p, x_7):
    """
         Результат интерполяции Ньютона
         : param data_set: диагональ решаемой задачи
         : param x_p: входное значение
         : param x_7: исходное значение списка x
         : return: результат интерполяции Ньютона
    """
    result = data_set[0]
    for i in range(1, len(data_set)):
        p = data_set[i]
        for j in range(i):
            p *= (x_p - x_7[j])
        result += p
    return result
 
 
# ====================================================== ============= Нарисуйте картинку ================================== =================
def draw_picture(x_list, y_list, node):
    plt.title("newton")
    plt.xlabel("x")
    plt.ylabel("y")
    # plt.plot(x_list, y_list, color="red")
    for i in range(len(x_list)):
        plt.scatter(x_list[i], y_list[i], color="purple", linewidths=2)
    plt.scatter(node[0], node[1], color="blue", linewidth=2)
    plt.show()
 
 
if __name__ == '__main__':
    x = 0.518
    x_1 = [0.50, 0.51, 0.52, 0.53]
    y_1 = [1.6487, 1.6653, 1.6820, 1.6989]
    middle = table(x_1, y_1)
    n = get_corner(middle)
    newton = newton(n, x, x_1)
    print("«Истинное значение: {}»".format(np.exp(x)))
    print("«Интерполяция Ньютона: {}»".format(newton))
    # Рисование
    draw_picture(x_1, y_1, (x, newton))
Подскажите все ли правильно делаю в строке:
Python
1
    print("«Истинное значение: {}»".format(np.exp(x)))
Верно ли я делаю вывод?
Буду благодарен за помощь!
Миниатюры
Интерполяционная формула Ньютона  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.10.2022, 23:38
Ответы с готовыми решениями:

Интерполяционная функция Ньютона
Используя интерполяционную формулу Ньютона, вычислить значение функции при заданных значениях аргумента с точностью до 0.001 Решение...

Интерполяционная формула Ньютона
Нужно написать любую программу, используя интерполяционные формулы Ньютона. Материал почитал, вроде даже пример нашёл решённый, а как всё в...

Интерполяционная формула Ньютона
Здравствуйте! Помогите пожалуйста, почему не сходится последние 2 числа x(Выделены желтым). Все в excel файле. Формулы все там есть.

20
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,760
18.10.2022, 08:23
Без импортов даже смотреть не буду, т.к. считаю неуважением выкладывать заведомо нерабочий код.
Хорошо хоть код не скриншотом.
0
8 / 5 / 1
Регистрация: 15.12.2020
Сообщений: 349
18.10.2022, 10:09  [ТС]
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
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('seaborn-poster')
 
 
def table(x_, y):
    """
         Получить таблицу интерполяции Ньютона
         : param x_: значение списка x
         : param y: значение списка y
         : return: вернуть таблицу интерполяции
    """
    quotient = [[0] * len(x_) for _ in range(len(x_))]
    for n_ in range(len(x_)):
        quotient[n_][0] = y[n_]
    for i in range(1, len(x_)):
        for j in range(i, len(x_)):
            # j-i определяет диагональные элементы
            quotient[j][i] = (quotient[j][i - 1] - quotient[j - 1][i - 1]) / (x_[j] - x_[j - i])
    return quotient
 
 
def get_corner(result):
    """
         Получить диагональные элементы через таблицу интерполяции
         : param result: результат таблицы интерполяции
         : return: диагональный элемент
    """
    link = []
    for i in range(len(result)):
        link.append(result[i][i])
    return link
 
 
def newton(data_set, x_p, x_7):
    """
         Результат интерполяции Ньютона
         : param data_set: диагональ решаемой задачи
         : param x_p: входное значение
         : param x_7: исходное значение списка x
         : return: результат интерполяции Ньютона
    """
    result = data_set[0]
    for i in range(1, len(data_set)):
        p = data_set[i]
        for j in range(i):
            p *= (x_p - x_7[j])
        result += p
    return result
 
 
# ====================================================== ============= Нарисуйте картинку ================================== =================
def draw_picture(x_list, y_list, node):
    plt.title("newton")
    plt.xlabel("x")
    plt.ylabel("y")
    # plt.plot(x_list, y_list, color="red")
    for i in range(len(x_list)):
        plt.scatter(x_list[i], y_list[i], color="purple", linewidths=2)
    plt.scatter(node[0], node[1], color="blue", linewidth=2)
    plt.show()
 
 
if __name__ == '__main__':
    x = 0.518
    x_1 = [0.50, 0.51, 0.52, 0.53]
    y_1 = [1.6487, 1.6653, 1.6820, 1.6989]
    middle = table(x_1, y_1)
    n = get_corner(middle)
    newton = newton(n, x, x_1)
    print("«Истинное значение: {}»".format(np.exp(x)))
    print("«Интерполяция Ньютона: {}»".format(newton))
    # Рисование
    draw_picture(x_1, y_1, (x, newton))
0
8 / 5 / 1
Регистрация: 15.12.2020
Сообщений: 349
27.10.2022, 16:29  [ТС]
Нужна помощь!пж!
Подскажите как к этому коду реализовать функцию которая будет делать оценку
остаточного члена Rn
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
28.10.2022, 10:59
Цитата Сообщение от VictorVAlduin Посмотреть сообщение
Подскажите как к этому коду реализовать функцию которая будет делать оценку
остаточного члена Rn
Окей гугл, остаточный член в формуле Ньютона.
2
8 / 5 / 1
Регистрация: 15.12.2020
Сообщений: 349
29.10.2022, 20:50  [ТС]
Я и без гугла знаю математически как это все считается у меня проблема в реализации.
Не понимаю как оценку в коде прописать и сам реализовать остаточный член тут
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
29.10.2022, 22:43
Цитата Сообщение от VictorVAlduin Посмотреть сообщение
Я и без гугла знаю математически как это все считается
Ну напишите здесь.
Я не понимаю, в чем проблема реализации простенькой формулы
1
8 / 5 / 1
Регистрация: 15.12.2020
Сообщений: 349
30.10.2022, 12:23  [ТС]
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
import numpy as np
import matplotlib.pyplot as plt
import mplcyberpunk
plt.style.use("cyberpunk")
 
 
# plt.style.use('seaborn-poster')
 
 
def table(x_, y):
    """
         Получить таблицу интерполяции Ньютона
         : param x_: значение списка x
         : param y: значение списка y
         : return: вернуть таблицу интерполяции
    """
    quotient = [[0] * len(x_) for _ in range(len(x_))]
    for n_ in range(len(x_)):
        quotient[n_][0] = y[n_]
    for i in range(1, len(x_)):
        for j in range(i, len(x_)):
            # j-i определяет диагональные элементы
            quotient[j][i] = (quotient[j][i - 1] - quotient[j - 1][i - 1]) / (x_[j] - x_[j - i])
    return quotient
 
 
def get_corner(result):
    """
         Получить диагональные элементы через таблицу интерполяции
         : param result: результат таблицы интерполяции
         : return: диагональный элемент
    """
    link = []
    for i in range(len(result)):
        link.append(result[i][i])
    return link
 
 
def newton(data_set, x_p, x_7):
    """
         Результат интерполяции Ньютона
         : param data_set: диагональ решаемой задачи
         : param x_p: входное значение
         : param x_7: исходное значение списка x
         : return: результат интерполяции Ньютона
    """
    result = data_set[0]
    for i in range(1, len(data_set)):
        p = data_set[i]
        for j in range(i):
            p *= (x_p - x_7[j])
        result += p
    return result
 
 
def draw_picture(x_list, y_list, node):
    fig, ax = plt.subplots(figsize=(10, 6))
    plt.grid(which='both', linewidth=1.5, linestyle='-', color='gray')
    ax.tick_params(which='major', length=8, width=2)
    ax.tick_params(which='minor', length=8, width=2)
    ax.minorticks_on()
    ax.grid(which='major',
            linewidth=2)
    ax.grid(which='minor',
            linestyle=':')
    plt.title("Newton")
    plt.xlabel("x")
    plt.ylabel("y")
    plt.plot(x_list, y_list, marker='D')
    # for i in range(len(x_list)):
    #     plt.scatter(x_list[i], y_list[i], color="purple", linewidths=2)
    plt.scatter(node[0], node[1], color="blue", edgecolors='red', linewidth=2, s=60)
    legend = plt.legend(["Інтерполяційна формула Ньютона", "Задана точка"], title='Legend',
                        loc='upper left', shadow=True, fontsize='x-large',
                        frameon=True, title_fontsize=15, framealpha=1)
    frame = legend.get_frame()
    frame.set_facecolor('black')
    frame.set_edgecolor('red')
    mplcyberpunk.add_glow_effects()
    mplcyberpunk.add_gradient_fill(alpha_gradientglow=0.5)
    plt.show()
    fig.savefig('newton_.png', dpi=300, bbox_inches='tight')
 
 
if __name__ == '__main__':
    x = 0.518
    x_1 = [0.50, 0.51, 0.52, 0.53]
    y_1 = [1.6487, 1.6653, 1.6820, 1.6989]
    middle = table(x_1, y_1)
    n = get_corner(middle)
    newton = newton(n, x, x_1)
    print("«True value: {}»".format(np.exp(x)))
    print("«Interpolation Newton: {}»".format(newton))
    numb = 1
    h = x_1[1] - x_1[0]
    for i in range(1, len(x_1)):
        q = x_1[i] - x_1[0]
        R_n = h*(q * (q - 1) * (q - 2) / 6) * np.exp(x_1[i+1])
        print(R_n)
    # Рисование
    draw_picture(x_1, y_1, (x, newton))
Проиходит следующая ошибка. Вроде бы все же правильно реализую
0
8 / 5 / 1
Регистрация: 15.12.2020
Сообщений: 349
30.10.2022, 12:25  [ТС]
Вот руками посчитано
Миниатюры
Интерполяционная формула Ньютона   Интерполяционная формула Ньютона  
0
8 / 5 / 1
Регистрация: 15.12.2020
Сообщений: 349
30.10.2022, 13:08  [ТС]
Добавлено через 40 минут
Извиняюсь.
Только щас увидел что не добавилась ошибка
Так вот следующая ошибка
Python
1
2
3
4
5
h = x_1[1] - x_1[0]
    for i in range(1, len(x_1)):
        q = (0.518 - x_1[0])/h
        R_n = h*(q * (q - 1) * (q - 2) / 6) * np.exp(x_1[i+1])
        print(R_n)

Python
1
2
 R_n = h*(q * (q - 1) * (q - 2) / 6) * np.exp(x_1[i+1])
IndexError: list index out of range
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
30.10.2022, 14:50
Лучший ответ Сообщение было отмечено VictorVAlduin как решение

Решение

Python
1
for i in range(1, len(x_1)-1):
Только непонятно что вы здесь считаете.
n остаточных членов?
1
8 / 5 / 1
Регистрация: 15.12.2020
Сообщений: 349
30.10.2022, 14:55  [ТС]
А можете обьяснить почему так происходит?Почему такая ошибка я читал туториал на stackoverflow но там не с моим случаем связано

Добавлено через 25 секунд
Да я считаю остаточный член
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
30.10.2022, 15:40
VictorVAlduin, пусть в списке n значений. Их индексы от 0 до n-1. i пробегает от 1 до n-1. При i = n-1 вы берете x[i+1], т.е. x[n] а такого индекса нет.

Цитата Сообщение от VictorVAlduin Посмотреть сообщение
Да я считаю остаточный член
Вы выводите n членов. Я не против демократии и свободы выбора, но здесь кажется чересчур
0
8 / 5 / 1
Регистрация: 15.12.2020
Сообщений: 349
30.10.2022, 15:53  [ТС]
Ну можна так чтобы n-ые не выводить если вы это имели ввиду
Python
1
2
3
4
5
6
 
for i in range(1, len(x_1) - 1):
         h = x_1[i + 1] - x_1[i]
         q = (0.518 - x_1[0]) / h
         R_n = h * (q * (q - 1) * (q - 2) / 6) * np.exp(x_1[i + 1])
print(f'{abs(R_n)=}')
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
30.10.2022, 16:27
А цикл зачем тогда?
0
8 / 5 / 1
Регистрация: 15.12.2020
Сообщений: 349
30.10.2022, 16:29  [ТС]
Ну вообще нужна была оценка остаточного члена поэтому я и сделал цикл
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
30.10.2022, 17:49
VictorVAlduin, ну и как цикл помог?
0
8 / 5 / 1
Регистрация: 15.12.2020
Сообщений: 349
30.10.2022, 20:41  [ТС]
Ну так я без цикла не смог бы пройтись по индексам там та формула остаточного членa:

В моем случае линейная интерполяция
Миниатюры
Интерполяционная формула Ньютона  
0
8 / 5 / 1
Регистрация: 15.12.2020
Сообщений: 349
30.10.2022, 20:49  [ТС]
Хотя знаете я щас увидел допустил ошибку одну

Добавлено через 5 минут
Python
1
2
3
4
5
6
 
for i in range(1, len(x_1) - 1):
        h = x_1[i + 1] - x_1[i]
        q = (0.518 - x_1[0]) / h
        R_n = h**(i+1) * (q * (q - 1) * (q - i) / math.factorial(i+1)) * np.exp(x_1[i + 1])
print(f'{abs(R_n)=}')
По хорошему там где экспонента производная.Скажем если был бы синус то как нужно было бы вот этот индексированный индекс указывать в производной следуя с формулы?
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
30.10.2022, 21:10
Всё - одна сплошная чушь.
Как вы вообще понимаете задачу интерполяции и данную задачу в частности?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.10.2022, 21:10
Помогаю со студенческими работами здесь

Интерполяционная формула Ньютона
Всем доброго дня, у меня уже и вечера. Хочу обратиться к знающим людям, в оказании помощи. Честно говоря ни когда не работал в среде...

Интерполяционная формула Ньютона
Объясните пожалуйста как сделать это задание(желательно на понятном языке и с подстановками в формулу)

Вторая интерполяционная формула Ньютона
Добрый вечер! У меня есть программа в маткаде для второй формулы, но результат не совпадает с нужным. В чем проблема? Должно быть 2.63...

Первая интерполяционная формула Ньютона
Нужно написать программу, которая проверяет правильность этой формулы для заданных значений. ...

Обратная интерполяционная формула Ньютона
Всем добрый день. Необходимо написать программу, представляющую функцию в виде обратной интерполяционной формулы Ньютона и нарисовать ее...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru