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

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

17.10.2022, 23:38. Показов 5418. Ответов 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 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru