zoukankan      html  css  js  c++  java
  • 拉格朗日(Lagrange)插值算法

    拉格朗日插值(Lagrange interpolation)是一种多项式插值方法,指插值条件中不出现被插函数导数值,过n+1个样点,满足如下图的插值条件的多项式。也叫做拉格朗日公式。

     这里以拉格朗日3次插值为例,利用C++进行实现:
     1 //利用lagrange插值公式
     2 #include<iostream>
     3 using namespace std;
     4 
     5 double Lx(int i,double x,double* Arr)
     6 {
     7     double fenzi=1,fenmu=1;
     8     for (int k=0;k<4;k++)
     9     {
    10         if (k==i)
    11             continue;
    12         fenzi*=x-Arr[k];
    13         fenmu*=Arr[i]-Arr[k];
    14     }
    15     return fenzi/fenmu;
    16 }
    17 
    18 int main()
    19 {
    20     double xArr[4]={};
    21     double yArr[4]={};
    22     //输入4个节点坐标
    23     cout<<"请依次输入4个节点的坐标:"<<endl;
    24     for (int i=0;i<4;i++)
    25         cin>>xArr[i]>>yArr[i];
    26 
    27     //输入要求解的节点的横坐标
    28     cout<<"请输入要求解的节点的横坐标:";
    29     double x;
    30     cin>>x;
    31     double y=0;
    32     for (int i=0;i<4;i++)
    33         y+=Lx(i,x,xArr)*yArr[i];
    34     printf("x=%lf时,y=%lf
    ",x,y);
    35 
    36     //分界,下面为已知y求x
    37     cout<<"请输入要求解的节点的纵坐标:";
    38     cin>>y;
    39     x=0;
    40     for (int i=0;i<4;i++)
    41         x+=Lx(i,y,yArr)*xArr[i];
    42     printf("y=%lf时,x=%lf
    ",y,x);
    43 
    44     system("pause");
    45     return 0;
    46 }

    作者:耑新新,发布于  博客园

    转载请注明出处,欢迎邮件交流:zhuanxinxin@aliyun.com

  • 相关阅读:
    Flowplayer-Subtitle
    Flowplayer-playlist
    Flowplayer-Embedding
    Flowplayer-Skin
    Flowplayer-Setup
    Flowplayer-JavaScript API
    任务监控程序设计与实现总结
    Spark RDD整理
    oracle连接和执行流程总结
    阅读《Oracle内核技术揭秘》的读书笔记
  • 原文地址:https://www.cnblogs.com/Arthurian/p/7744637.html
Copyright © 2011-2022 走看看