期末考试数值计算方法15道程序题详解

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//用辛普森公式计算p199页的例题-7

#include#includedouble

f(double x)

{return pow(x,0.5);}

void main()

{ double x0,x1, m;x0=0.5;x1=1.0;

printf("利用辛普森公式计算的结果为:"); printf("\n");

m=((x1-x0)*(f(x0)+f(x1)+4*f((x0+x1)/2)))/6; printf("%lf",m);printf("\n");

}

/用牛顿迭代法求x等于e的-x次方在.5附近的根。#include"stdio.h"#include"math.h"

#define E 2.71828182#define fn(x)

x*pow(E,x)-1#define fn_(x)pow(E,x)+x*pow(E,x )#define N 10#define F 1e-8

void main()

{double x0=0;double x_=0;double x = 0; double tempx=0;int k=1;

printf("键入x0的初值:\nx0=");

scanf("%lf",&x0);while(1)

{x_=fn_(x0);//导数x =fn(x0);//函数值

if(x_ == 0)

{ printf("newton iteration

fail!");break;}else{tempx=x0- ( x/x_ );

if( fabs(x0-tempx) < F){printf("newton iteration success!\nx=%.8lf\n\n",tempx); break;}else{if(k == N){printf("newton iteration fail!");break;}else{k++;

x0=tempx;}}}}}

//牛顿插入法#include#define N 6

#define M 4 double

x[N]={0.4,0.55,0.65,0.8,0.9,1.05};

Double y[N]={0.41075,0.57815,0.69675,0.88811 ,1.02652,1.25382};double _w(int k,int i,int j){double sum=1;int ii=i;while(ii<=j){

if(k!=ii)sum*=(x[k]-x[ii]);ii++;}

return sum;}double D_value(int i,int j) {double sum=0;int k=i;while(k<=j){

sum+=y[k]/_w(k,i,j);k++;}return sum;} double _Poly(double x0,int n){

double sum=1;int i=0;while(i<=n){

sum*=(x0-x[i]);i++;}return sum;}

double Polynomial(double x0,int n) {if(n==0)return y[0];else return

Polynomial(x0,n-1)+D_value(0,n)*_Poly(x0,n-1);}void main(){double x0,y0;printf("x0="); scanf("%lf",&x0);getchar();y0=Polynomial(x0 ,M);printf("y=%lf\n",y0);}

//拉格朗日差值法,三次差值

#includedouble L0(double x0,double x1,double x2,double x){return

((x-x1)*(x-x2))/((x0-x1)*(x0-x2));}

double L1(double x0,double x1,double

x2,double x){return

((x-x0)*(x-x2))/((x1-x0)*(x1-x2));}

double L2(double x0,double x1,double

x2,double x){return

((x-x0)*(x-x1))/((x2-x0)*(x2-x1));}

void main(){

double x=0,x0=0,x1=0,x2=0;double

y0=0,y1=0,y2=0;printf("输入各项x的

值:\n");scanf("%lf,%lf,%lf",&x0,&x1,&x2); printf("输入各项y的值:\n");

scanf("%lf,%lf,%lf",&y0,&y1,&y2);getchar(); printf("输入x的值:\n");scanf("%lf",&x); getchar();printf("结果

为:%lf\n",L0(x0,x1,x2,x)*y0+L1(x0,x1,x2,x)* y1+L2(x0,x1,x2,x)*y2);

}

//高斯消去法#include#define size 3 double a[size][size+2];void guass()

{int i,j;int n;for(n=1;n

for(i=n;i

a[i][size+1]=a[i][n-1]/a[n-1][n-1];

//消去for(j=n-1;j

a[i][j]=a[i][j]-a[i][size+1]*a[n-1][j];}

}void main(){int i,j;printf("-----------高斯消去之前---------\n\n");for(i=0;i

if(a[i][j]<0)printf("%.2f\t",a[i][j]);else printf(" %.2f\t",a[i][j]);}printf("\n\n");} guass();printf("-----------高斯消去后

----------\n\n");for(i=0;i

{for(j=0;j

//高斯赛德尔#include#include

相关文档
最新文档