计算方法实验七高荣双

时间:2024.3.31

校名

 实 验 报 告

课程名称:        计算方法            

    系:        数学科学系          

专业班级:        数应1001B         

    号:         1031110107         

学生姓名:          高荣双           

指导教师:           沈林                

开课时间: 2012  20## 学年第  学期

       

一、学生撰写要求

按照实验课程培养方案的要求,每门实验课程中的每一个实验项目完成后,每位参加实验的学生均须在实验教师规定的时间内独立完成一份实验报告,不得抄袭,不得缺交。

学生撰写实验报告时应严格按照本实验报告规定的内容和要求填写。字迹工整,文字简练,数据齐全,图表规范,计算正确,分析充分、具体、定量。

二、教师评阅与装订要求

1.实验报告批改要深入细致,批改过程中要发现和纠正学生实验报告中的问题,给出评语和实验报告成绩,签名并注明批改日期。实验报告批改完成后,应采用适当的形式将学生实验报告中存在的问题及时反馈给学生。

2.实验报告成绩用百分制评定,并给出成绩评定的依据或评分标准(附于实验报告成绩登记表后)。对迟交实验报告的学生要酌情扣分,对缺交和抄袭实验报告的学生应及时批评教育,并对该次实验报告的分数以零分处理。对单独设课的实验课程,如学生抄袭或缺交实验报告达该课程全学期实验报告总次数三分之一以上,不得同意其参加本课程的考核。

3.各实验项目的实验报告成绩登记在实验报告成绩登记表中。本学期实验项目全部完成后,给定实验报告综合成绩。

4.实验报告综合成绩应按课程教学大纲规定比例(一般为10-15%)计入实验课总评成绩;实验总评成绩原则上应包括考勤、实验报告、考核(操作、理论)等多方面成绩;

5.实验教师每学期负责对拟存档的学生实验报告按课程、学生收齐并装订,按如下顺序装订成册:实验报告封面、实验报告成绩登记表、实验报告成绩评定依据、实验报告(按教学进度表规定的实验项目顺序排序)。装订时统一靠左侧按“两钉三等分”原则装订。


第二篇:计算方法实验3


拉格朗日插值法#include "stdio.h" void main() { double l(double x); double a,x; scanf("%lf",&x); a=l(x); printf("%f",a); } double l(double x) {double a[5]={0.4,0.5,0.6,0.7,0.8}; double b[5]={-0.916291,-0.693147,-0.510826,-0.356675,-0.223144}; double n=0,L,k=1,s=1; int w,i; for(i=0;i<=4;i++) { for(w=0;w<=4;w++) { if(w==i) continue; k=k*(x-a[w]); s=s*(a[i]-a[w]); } L=k/s*b[i]; s=1; k=1; n=n+L; } return(n); } 牛顿法#include<stdio.h> #include<stdlib.h> #include<iostream.h> typedef struct data { float x; float y; }Data;//变量x和函数值y的结构 Data d[20];//最多二十组数据 float f(int s,int t)//牛顿插值法,用以返回插商 { if(t==s+1) return (d[t].y-d[s].y)/(d[t].x-d[s].x); else return (f(s+1,t)-f(s,t-1))/(d[t].x-d[s].x); } float Newton(float x,int count) { int n; while(1) { cout<<"请输入n值(即n次插值):";//获得插值次数 cin>>n; if(n<=count-1)// 插值次数不得大于count-1次 break; else system("cls"); } //初始化t,y,yt。 float t=1.0; float y=d[0].y; float yt=0.0; //计算y值 for(int j=1;j<=n;j++) { t=(x-d[j-1].x)*t; yt=f(0,j)*t; //cout<<f(0,j)<<endl; y=y+yt; } return y; } float lagrange(float x,int count) { float y=0.0; for(int k=0;k<count;k++)//这儿默认为count-1次插值 { float p=1.0;//初始化p for(int j=0;j<count;j++) {//计算p的值 if(k==j)continue;//判断是否为同一个数 p=p*(x-d[j].x)/(d[k].x-d[j].x); } y=y+p*d[k].y;//求和 } return y;//返回y的值 } void main() { float x,y; int count; while(1) { cout<<"请输入x[i],y[i]的组数,不得超过20组:";//要求用户输入数据组数 cin>>count; if(count<=20) break;//检查输入的是否合法 system("cls"); } //获得各组数据 for(int i=0;i<count;i++) { cout<<"请输入第"<<i+1<<"组x的值:"; cin>>d[i].x; cout<<"请输入第"<<i+1<<"组y的值:"; cin>>d[i].y; system("cls"); } cout<<"请输入x的值:";//获得变量x的值 cin>>x; while(1) { int choice=3; cout<<"请您选择使用哪种插值法计算:"<<endl; cout<<" (0):退出"<<endl; cout<<" (1):Lagrange"<<endl; cout<<" (2):Newton"<<endl; cout<<"输入你的选择:"; cin>>choice;//取得用户的选择项 if(choice==2) { cout<<"你选择了牛顿插值计算方法,其结果为:"; y=Newton(x,count);break;//调用相应的处理函数 } if(choice==1) { cout<<"你选择了拉格朗日插值计算方法,其结果为:"; y=lagrange(x,count);break;//调用相应的处理函数 } if(choice==0) break; system("cls"); cout<<"输入错误!!!!"<<endl; } cout<<x<<" , "<<y<<endl;//输出最终结果 }牛顿插值法#include<iostream.h>#include<math.h>void main(){int l;int i;char L;do{double M[100][100];double x[100],y[100];double X=1,xx=0,w=1,N=0,P,R=1;

int n;cout<<"请输入所求均差阶数:";cin>>x[i];for(int i=0;i<=n;i++){cout<<"请输入x"<<i<<"的值"<<endl;cout<<"请输入y"<<i<<"的值"<<endl;cin>>y[i];M[i][0]=x[i];M[i][1]=y[i];}for(int j=2;j<=n+1;j++){for(i=1;i<=n;i++){M[i][j]=(M[i][j-1]-M[i-1][j-1])/(M[i][0]-M[i-j+1][0]);}}for(i=1;i<=n;i++){cout<<"其"<<i<<"阶均差为:"<<M[i][i+1]<<endl;}cout<<"请输入x的值:x=";cin>>xx;for(i=0;i<n;i++){X*=xx-x[i];N+=M[i+1][i+2]*X;P=M[0][1]+N;}cout<<"其函数值:y="<<P<<endl;cout<<endl<<"如还想算其他插值请按'y'否则按'n'"<<endl;cin>>L;}while(L=='y');}3#include<stdio.h>#include<stdlib.h>#include<iostream.h>typedef struct data{float x;float y;}Data;//变量x和函数值y的结构Data d[20];//最多二十组数据float f(int s,int t)//牛顿插值法,用以返回插商{if(t==s+1)return (d[t].y-d[s].y)/(d[t].x-d[s].x);elsereturn (f(s+1,t)-f(s,t-1))/(d[t].x-d[s].x); }float Newton(float x,int count){int n;while(1){cout<<"请输入n值(即n次插值):";//获得插值次数cin>>n;if(n<=count-1)// 插值次数不得大于count-1次break;elsesystem("cls");}//初始化t,y,yt。float t=1.0;float y=d[0].y;float yt=0.0;//计算y值for(int j=1;j<=n;j++){t=(x-d[j-1].x)*t;yt=f(0,j)*t;//cout<<f(0,j)<<endl;y=y+yt;}return y;}float lagrange(float x,int count){float y=0.0;for(int k=0;k<count;k++)//这儿默认为count-1次插值{float p=1.0;//初始化pfor(int j=0;j<count;j++){//计算p的值if(k==j)continue;//判断是否为同一个数p=p*(x-d[j].x)/(d[k].x-d[j].x);}y=y+p*d[k].y;//求和}return y;//返回y的值}void main(){float x,y;int count;while(1){cout<<"请输入x[i],y[i]的组数,不得超过20组:";//要求用户输入数据组数cin>>count;if(count<=20)break;//检查输入的是否合法system("cls");}//获得各组数据for(int i=0;i<count;i++){cout<<"请输入第"<<i+1<<"组x的值:";cin>>d[i].x;cout<<"请输入第"<<i+1<<"组y的值:";cin>>d[i].y;system("cls");}cout<<"请输入x的值:";//获得变量x的值cin>>x;while(1){int choice=3;cout<<"请您选择使用哪种插值法计算:"<<endl;cout<<" (0):退出"<<endl;cout<<" (1):Lagrange"<<endl;cout<<" (2):Newton"<<endl;cout<<"输入你的选择:";cin>>choice;//取得用户的选择项if(choice==2){cout<<"你选择了牛顿插值计算方法,其结果为:";y=Newton(x,count);break;//调用相应的处理函数}if(choice==1){cout<<"你选择了拉格朗日插值计算方法,其结果为:";y=lagrange(x,count);break;//调用相应的处理函数}if(choice==0)break;system("cls");co

ut<<"输入错误!!!!"<<endl;}cout<<x<<" , "<<y<<endl;//输出最终结果}可行朗日#include <iostream> #include <iomanip>#include <stdlib.h>using namespace std;#define N 100 void lagrange(){int n,k,m,q=1;float x[N],y[N],xx,yyy1,yyy2,yy1,yy2,yy3;cout<<"请输入X的个数:";cin>>n;for(k=0;k<=n-1;k++){cout<<"请输入X"<<k<<"的值:";cin>>x[k];cout<<"请输入Y"<<k<<"的值:";cin>>y[k];}system("cls");cout<<"则Xi与Yi表格如下:"<<endl;cout<<"Xi"<<" ";for(k=0;k<=n-1;k++)cout<<setiosflags(ios::left)<<setw(10)<<x[k];cout<<endl;cout<<"Yi"<<" ";for(k=0;k<=n-1;k++)cout<<setiosflags(ios::left)<<setw(10)<<y[k];cout<<endl;while(q){cout<<"请输入所求x的值:";cin>>xx;while(xx>x[k-1]||xx<x[0]){cout<<"输入错误,请重新输入:";cin>>xx;}for(k=0;k<=n-1;k++){if(xx<x[k]){m=k-1;k=n-1;}}yyy1=y[m]*((xx-x[m+1])/(x[m]-x[m+1]))+y[m+1]*((xx-x[m])/(x[m+1]-x[m]));cout<<"则拉格朗日分段线性插值为:"<<yyy1<<endl;for(k=0;k<=n-1;k++){if(xx<x[k]){m=k-1;k=n-1;}}if((xx-x[m])>(x[m+1]-xx))m=m+1;else m=m;yy1=y[m-1]*((xx-x[m])*(xx-x[m+1]))/((x[m-1]-x[m])*(x[m-1]-x[m+1]));yy2=y[m]*((xx-x[m-1])*(xx-x[m+1]))/((x[m]-x[m-1])*(x[m]-x[m+1]));yy3=y[m+1]*((xx-x[m-1])*(xx-x[m]))/((x[m+1]-x[m-1])*(x[m+1]-x[m]));yyy2=yy1+yy2+yy3;cout<<"则拉格朗日分段二次插值为:"<<yyy2<<endl;cout<<"是否输入其余要求x的值[是(1),否(0)]:";cin>>q;}system("cls");}void main(){lagrange();}#include<stdio.h>float czl(int n,float x1,float *px,float *py);void main(){float x1,y1;int n;float *p1,*p2;float x[10]={1.1275,1.1503,1.1735,1.972}; /* 根据题目修改*/float y[10]={0.1191,0.13954,0.15932,0.1793};/*根据题目修改*/printf("Input numbers:x1 n=\n");scanf("%f%d",&x1,&n); /*输入1.6和5*/p1=x;p2=y;y1=czl(n,x1,p1,p2);printf("y1=%f\n",y1);}float czl(int n,float x1,float *px,float *py) //核心函数{int i,j;float x[10],y[10],t,y1;y1=0.0;for(i=0;i<n;i++,px++,py++){x[i]=*px;y[i]=*py;}for(i=0;i<n;i++){t=1.0;for(j=0;j<n;j++)if(i!=j)t=t*(x1-x[j])/(x[i]-x[j]);y1=y1+t*y[i];}return(y1);}分段线性插值//Multi-Linear Interpolation on interval [0,6]//double MultiLinear_Interpolation(int n,double Inputx,double x[MAX],double y[MAX]){int i,Leftend;double Master,Master1,Master2; //Master-sum of termsdouble Interval=6.0/n;double Temp=Inputx;for(i=0;i<=n;i++){if(Temp<=Interval){Leftend=i;break;} //Identify the left end of x[n]else{Temp=Temp-Interval;}}Master1=(Inputx-x[Leftend+1])*y[Leftend]/(x[Leftend]-x[Leftend+1]);Master2=(Inputx-x[Leftend])*y[Leftend+1]/(x[Leftend+1]-x[Leftend]);

Master=Master1+Master2; //Get the calculating result of this methodreturn Master;}三次样条插值#include<iostream>using namespace std;#include<stdio.h>#define MAX_N 20typedef struct tagPOINT{ double x;double y;}POINT;int main(){ int n;int i,k;POINT points[MAX_N+1];double h[MAX_N+1],b[MAX_N+1],c[MAX_N+1],d[MAX_N+1],M[MAX_N+1];double u[MAX_N+1],v[MAX_N+1],y[MAX_N+1];double x,p,q,S;cout<<"input n value:"<<endl;cin>>n;if (n>MAX_N){cout<<"the input n is larger than MAX_N,please redefine the MAX_N"<<endl;return 1;}if(n<=0){ cout <<"please input a number between 1 and"<<MAX_N<<endl;return 1;}cout<<"Now input the (x_i,y_i),i=0..."<<n<<endl;for(i=0;i<=n;i++)cin>>points[i].x>>points[i].y;cout<<"now input the M[0] value:";cin>>M[0];cout<<"now input the M[n] value:";cin>>M[n];cout<<"Now input the x value:";cin>>x;if(x>points[n].x||x<points[0].x){ cout<<"please input a numbr between "<<points[0].x<<"and"<<points[n].x<<endl;return 1;}h[0]=points[1].x-points[0].x;for(i=1;i<n;i++){h[i]=points[i+1].x-points[i].x;b[i]=h[i]/(h[i]+h[i-1]);c[i]=1-b[i];d[i]=6*((points[i+1].y-points[i].y)/h[i]-(points[i].y-points[i-1].y)/h[i-1])/(h[i]+h[i-1]);}d[1]-=c[1]*M[0];d[n-1]-=b[n-1]*M[n];b[n-1]=0;c[1]=0;v[0]=0;for (i=1;i<n;i++){u[i]=2-c[i]*v[i-1];v[i]=b[i]/u[i];y[i]=(d[i]-c[i]*y[i-1])/u[i];}for(i=1;i<n;i++){M[n-i]=y[n-i]-v[n-i]*M[n-i+1];}k=0;while (x>=points[k].x)k++;k=k-1;p=points[k+1].x-x;q=x-points[k].x;S=(p*p*p*M[k]+q*q*q*M[k+1])/(6*h[k])+(p*points[k].y+q*points[k+1].y)/h[k]-h[k]*(p*M[k]+q*M[k+1])/6;cout<<"S("<<x<<")="<<S<<endl;}牛顿插值#include<iostream>using namespace std;#include<stdio.h>#define MAX_N 20typedef struct tagPOINT{ double x;double y;}POINT;int main(){ int n;int i,j;POINT points[MAX_N+1];double diff[MAX_N+1];double x,tmp,newton=0;cout<<"input n value:"<<endl;cin>>n;if(n>MAX_N){ cout <<"the input n is larger then MAX_N,please redefine the MAX_N"<<endl;return 1;}if (n<=0){ cout <<"please input a number between 1 and"<<MAX_N<<endl;return 1;}cout<<"now input the (x_i,y_i),i=0,...,"<<n<<endl;for (i=0;i<=n;i++)cin >>points[i].x>>points[i].y;cout <<"now input the x value:"<<endl;cin>>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];}cout<<"newton("<<x<<")="<<newton<<endl;return 0;}

更多相关推荐:
计算方法实验报告

江西科技师范学院实验报告课程系别班级学号姓名目录实验一误差的传播与估计实验二拉格朗日插值多项式实验三变步长复合梯形求积公式实验四解非线性方程二分法实验五一元非线性方程的迭代解法实验六列主元高斯消去法每次实验课必...

数值计算方法实验报告1

长春理工大学学生实验报告

计算方法实验报告

实验报告计算方法算法设计及其MATLAB实现实验1插值方法拉格朗日插值法一实验目的1了解lagrange插值法的基本原理和方法2通过实例掌握用MATLAB求插值的方法3编程实现lagrange插值二方法原理nn...

计算方法实验报告

在MATLAB运行窗口输入p2polyfitxy2y2polyvalp2xholdonplotxy23939gtext39y239pause3阶拟合在MATLAB运行窗口输入p3polyfitxy31y3pol...

数值计算方法实验报告

数值计算方法实验报告实验类别数值计算方法专业班级学号姓名XX大学XX学院实验一高斯列主元消去法实验类型设计性实验学时2学时实验内容1掌握列主元消去法的基本思路和迭代步骤2并能够利用列主元的高斯消去法解任意阶数的...

计算方法实验报告格式20xx

一实验总体要求1实验报告要求用实验报告纸2实验报告要求手写3根据规定格式写实验报告具体见第五节4实验报告前四项内容在上实验前写好5实验报告第五项在实验课上根据具体情况写6每节实验课下课前交实验报告7提倡实验程序...

计算方法实验报告 (2120xx5007)

数学计算方法实验报告老师黄昌斌姓名车松学号2120xx5007班级钱学森21班手机187xxxxxxxx题目一按两种顺序计算y哪个接近真值111y1000解1先加绝对值较大的数程序clearsum1000for...

华东交大《计算方法》实验指导书

计算方法实验指导书课程名称计算方法英文名称NumericalCalculationMethod一实验的性质目的和任务本实验是与本专业基础课计算方法相配套的旨在巩固专业课内容和学生编程的能力通过实验加强对数值方法...

15-16-1实验5(计算方法)12.23版本

实0验报告课程名称院系专业班级学号学生姓名指导教师开课时间计算方法数学科学系信息与计算科学沈林20xx至20xx学年第一学期一学生撰写要求按照实验课程培养方案的要求每门实验课程中的每一个实验项目完成后每位参加实...

数值计算方法实验教案10级用

数学与计算机学院实验教案开课单位数学与计算机学院课程名称数值计算方法专业年级20xx级任课教师周均教材名称数值计算方法李有法20xx20xx学年第1学期

计算方法-实验指导书20xx

计算方法实验指导书计算方法课程的任务有两个其一掌握以计算机为计算工具的各类数值计算方法及与此相关的理论其二利用学到的计算机编程语言将各类数值计算方法编写计算程序上机调试通过因此本课程不仅具有数学的抽象性与严格性...

计算方法实验三高荣双

实验报告课程名称院系专业班级学号学生姓名指导教师开课时间计算方法数学科学系数应1001B1031110107高荣双20xx至20xx学年第一学期一学生撰写要求按照实验课程培养方案的要求每门实验课程中的每一个实验...

计算方法实验报告(39篇)