0% found this document useful (0 votes)
24 views5 pages

Numerical Computing Python

The document discusses different interpolation methods like Lagrange polynomials, Newton divided difference, and scipy implementation of Lagrange interpolation. It includes code examples to generate Lagrange polynomials from data, calculate interpolated values, and plot the results. It also provides tasks to load traffic data, find the interpolated value at a given point using different methods, and plot the results.

Uploaded by

Muhammad Khizar
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
24 views5 pages

Numerical Computing Python

The document discusses different interpolation methods like Lagrange polynomials, Newton divided difference, and scipy implementation of Lagrange interpolation. It includes code examples to generate Lagrange polynomials from data, calculate interpolated values, and plot the results. It also provides tasks to load traffic data, find the interpolated value at a given point using different methods, and plot the results.

Uploaded by

Muhammad Khizar
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 5

3/27/23, 10:29 PM Session2_Interpolation.

ipynb - Colaboratory

Practice to make a polynmial in numpy.

import numpy as np
x=[1,2,3] 
np.poly1d(x)

import numpy as np
x=[1,2,3] # here 1,2,3 are coefficients of the polynomial in descending order
Poly1=np.poly1d(x)
print(Poly1)

Poly2=np.poly1d(x,True) #another format to print polynomial
print(Poly2)

2
1 x + 2 x + 3
3 2
1 x - 6 x + 11 x - 6

Code to read data from a CSV file

import pandas as pd
import numpy as np

# Read data from CSV file
df = pd.read_csv('traffic.csv')

# Convert data to numpy arrays
x = df['x values'].values
y = df['y values'].values

import pandas as pd
import numpy as np

# Read data from CSV file
df = pd.read_csv('traffic.csv')

# Convert data to numpy arrays
x = df['Time'].values
y = df['No of vehicles'].values

Function for getting Lagrange Polynmial

#x = [0, 20,40,60, 80, 100,120]
#y = [26.0, -48.6, 61.6, -71.2, 74.8, -75.2,-65.2]

# Function to calculate Lagrange polynomial
def lagrange_poly(x, y):
    n = len(x)
    p = np.poly1d(0.0)
    for i in range(n):
        L = np.poly1d(y[i]) 
        for j in range(n):
            if j != i:
                L *= np.poly1d([1.0, -x[j]]) / (x[i] - x[j])
        p += L
    return p

# Calculate Lagrange polynomial
p = lagrange_poly(x[0:7], y[0:7])
print(p)

6 5 4 3 2
0.07778 x - 1.433 x + 10.03 x - 33 x + 50.89 x - 29.57 x + 9

https://colab.research.google.com/drive/1a4oNcn5iBFyWYyxYkECx_3fCBdesxXfD#scrollTo=-RseDDu3HUOu&printMode=true 1/5
3/27/23, 10:29 PM Session2_Interpolation.ipynb - Colaboratory

For Interpolating at a specific point

# Interpolate at a specific point
#point = float(input("Enter x-coordinate to interpolate: "))
interp_value = p(3.5)

# Print Lagrange polynomial and interpolated value
print("Lagrange polynomial is:")
print(p)
print("Interpolated value at x =", 3.5, "is:", interp_value)

Lagrange polynomial is:


6 5 4 3 2
0.07778 x - 1.433 x + 10.03 x - 33 x + 50.89 x - 29.57 x + 9
Interpolated value at x = 3.5 is: 9.054687499999055

Plotting of Lagrange Polynomial

import matplotlib.pyplot as plt
xi=3.5
yi=9.054687499999055
p = lagrange_poly(x[0:7], y[0:7])
print(p)
xp=np.linspace(0,x[6],100)
yp=p(xp)

plt.plot(xp, yp, label='Lagrange Poly')
plt.plot(xi, yi, 'bo', label='Interpolated Point')
plt.plot(x, y, 'ro', label='Data Points')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()

6 5 4 3 2
0.07778 x - 1.433 x + 10.03 x - 33 x + 50.89 x - 29.57 x + 9

fig = plt.figure(figsize = (10,8))
#x = [0, 20,40,60, 80, 100]
#y = [26.0, -48.6, 61.6,-71.2, 74.8, -75.2]
n=7
for i in range(1,n+1,1):
  p = lagrange_poly(x[0:i+1], y[0:i+1])
  xp=np.linspace(0,x[i],100)
  yp=p(xp)
  plt.plot(xp, yp, label = f"L{i}")
plt.plot(x,y,'ro',label="Data Points")
plt.plot(xi,yi,'bo',label="Interpolated Points")
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.grid()
plt.show()

https://colab.research.google.com/drive/1a4oNcn5iBFyWYyxYkECx_3fCBdesxXfD#scrollTo=-RseDDu3HUOu&printMode=true 2/5
3/27/23, 10:29 PM Session2_Interpolation.ipynb - Colaboratory

Scipy Implimentation of Lagrange Polynomial

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import lagrange

# Define the data points
#x = np.array([0, 20, 40, 60, 80, 100])
#y = np.array([26.0, -48.6, 61.6, -71.2, 74.8, -75.2])

# Define the Lagrange Polynomial
f = lagrange(x, y)

# Find P(50) by evaluating the polynomial at x=50
p_45 = f(3.5)
print("P(3.5) =", p_45)

# Print the polynomial coefficients
print("Lagrange Polynomial:", np.poly1d(f).coefficients)

# Plot the Lagrange Polynomial and the data points
x_new = np.linspace(0, 100, 100)
fig = plt.figure(figsize = (10,8))
plt.plot(x_new, f(x_new), 'b', x, y, 'ro')
plt.plot(45, p_45, 'go', markersize=10)
plt.title('Lagrange Polynomial')
plt.grid()
plt.xlabel('x')
plt.ylabel('y')
plt.show()

https://colab.research.google.com/drive/1a4oNcn5iBFyWYyxYkECx_3fCBdesxXfD#scrollTo=-RseDDu3HUOu&printMode=true 3/5
3/27/23, 10:29 PM Session2_Interpolation.ipynb - Colaboratory

P(3.5) = -97.18089932319336
Lagrange Polynomial: [-5.32864583e-06 1.31302083e-03 -1.13188542e-01 3.98529167e
-4.78120000e+01 2.60000000e+01]

import pandas as pd
import numpy as np

# Read data from CSV file
df = pd.read_csv('traffic.csv')

# Convert data to numpy arrays
x = df['Time'].values
y = df['No of vehicles'].values

Code for Newton divided difference Method

import numpy as np
def divided_difference_table(x, y):
    n = len(x)
    F = [[0] * n for i in range(n)]
    for i in range(n):
        F[i][0] = y[i]
    for j in range(1, n):
        for i in range(j, n):
            F[i][j] = (F[i][j-1] - F[i-1][j-1]) / (x[i] - x[i-j])
    return F
def newton_div_dif_poly(x,y,xi):
   F=divided_difference_table(x,y) # Saving divided difference in a variable F
   n=len(x)
   prod=np.poly1d(1)
   N=np.poly1d(F[0][0])
   for i in range(1,n):
     prod=np.poly1d(x[0:i],True)
     N+=np.poly1d(F[i][i]*(prod.c))
     
   
   return (N)

x = [0, 1,2,3, 4, 5, 6]
y = [9, 6, 9, 8, 11, 12, 15]
newton_div_dif_poly(x, y,3.5)

poly1d([ 0.07777778, -1.43333333, 10.02777778, -33. ,


50.89444444, -29.56666667, 9. ])

import matplotlib.pyplot as plt
xi=3.5
yi=9.054687499999055
p = newton_div_dif_poly(x[0:7], y[0:7],3.5)
print(p)
xp=np.linspace(0,x[6],100)
yp=p(xp)

plt.plot(xp, yp, label='Lagrange Poly')
plt.plot(xi, yi, 'bo', label='Interpolated Point')
plt.plot(x, y, 'ro', label='Data Points')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()

https://colab.research.google.com/drive/1a4oNcn5iBFyWYyxYkECx_3fCBdesxXfD#scrollTo=-RseDDu3HUOu&printMode=true 4/5
3/27/23, 10:29 PM Session2_Interpolation.ipynb - Colaboratory

6 5 4 3 2
0.07778 x - 1.433 x + 10.03 x - 33 x + 50.89 x - 29.57 x + 9

Lab Task: Given is a Traffic.xlsx file


1- Upload this file on Colab. (This file contains no of vehicles at a junction at each hour.)
2- Predict no of vehicles at 3.5 hour( Consider it a 24 hour clock) by using Lagrange with the help of a 6 degree polynomial.
3- Plot above polynomial with interpolating point.
4- Repeat above task (2-3) again with Newton Divided difference Method.

https://colab.research.google.com/drive/1a4oNcn5iBFyWYyxYkECx_3fCBdesxXfD#scrollTo=-RseDDu3HUOu&printMode=true 5/5

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy