重要插值积分算法实现

本文介绍了多种数值积分算法的C语言实现,包括Newton插值法、Lagrange插值法、梯形公式、Simpson公式以及复化数值积分公式的自动控制误差算法,如复化Simpson和复化梯形公式。此外,还涉及了牛顿迭代法和弦截法求非线性方程的根,以及Gauss-Seidel迭代法解线性方程组的算法和列主元消元法。
摘要由CSDN通过智能技术生成

一、Newton插值法

#include<stdio.h>

#define MAX_N 20

typedef struct tagPOINT

{double x;

 double y;

}POINT;

 
int main()

{int n,i,j;

POINT points[MAX_N+1];double diff[MAX_N+1];

double x,tmp,newton=0;

printf("/nInput n value:");

scanf("%d",&n);

printf("Now input the (x_i,y_i),....,%d:/n",n);

for(i=0;i<=n;i++)

scanf("%lf%lf",&points[i].x,&points[i].y);

printf("Now input the x value:");

scanf("%lf",&x);

for(i=0;i<=n;i++) diff[i]=points[i].y;

for(i=0;i<=n;i++)

{for(j=n;j>i;j--)

{diff[j]=(diff[j]-diff[j-1])/(points[j].x-points[j-1-i].x);

}

}

tmp=1;newton=diff[0];

for(i=0;i<n;i++)

{tmp=tmp*(x-points[i].x);

newton=newton+tmp*diff[i+1];

}

printf("newton(%f)=%f/n",x,newton);

return 0;

}

二、Lagrange插值法

double Lagrange(int n,double u,double x[],double y[])

{int i,j;

double l,Ln=0;

for(i=0;i<=n;i++)

{l=1.0;

for(j=0;j<=n;j++)

   if (i!=j)l=l*(u-x[j])/(x(i)-x[j]);

Ln=Ln+l*y[i];

}

return(Ln);

}

#include<stido.h>

#define N 20

Void main(void)

{int i,n;

double x[N],y[N],u.fu;

double Lagrange(int n,double u,double x[],double y[]);

printf(“请输入插值多项式的次数N及插入点U:/n”);

scanf(“%d,%lf”,&n,&u);

printf(“请输入n+1个插值节点x,y:/n”);

for(i=0;i<=n;i++)

   scanf(“%lf,%lf”,&x[i],&y[i]);

fu=Lagrange(n,u,x,y);

printf(“插入点u的近似值为%lf/n”,fu);

 
}

三、用梯形公式

#include<stdio.h>

#include<math.h>

double f(double x)

{return(sqrt(pow(x,4)+1));

}

double T(double a,double b)

{double u,h;

 h=(b-a)/2;

 u=f(a)+f(b);

 return (h*u);

}

void main()

{ double a,b;

  printf("请输入积分区域:a,b/n");

  scanf("%lf,%lf",&a,&b);

    double T(double ,double );

       printf("%lf,%lf",

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值