Как реализовать алгоритм Лагранжа в цикле for для вычисления координат с помощью Python - PullRequest
1 голос
/ 10 июня 2019

Я написал следующий код для вычисления полиномиального уравнения для заданного набора координат X и Y с использованием алгоритма Лагранжа. Уравнение реализовано с использованием def и, кажется, работает правильно. Тем не менее, я пытаюсь использовать полученное полиномиальное уравнение, чтобы получить координаты y для заданного диапазона значений X, чтобы я мог построить путь для робота. Например. если диапазон составляет от 1 до 15 включительно, программа должна рассчитать соответствующие значения Y и построить каждую пару координат на графике. Я не уверен, как передать значение X в def и получить правильное значение Y - я уверен, что это относительно просто, но мой разум совершенно пуст! Любая помощь будет принята с благодарностью!

import sympy

from functools import *
from sympy import *
X = Symbol('X')

def Lagrange(points):

    P=[reduce((lambda x,y: x*y),[(X-points[j][0])/(points[i][0] - points[j][0]) for j in range(len(points)) if i != j])*points[i][1] for i in range(len(points))]

    return sum(P)

points=[[0, 1], [1, 0], [3, 16], [-1, 16]]
print(points)
P=Lagrange(points)
print("\nLagrange equation :\n")
print(P)

1 Ответ

0 голосов
/ 10 июня 2019

Вы можете использовать subs для вычисления вашей функции для диапазона значений x.Один из способов показан ниже.Затем вы можете визуализировать, используя matplotlib

import matplotlib.pyplot as plt

# Your code

output = [P.subs({X: i}) for i in range(1, 16)]
plt.plot(range(1, 16), output)
plt.show()

Альтернативой является использование evalf для оценки вашей функции при заданном X значении

output = [P.evalf(subs={X:i}) for i in range(1, 16)]

enter image description here

...