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

📄 拉格郎日插值.txt

📁 数值计算方法
💻 TXT
字号:
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include<malloc.h>

//重新排列
void cxpl(int n,int m,float t,float *x,float *y )
{int i,j;
 float a;
for(i=0;i<m;i++)
for(j=i+1;j<n;j++)
{  if(fabs(*(x+j)-t)<fabs(*(x+i)-t))
      {a=*(x+i);
   *(x+i)=*(x+j);
   *(x+j)=a;
                a=*(y+i);*(y+i)=*(y+j);*(y+j)=a;
  }
}
}

float lag(int n,float *x,float *y,float t)
{int i,j;
 float p,s,la;
 p=1;la=0;
 for(i=0;i<n;i++)
 {for(j=0;j<n;j++)
  {if(j!=i)
   p=p*(t-*(x+j))/(*(x+i)-*(x+j));
  }
  s=*(y+i)*p;
  p=1;
  la=la+s;
 }
 return(la);
}

void main()
{  int m,n,k,i;
   float *x,*y,la,t;
   printf("请输入给定点的数量n");
   scanf("%d",&n);
   
   x=(float*)calloc(n,sizeof(float));
     if(x==NULL)
 {printf("内存分配失败");
  exit(1);
 }
    y=(float*)calloc(n,sizeof(float));
     if(y==NULL)
 {printf("内存分配失败");
  exit(1);
 }
 //printf("请输入x的值");
     //for(i=0;i<n;i++)
//  scanf("%f",x+i);
 //printf("请输入y的值,注意与x的值一一对应");
// for(i=0;i<n;i++)
 //    scanf("%f",y+i);
 x[0]=300;x[1]=400;x[2]=500;x[3]=600;x[4]=700;x[5]=800;
 y[0]=14.7; y[1]=3.85; y[2]=1.21; y[3]=0.49; y[4]=0.23;y[5]=0.11; 
 for(i=0;i<n;i++)
{ printf("x[%d]=%f     ",i,*(x+i));
    printf("y[%d]=%f\n",i,*(y+i));
}

 
     for(i=0;;i++)
 {printf("请输入t的值(退出则输入0)");
  scanf("%f",&t);
   if(t==0)
   {printf("确认退出请输入0,计算f(0)请按输入任意数字值");
   scanf("%d",&m);
    if(m==0)break;

   }
      printf("请输入需要使用的点的个数");
  scanf("%d",&k);
  cxpl(n,k,t,x,y);
  la=lag(k,x,y,t);
  printf("插值结果是:\n");
  printf(" f(%3.2f)=%3.4f\n",t,la);
 }
 free(x);
 free(y);
}

⌨️ 快捷键说明

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