@KetrinP

Как заставить эту программу посчитать число Лангранжа и вывести его?

import numpy as np
import matplotlib.pyplot as plt

x = np.array([-6, 7, 4, 3], dtype=float)
y = np.array([-297, 249, 33, 9], dtype=float)


def lagranz(x, y, t):
    z = 0
    for j in range(len(y)):
        p1 = 1;
        p2 = 1
        for i in range(len(x)):
            if i == j:
                p1 = p1 * 1;
                p2 = p2 * 1
            else:
                p1 = p1 * (t - x[i])
                p2 = p2 * (x[j] - x[i])
        z = z + y[j] * p1 / p2
    return z


xnew = np.linspace(np.min(x), np.max(x), 100)
ynew = [lagranz(x, y, i) for i in xnew]
plt.plot(x, y, 'o', xnew, ynew)
plt.grid(True)
plt.show()
  • Вопрос задан
  • 103 просмотра
Пригласить эксперта
Ответы на вопрос 1
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Может, что-то такое:
spoiler
import numpy as np
import matplotlib.pyplot as plt

x = np.array([-6, 7, 4, 3], dtype=float)
y = np.array([-297, 249, 33, 9], dtype=float)


def lagranz(x, y, t):
    z = 0
    for j in range(len(y)):
        p1 = 1;
        p2 = 1
        for i in range(len(x)):
            if i == j:
                p1 = p1 * 1;
                p2 = p2 * 1
            else:
                p1 = p1 * (t - x[i])
                p2 = p2 * (x[j] - x[i])
        z = z + y[j] * p1 / p2
    return z


xnew = np.linspace(np.min(x), np.max(x), 100)
ynew = [lagranz(x, y, i) for i in xnew]

counter = 0
step = 9
for xx, yy, tex in zip(xnew, ynew, xnew):
    if counter % step == 0:
        t = plt.text(xx, yy, round(tex, 2), horizontalalignment='right' if xx < 0 else 'left', 
                 verticalalignment='center', fontdict={'color':'red' if xx < 0 else 'green', 'size':14}) 
    counter += 1

plt.plot(x, y, 'o', xnew, ynew)
plt.grid(True)
plt.show()

(Содрано в инфернете, кривовато допилено в части шага отображения).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы