数值计算实验报告

时间:2024.5.14

实验课程名称           数值计算              

开课实验室             数统学院              

       xxxx学院年级xxx专业班xxxx

    xxx       xxxxxxx 

 xxxx xxxx学年第  x  学期

实验一:

实验三:

实验四:

实验五:


第二篇:大二下学期数值计算实验报告答案C++


#include<iostream>

#include<cmath>

#define M 100

using namespace std;

int main(){

       int i,j,n,k,t;

       float a[M][M],x[M],temp,sum=0;

    cout<<"输入方程的阶数:"<<endl;

       cin>>n;

       cout<<" 输入方程矩阵:"<<endl;

       for(i=0;i<n;i++)                                               //输入矩阵

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

                     cin>>a[i][j];

    for(k=0;k<n+1;k++){

              t=k;

              for(i=t+1;i<n;i++)                                     //选出最大元素

                     if((fabs(a[t][k]))<(fabs(a[i][k])))

                            t=i;

              if(t!=k)                                                    //交换行元素

                     for(i=k+1;i<n+1;i++){

                            temp=a[k][i];

                            a[k][i]=a[t][i];

                            a[t][i]=temp;

                     }

              for(i=k+1;i<n;i++){                                  //消元

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

                            a[i][j]-=(a[i][k]/a[k][k])*a[k][j];

              }

       }

       x[n-1]=a[n-1][n]/a[n-1][n-1];                                   //解出Xn

       for(i=n-2;i>=0;i--){                                                 //解出其它解

              for(j=i;j<n;j++){

            if(j==i)  continue;

                     sum+=a[i][j]*x[j];

              }

              x[i]=(a[i][n]-sum)/a[i][i];

       }

       printf("最终解得: \n");

       for(i=0;i<n;i++)                                               //输出结果

              cout<<"x["<<i<<"]="<<x[i]<<endl;

       return 0;

}

#include<iostream>

#include<stdlib.h>

using namespace std;

int main()

{

       int n;

       do{

              cout<<"输入三对角方程组的变量的数目N:";

           cin>>n;

       }while(n<1);

       cout<<"请依次输入三对角方程组每行的数据(0元素除外):\n";

       double a[100],b[100],c[100],f[100];

       cin>>*b>>*c>>*f;

       for(int i=1;i<n-1;++i) cin>>*(a+i-1)>>*(b+i)>>*(c+i)>>*(f+i);

       cin>>*(a+i-1)>>*(b+i)>>*(f+i);

       for(i=0;i<n-1;++i){

              *(c+i)/=(*(b+i));

              *(b+i+1)-=(*(a+i))*(*(c+i));

       }

       *b=(*f)/(*b);

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

              *(b+i)=((*(f+i))-(*(a+i-1))*(*(b+i-1)))/(*(b+i));

       *(a+n-1)=*(b+n-1);

       for(i=n-2;i>=0;--i)

              *(a+i)=*(b+i)-(*(c+i))*(*(a+i+1));

       cout<<"方程的解如下:\n";

    for(i=1;i<n;++i) cout<<"X["<<i<<"]:"<<*(a+i-1)<<endl;

       return 0;

}

#include<iostream>

#include<cmath>

using namespace std;

void main()

{

       int  i,j,n,x;

       double m=0,p,a[100],b[100];

       cout<<"插入节点数:";                                   //得到节点数

              cin>>n;

       cout<<"请输入节点x值:"<<endl;           //得到节点值,即X

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

              cin>>a[i];

       cout<<"请输入f(x)值:"<<endl;               //得到Y

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

              cin>>b[i];

              cout<<"请输入x1:"<<endl;              //取未知X

       cin>>x;

       for(i=0;i<n;i++){                                      //用拉格朗日插值法求解

              p=1;

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

                     if(i!=j)

                            p*=(x-a[j])/(a[i]-a[j]);

                     else

                     continue;

              }

              m+=p*b[i];

       }

       cout<<m<<endl;                                       //输出结果的Y

}

#include <iostream>

using namespace std;

int main()

{

       int n;

       double x;

       double a[100],f[100];

       do{        

              cout<<"输入插值点的数目n:";

              cin>>n;

       }while(n<1);  

       cout<<"输入插值点的数据:"<<endl;

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

              cin>>*(a+i)>>*(f+i);

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

              for(int j=n-1;j>i;--j)

                     *(f+j)=(*(f+j)-*(f+j-1))/(*(a+j)-*(a+j-i-1));

       cout<<"输入所求的横坐标:";

       cin>>x;

       double result=*f;   

       for(i=1;i<n;++i) {

              double temp=1;

              for(int j=0;j<i;++j)

                     temp*=(x-*(a+j));

              result+=(*(f+i))*temp;

       }

       cout<<"所求的函数值为:"<<result<<endl;     

       return 1;

}

#include<iostream>

#include<cmath>

using namespace std;

double fun(double a)

{

       if(a==0)

              a+=0.00000000001;

       return sin(a)/a;

}

double T(double a,double b,double E)

{

       double h=(b-a)/2;

       double r1=(fun(a)+fun(b))*h;

       int n=1;

       double r0,s,e;

       do{r0=r1;

              s=0;

              for(int i=0;i<=(n-1);i++)

                     s=s+fun((b-a)*i/n+a+(b-a)/(2*n));

              r1=r0/2+s*h/n;

              e=fabs(r1-r0);

              n=2*n;

       }while(e>3*E);

       cout<<n<<endl;

       return r1;

}

void main(){

       double a,b,e;

       cout<<"输入待求积分的下届a和上届b及精度要求e"<<endl;

       cin>>a>>b>>e;

       cout<<"可求得积分:"<<T(a,b,e)<<endl;

}

#include <iostream>

#include <math.h>

using namespace std;

double fun(double x);

int main()

{

       double a=0,b=1,eps=0.0000001;

      

       double T[10];

       int l=1;

       T[0]=(b-a)*(fun(a)+fun(b))/2;

       double T1,T2;

       int flag;

       do{

              flag=0;

              int n=pow(2,l-1);

              double h=(b-a)/n;  

              double temp=0;

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

                     temp+=fun(a+(i+1.0/2)*h);

              T1=T[0]/2+h*temp/2;

              for(int m=1;m<l;++m){

                     T2=(pow(4,m)*T1-T[m-1])/(pow(4,m)-1);

                     T[m-1]=T1;

                     T1=T2;

              }           

              T2=(pow(4,1)*T1-T[l-1])/(pow(4,1)-1);

              if(fabs(T2-T[l-1])>eps){

                     T[l-1]=T1;

                     T[l]=T2;

                     ++l;

                     flag=1;

              }

       }while(flag);

       cout<<"所求积分为:"<<T2<<endl;

       return 0;

}

double fun(double x)

{

       if(x==0) return 1;

       return(sin(x)/x);

}

#include <stdlib.h>

#include <iostream.h>

int main() {

       double h=0.25,a,b,d=5;

       double x=0.0,y=2.0;

       cout<<"x\ty\n";

       cout<<x<<"\t"<<y<<endl;

       while(x<d){

              a=y+h*(-x*y*y);

              x+=h;

              b=y+h*(-x*a*a);

              y=(b+a)/2.0;

              cout<<x<<"\t"<<y<<endl;

       }

       return 0;

}

#include <iostream.h>

#include <stdlib.h>

int main() {

       double h=0.25,k1=0,k2=0,k3=0,k4=0,d=5,h2=h/2;

       double x=0.0,y=2.0;

       cout<<"x\ty"<<endl;

       cout<<x<<"\t"<<y<<endl;

       while(x<d) {

              k1=(-x*y*y);

              x+=h2;

              k2=-x*(y+h2*k1)*(y+h2*k1);

              k3=-x*(y+h2*k2)*(y+h2*k2);

              x+=h2;

              k4=-x*(y+h2*k3)*(y+h2*k3);

              y+=h/6*(k1+2*k2+2*k3+k4);

              cout<<x<<"\t"<<y<<endl;

       }

       return 0;

}

#include<iostream.h>

#include<cmath>

#define eps 1e-5

void main()

{

       int n=4;

       double a[4][4]={{7,2,1,-2},{9,15,3,2},{-2,-2,11,5},{1,3,2,13}};

       double y[4]={4,7,-1,0};

       double x[4]={0};

       double xx[4]={0};

       int M=20;//最大迭代数

       int i,j,k;

       double dif=1.0;

       double sum=0.0;

       double residual = 0.0;

       for(k=1;(k<=M)&&(dif>eps);k++){

              dif=0.0;

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

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

                            if(j<i)sum+=a[i][j]*x[j];

                            if(j>i)sum+=a[i][j]*xx[j];

                     }           

                     x[i]=(y[i]-sum)/a[i][i];

                     sum=0.0;

              }

              residual=0.0;

              for(int m=0;m<n;m++){         

                 if(fabs(x[m]-xx[m])>residual)

                     residual=fabs(x[m]-xx[m]);

               }

              dif=residual;

              cout<<"第"<<k<<"次迭代的结果:";

           for(int p=0;p<n;p++){

                     cout<<x[p]<<"  ";

                     xx[p]=x[p];

              }

              cout<<endl;

       }

        cout<<endl<<"迭代计算的结果为:"<<endl;

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

              cout<<xx[k]<<"\t";

        cout<<endl;

}

#include<iostream.h>

#include<cmath>

void main()

{

       float x1,x0,f,f1;

       x1=1.00;

       do{

              x0=x1;

              f=x0*x0*x0-x0-1;

              f1=3*x0*x0-1;

              x1=x0-f/f1;    

       }while(fabs(x1-x0)>=1e-5);

       cout<<"THe root of equation is "<<x1<<endl;

}

更多相关推荐:
数值计算方法上机实验报告

数值计算方法上机实验报告数值计算方法上机实验报告实验目的复习和巩固数值计算方法的基本数学模型全面掌握运用计算机进行数值计算的具体过程及相关问题利用计算机语言独立编写调试数值计算方法程序培养学生利用计算机和所学理...

数值计算实验报告

线性方程的数值解法一课题名称二分法求解非线性方程二引言目的求方程fx0的根二分法所使用的方法主要是介值定理它的基本思想是逐步缩小根存在的区间搜索根所在的位置许多实际算法表现为某种无穷递推过程的阶段实现这类算法不...

数值计算方法实验报告

目录实验一误差定积分1实验二非线性方程求根4一二实验三实验四实验五牛顿迭代法4牛顿下山法5解线性代数方程组列主元消元法7解线性代数方程组追赶法9插值与拟合三次样条差值1112345678910111213141...

数值计算方法实验报告

数值计算方法实验报告实验题目二分法求非线性方程的根专业班级11级数学师范二班姓名学号20xx020xx056指导老师李梦联系电话188xxxxxxxx一实验目的熟悉二分法求方程近似根的数值方法与用计算器解出的值...

数值计算实验报告

20##级6班###(学号)计算机数值方法实验报告成绩册姓名:学号:成绩:数值计算方法与算法实验报告学期:20##至___20##第1学期20##年10月26日课程名称:__数值计算方法与算法__专业:信息与计…

数值计算实验报告

数值计算实验报告

数值计算LU分解实验报告

实验报告课程名称数值计算方法实验报告五实验报告格式20xx年1月18日

汇编语言第7次实验报告:非数值运算程序设计

四川大学计算机学院软件学院实验报告123456789

数值计算实验解三对角线性方程组的追赶法

实验报告实验课程名称计算机数值计算实验项目名称追赶法年级10级专业信计学生姓名成富学号1007010167理学院实验时间20xx年3月26日学生实验室守则一按教学安排准时到实验室上实验课不得迟到早退和旷课二进入...

数学实验“欧拉数值算法,Runge-Kutta数值算法”实验报告(内含matlab程序)

西京学院数学软件实验任务书实验二十四实验报告一实验名称欧拉数值算法显式隐式欧拉预估校正法RungeKutta数值算法二实验目的进一步熟悉欧拉数值算法显式隐式欧拉预估校正法RungeKutta数值算法三实验要求运...

《算法与数据结构》实验报告(20xx0301)

内蒙古大学计算机学院amp软件学院算法与数据结构实验报告算法与数据结构实验报告班级姓名学号实验1线性表的应用6学时问题描述通过单链表实现整数集合的交并差运算其中集合A与集合B差运算的结果是属于集合A但不属于集合...

数值计算方法实验报告

数值计算方法实验报告专业年级大学本科二年级班级应数11102班学号1104991115姓名徐沈和成绩20xx年6月9日1一实验名称复化求积法二实验题目测得飞机在高空h时的上升速度vh的数据如下表一所示飞机从地面...

数值计算实验报告(29篇)