通過下面4點的Lagrange內插法求P(1.5)之值?
(1 , 0.0) (2 , 0.693) (3 , 1.099) (4 , 1.386)
x f(x)
==================
1.0 0.0
2.0 0.693
3.0 1.099
4.0 1.386
===================
# Lagrange Interpolation Code
import math
def Lagrange( n, k,val):
result = 1.0
for i in range (0 , n):
if (i!=k):
result = result * ( (val - x[i]) / (x[k] - x[i]))
return result
def Calculate(n, x):
intPolasyon = 0.0
L= [ 0.0 for i in range(size) ]
for i in range (0 , n):
L[i] = Lagrange(n, i, x)
intPolasyon += fx[i] * L[i]
print("L(%d) = (%5.3f)\n" %( i, L[i]))
print("\n")
return intPolasyon
size=4
print("Please enter function's point count:",size)
fx= [ 0.0 for i in range(size) ]
x= [ 0.0 for i in range(size) ]
x=[1.0 , 2.0 , 3.0 ,4.0]
fx=[0.0 , 0.693 , 1.099 , 1.386]
for i in range (0,len(x)) :
print( '\t',round(x[i],4),"\t\t",round( fx[i],4))
print()
question=1.5
print("Please enter point to calculate:", question)
print("\n");
print("Result =====> f(%4.2f) = (%5.4f)\n" %(question, Calculate(size, question)) )
========= RESTART: F:/2018-09勤益科大數值分析/數值分析/PYTHON/EX1-3.py ============
Please enter function's point count: 4
1.0 0.0
2.0 0.693
3.0 1.099
4.0 1.386
Please enter point to calculate: 1.5
L(0) = (0.312)
L(1) = (0.938)
L(2) = (-0.312)
L(3) = (0.062)
Result =====> f(1.50) = (0.3929)
>>>
源自於
https://mat.iitm.ac.in/home/sryedida/public_html/caimna/interpolation/lagrange.html
This is again an Nth degree polynomial approximation formula to the function f(x), which is known at discrete points xi, i = 0, 1, 2 . . . Nth. The formula can be derived from the Vandermonds determinant but a much simpler way of deriving this is from Newton's divided difference formula. If f(x) is approximated with an Nth degree polynomial then the Nthdivided difference of f(x) constant and (N+1)th divided difference is zero. That is
From the second property of divided difference we can write
= 0 | |||||
or
Since Lagrange's interpolation is also an Nth degree polynomial approximation to f(x) and the Nth degree polynomial passing through (N+1) points is unique hence the Lagrange's and Newton's divided difference approximations are one and the same. However, Lagrange's formula is more convinent to use in computer programming and Newton's divided difference formula is more suited for hand calculations.
Example : Compute f(0.3) for the data
using Lagrange's interpolation formula (Analytic value is 1.831)
沒有留言:
張貼留言