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

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

17.10.2022, 23:38. Показов 5140. Ответов 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
5515 / 2868 / 571
Регистрация: 07.11.2019
Сообщений: 4,758
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
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru