期末考试数值计算方法15道程序题详解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//用辛普森公式计算p199页的例题-7
#include
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 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);}
//拉格朗日差值法,三次差值
#include
((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
{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