Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import re
- import numpy as np
- import matplotlib.pyplot as plt
- from tabulate import tabulate
- funkcja = input("Podaj funkcję:\nf(x) = ")
- lista_x = []
- lista_y = []
- argument = ''
- while argument != '-':
- try:
- argument = input('Podaj x (Wprowadź "-" na końcu): ')
- if argument != '-':
- lista_x.append(int(argument))
- except ValueError:
- print('Wprowadź liczbę!')
- continue
- temp_funkcja = funkcja.replace('^', '**')
- #funkcje dostępne w numpy
- funkcje = ['sin', 'cos', 'tan','arcsin', 'arccos', 'arctan', 'sqrt',
- 'exp', 'log', 'log10', 'log2']
- for f in funkcje:
- temp_funkcja = re.sub(rf'\b{f}\(([^)]+)\)', rf'np.{f}(\1)',
- temp_funkcja)
- x_values=np.linspace(min(lista_x)-10,max(lista_x)+10)
- x_interp = np.linspace(min(lista_x),max(lista_x))
- try:
- y_values = [eval(re.sub(r'x', f'({x})', temp_funkcja), {'np':
- np}) for x in x_values]
- lista_y = [eval(re.sub(r'x', f'({x})', temp_funkcja), {'np':
- np}) for x in lista_x]
- except (ValueError, SyntaxError):
- print("OOPs,coś poszło nie tak,s próbuj ponownie")
- print('Podana funckja: ',end='')
- print(f'f(x) = {funkcja}')
- table_data=list(zip(lista_x,lista_y))
- headers=['Argumenty','Wartości']
- print(tabulate(table_data, headers=headers, tablefmt="grid"))
- def interpolacja_lagrange(wartosci_x,wartosci_y):
- n=len(wartosci_x)
- wezly=[]
- wielomian=''
- for i in range(n):
- skladnik=''
- wspolczynnik=wartosci_y[i]
- if wspolczynnik==0:
- continue
- mianownik=1
- for j in range(n):
- if i!=j:
- mianownik*=(wartosci_x[i] - wartosci_x[j])
- if wartosci_x[j]>0:
- skladnik+=f'*(x - {wartosci_x[j]})'
- elif wartosci_x[j]<0:
- skladnik+=f'*(x + {abs(wartosci_x[j])})'
- else:
- skladnik+=f'*x'
- wspolczynnik=f'{wspolczynnik/mianownik}'
- wezly.append(f'{wspolczynnik}{skladnik}')
- wielomian='+'.join(wezly)
- wielomian=wielomian.replace('+-','-')
- return wielomian
- wielomian_gotowy=interpolacja_lagrange(lista_x,lista_y)
- print('Wielomian interpolacyjny: ',end='')
- print(f'L(x) = {wielomian_gotowy}')
- y_interp=[eval(re.sub(r'x', f'{x}', wielomian_gotowy), {'np':
- np}) for x in x_interp]
- plt.plot(x_values, y_values,label=f'f(x)={funkcja}')
- plt.plot(x_interp, y_interp, label=f"Wielomian Lagrange'a")
- plt.xlabel('x')
- plt.ylabel('y')
- plt.legend()
- plt.grid(True)
- plt.scatter(lista_x, lista_y, color='red', label='Wybrane punkty',
- marker='o')
- plt.title('Wykresy')
- plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement