Computer >> Máy Tính >  >> Lập trình >> Lập trình

Nội suy Lagrange


Để xây dựng các điểm dữ liệu mới trong một phạm vi của một tập hợp điểm dữ liệu đã cho rời rạc, kỹ thuật nội suy được sử dụng. Kỹ thuật nội suy Lagrange là một trong số đó. Khi các điểm dữ liệu đã cho không phân bố đều, chúng ta có thể sử dụng phương pháp nội suy này để tìm lời giải. Đối với phép nội suy Lagrange, chúng ta phải tuân theo phương trình này.

Nội suy Lagrange


Đầu vào và Đầu ra

Input:
List of x and f(x) values. find f(3.25)
x: {0,1,2,3,4,5,6}
f(x): {0,1,8,27,64,125,216}
Output:
Result after Lagrange interpolation f(3.25) = 34.3281

Thuật toán

largrangeInterpolation(x: array, fx: array, x1)

Đầu vào - mảng x và mảng fx để lấy dữ liệu đã biết trước đó và điểm x1.

Đầu ra: Giá trị của f (x1).

Begin
   res := 0 and tempSum := 0
   for i := 1 to n, do
      tempProd := 1
      for j := 1 to n, do
         if i ≠ j, then
            tempProf := tempProd * (x1 – x[j])/(x[i] – x[j])
      done

      tempPord := tempProd * fx[i]
      res := res + tempProd
   done
   return res
End

Ví dụ

#include<iostream>
#define N 6
using namespace std;

double lagrange(double x[], double fx[], double x1) {
   double res = 0, tempSum = 0;

   for(int i = 1; i<=N; i++) {
      double tempProd = 1;         //for each iteration initialize temp product
      for(int j = 1; j<=N; j++) {
         if(i != j) {                 //if i = j, then denominator will be 0
            tempProd *= (x1 - x[j])/(x[i] - x[j]);     //multiply each term using formula
         }
      }
      tempProd *= fx[i];                //multiply f(xi)
      res += tempProd;
   }
   return res;
}

main() {
   double x[N+1] = {0,1,2,3,4,5,6};
   double y[N+1] = {0,1,8,27,64,125,216};
   double x1 = 3.25;
   cout << "Result after lagrange interpolation f("<<x1<<") = " << lagrange(x, y, x1);
}

Đầu ra

Result after lagrange interpolation f(3.25) = 34.3281