Мне нужно построить полиномиальную функцию, например a_0 + a_1 x + a_2 x ^ 2 ... Я пытаюсь выполнить весь процесс интерполяции. У меня есть это:
def Create_F(Numero, Array):
Y = lambda x: x
Lista = list(Array)
F_x = []
for i in range(Numero):
G_x = lambda x: eval(Lista[i]*Y^i)
F_x.append(G_x)
return F_x
И если я использую это, я не получу ничего, что поможет:
Number = 2
ma = np.array([[1, 1],
[1, 2]])
ly = np.array([8, -3])
idk = Create_F(Number, ly)
print(idk)
Я не знаю, как оценивать, например 1. Если бы я мог сделать это лучше, это было бы очень полезно, полный код:
import numpy as np
def Matrix_F(Num, Lx):
Vec = np.zeros((Num, Num), dtype = float)
Vec.T[1] = Lx
ex = 0
for i in range(Num):
for j in range(Num):
Vec[j][i]=Lx[j]**ex
ex += 1
return Vec
def Cramer_F(Ma, Ly):
Lc, Det = np.array(Ly), np.linalg.det(Ma)
col = len(Lc)
Values = np.zeros(col)
for i in range(col):
org = Ma.copy()
org.T[i]=Lc
Di=np.linalg.det(org)
Values[i] = Di/Det
error = np.linalg.norm(np.dot(Ma, Values)-Lc)
return Values, error
def Create_F(Numero, Array):
Y = lambda x: x
Lista = list(Array)
F_x = []
for i in range(Numero):
G_x = lambda x: eval(Lista[i]*Y^i)
F_x.append(G_x)
return F_x
val = int(input('Ingrese la cantidad de valores de X y Y que posee: '))
x_val = []
y_val = []
print('Ingrese %s valores de cada variable:' %(val))
n = 1
for i in range(val):
x = float(input('%s° Valor de x: '%(n)))
y = float(input('%s° Valor de y: '%(n)))
x_val.append(x)
y_val.append(y)
n += 1
#Matriz del sistema:
As = Matrix_F(val, x_val)
#Valores de "a_n" y error
a_val, er = Cramer_F(As, y_val)
n=0
print()
for i in a_val:
print('a_%s = %.6f' %(n, i))
n += 1
Спасибо за уделенное время!
1 ответ
Если я поразил вас, вы хотите создать полиномиальное представление в виде лямбда-функции. поэтому позвольте мне предложить альтернативную функцию:
import numpy as np
def alternative_create_F(coeffs):
Y = lambda x: sum([item*(x**iter) for iter, item in enumerate(coeffs)])
return Y
coeffs = np.array([8, -3, 4]) # first is the free coeff second is x coeff and so on
idk = alternative_create_F(coeffs)
print(idk(3))
print(idk(6))
Обратите внимание, что переменная number
не имеет значения, потому что вы можете извлечь ее из len(coeffs)
.
Теперь лямбда-функция содержит представление полинома -
coeffs[0] + coeffs[1]*x + coeffs[2]*x^2
Чтобы вызвать лямбда-функцию, вызовите ее как функцию с желаемым значением x. вывод, полученный из моих примеров:
35 ===> 8+(-3)*3+4*3^2 = 8-9+36 = 35
134 ===> 8+(-3)*6+4*6^2 = 8-18+144 = 134
Надеюсь, что вы найдете ее полезной
Похожие вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.