⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 拉格朗日插值法.doc

📁 数值算法中数学计算的拉格朗日插值法演示代码。
💻 DOC
字号:
#include "stdio.h"
#include "conio.h"
#define N 4
main()
{
    double x[N+1] = {0.4, 0.55, 0.8, 0.9, 1};
    double y[N+1] = {0.41075, 0.57815, 0.88811, 1.02652, 1.17520};
    double varx = 0.5;
    int checkvalid ( double x[], int n );
    double Lagrange (double x[], double y[], double varx, int n );
    void Print(double x[], double y[]);

    if (checkvalid ( x, N ) == 1 )
    {  printf("Ln(x)  =\n");
       Print( x , y);
       printf("\n\n插值结果: P(%f)=%f\n", varx , Lagrange( x , y, varx ,N));
    }
    else
       printf ("输入的插值节点的x值必须互异!");
       
    getch();
}

int checkvalid ( double x[], int n )
{

    int i , j;
    n = 4;

    for( i = 0;i <=n; i++)
      for( j = 0; j <= n; j++ )
        if((i!=j) && (x[i] == x[j]) )
           return -1;
           
    return 1;
}

void Print(double x[], double y[])
{
    int j,k;double p,q ;
    int n = 4;
    for(k = 0; k <= n; k++)
    {
        p =1.0;
        for( j = 0; j <= n; j++ )
        {
            if(j!=k)
              p = p*(x[k]-x[j]);
        }
        q = y[k]/p;
        printf("\t%f",q);
        for( j = 0; j <= n; j++ )
        {
            if(j!=k)
              printf("*(x-%f)",x[j]);
        }
        if(k!=n)
          printf("+\n");
    }
}

double Lagrange (double x[], double y[], double varx, int n )
{
    double sum = 0.0, p ;
    int j , k ;
    n = 4 ;
    
    for( k = 0;k <= n; k++ )
    {
        p = 1.0;
        for( j = 0;  j <= n; j++ )
        {
            if(j!=k)
             p = p*(    (varx - x[j])/(x[k] - x[j])   );
        }

        sum = sum + y[k]*p;
    }
    return (sum);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -