计算方法实验报告格式
计算方法实验报告(模板)

专业
日期
学号
姓名
成绩
实验题目
指导老师
一.实验目的
1.熟练运用已学计算方法求解方程组。
2.加深对计算方法技巧,选择正确的计算方法来求解各种方程组。
3.培养使用电子计算机进行科学计算和解决问题的能力。
二.实验环境
实验环境:Matlab
三.实验内容
1.合理利用Gauss消元法求解下列方程组:
四.实验公式
高斯分解法:
lik=aik/akk
……
五.源程序
六.运行结果
截图学院专业Fra bibliotek日期学号
姓名
成绩
实验题目
指导老师
一.实验目的
1.熟练运用已学计算方法求解方程组
2.加深对计算方法技巧,选择正确的计算方法来求解各种方程组
3.培养使用电子计算机进行科学计算和解决问题的能力
二.实验环境
实验环境:Matlab
三.实验内容
一.实验目的
1.熟练运用已学计算方法求解方程组
2.加深对计算方法技巧,选择正确的计算方法来求解各种方程组
3.培养使用电子计算机进行科学计算和解决问题的能力
二.实验环境
实验环境:Matlab
三.实验内容
四.实验公式
五.源程序
六、运行结果
二.实验环境
实验环境:Matlab
三.实验内容
1.合理利用LU分解法求解下列方程组:
四.实验公式
1.LU分解法:
(1).u1j=a1j,j= 1,2,…,n
…
(2).y1=b1,yk=…j=1,2, …,k-1;
k=2,3, …,n
…
五.源程序
六、运行结果:
数值计算方法上机实验报告

数值计算方法上机实验报告
一、实验目的
本次实验的主要目的是熟悉和掌握数值计算方法,学习梯度下降法的
原理和实际应用,熟悉Python语言的编程基础知识,掌握Python语言的
基本语法。
二、设计思路
本次实验主要使用的python语言,利用python下的numpy,matplotlib这两个工具,来实现数值计算和可视化的任务。
1. 首先了解numpy的基本使用方法,学习numpy的矩阵操作,以及numpy提供的常见算法,如矩阵分解、特征值分解等。
2. 在了解numpy的基本操作后,可以学习matplotlib库中的可视化
技术,掌握如何将生成的数据以图表的形式展示出来。
3. 接下来就是要学习梯度下降法,首先了解梯度下降法的主要原理,以及具体的实际应用,用python实现梯度下降法给出的算法框架,最终
可以达到所期望的优化结果。
三、实验步骤
1. 熟悉Python语言的基本语法。
首先是熟悉Python语言的基本语法,学习如何使用Python实现变量
定义,控制语句,函数定义,类使用,以及面向对象编程的基本概念。
2. 学习numpy库的使用方法。
其次是学习numpy库的使用方法,学习如何使用numpy库构建矩阵,学习numpy库的向量,矩阵操作,以及numpy库提供的常见算法,如矩阵分解,特征值分解等。
3. 学习matplotlib库的使用方法。
计算方法实验报告册

实验一——插值方法实验学时:4实验类型:设计 实验要求:必修一 实验目的通过本次上机实习,能够进一步加深对各种插值算法的理解;学会使用用三种类型的插值函数的数学模型、基本算法,结合相应软件(如VC/VB/Delphi/Matlab/JAVA/Turbo C )编程实现数值方法的求解。
并用该软件的绘图功能来显示插值函数,使其计算结果更加直观和形象化。
二 实验内容通过程序求出插值函数的表达式是比较麻烦的,常用的方法是描出插值曲线上尽量密集的有限个采样点,并用这有限个采样点的连线,即折线,近似插值曲线。
取点越密集,所得折线就越逼近理论上的插值曲线。
本实验中将所取的点的横坐标存放于动态数组[]X n 中,通过插值方法计算得到的对应纵坐标存放于动态数组[]Y n 中。
以Visual C++.Net 2005为例。
本实验将Lagrange 插值、Newton 插值和三次样条插值实现为一个C++类CInterpolation ,并在Button 单击事件中调用该类相应函数,得出插值结果并画出图像。
CInterpolation 类为 class CInterpolation { public :CInterpolation();//构造函数CInterpolation(float *x1, float *y1, int n1);//结点横坐标、纵坐标、下标上限 ~ CInterpolation();//析构函数 ………… …………int n, N;//结点下标上限,采样点下标上限float *x, *y, *X;//分别存放结点横坐标、结点纵坐标、采样点横坐标float *p_H,*p_Alpha,*p_Beta,*p_a,*p_b,*p_c,*p_d,*p_m;//样条插值用到的公有指针,分别存放i h ,i α,i β,i a ,i b ,i c ,i d 和i m};其中,有参数的构造函数为CInterpolation(float *x1, float *y1, int n1) {//动态数组x1,y1中存放结点的横、纵坐标,n1是结点下标上限(即n1+1个结点) n=n1;N=x1[n]-x1[0]; X=new float [N+1]; x=new float [n+1]; y=new float [n+1];for (int i=0;i<=n;i++) {x[i]=x1[i]; y[i]=y1[i]; }for (int i=0;i<=N;i++) X[i]=x[0]+i; }2.1 Lagrange 插值()()nn i i i P x y l x ==∑,其中0,()nj i j j ni jx x l x x x =≠-=-∏对于一个自变量x ,要求插值函数值()n P x ,首先需要计算对应的Lagrange 插值基函数值()i l x float l(float xv,int i) //求插值基函数()i l x 的值 {float t=1;for (int j=0;j<=n;j++) if (j!=i)t=t*(xv-x[j])/(x[i]-x[j]); return t; }调用函数l(float x,int i),可求出()n P xfloat p_l(float x) //求()n P x 在一个点的插值结果 {float t=0;for (int i=0;i<=n;i++) t+=y[i]*l(x,i); return t; }调用p_l(float x)可实现整个区间的插值float *Lagrange() //求整个插值区间上所有采样点的插值结果 {float *Y=new float [N+1]; for (int k=0;k<=N;k++) Y[k]=p_l(x[0]+k*h); return Y; } 2.2Newton 插值010()(,,)()nn i i i P x f x x x x ω==∑,其中101,0()(),0i i j j i x x x i ω-==⎧⎪=⎨-≠⎪⎩∏,0100,()(,,)()ik i nk k j j j kf x f x x x x x ==≠=-∑∏对于一个自变量x ,要求插值函数值()n P x ,首先需要计算出01(,,)i f x x x 和()i x ωfloat *f() {//该函数的返回值是一个长度为n +1的动态数组,存放各阶差商 }float w(float x, int i) {//该函数计算()i x ω }在求()n P x 的函数中调用*f()得到各阶差商,然后在循环中调用w(float x)可得出插值结果 float p_n(float x) {//该函数计算()n P x 在一点的值 }调用p_n(float x)可实现整个区间的插值 float *Newton() {//该函数计算出插值区间内所有点的值 }2.3 三次样条插值三次样条插值程序可分为以下四步编写: (1) 计算结点间的步长i hi 、i α、i β;(2) 利用i hi 、i α、i β产生三对角方程组的系数矩阵和常数向量; (3) 通过求解三对角方程组,得出中间结点的导数i m ; (4) 对自变量x ,在对应区间1[,]i i x x +上,使用Hermite 插值; (5)调用上述函数,实现样条插值。
数值计算方法实验报告

数值计算方法实验报告实验目的:通过实验验证不同数值计算方法在求解数学问题时的精度和效率,并分析其优缺点。
实验原理:实验内容:本实验选取了三个典型的数值计算问题,并分别采用了二分法、牛顿迭代法和梯度下降法进行求解。
具体问题和求解方法如下:1. 问题一:求解方程sin(x)=0的解。
-二分法:利用函数值的符号变化将解空间不断缩小,直到找到满足精度要求的解。
-牛顿迭代法:通过使用函数的斜率来逼近方程的解,并不断逼近真实解。
-梯度下降法:将方程转化为一个极小化问题,并利用梯度下降的方式逼近极小值点,进而找到方程的解。
2.问题二:求解函数f(x)=x^2-3x+2的极小值点。
-二分法:通过确定函数在一个区间内的变化趋势,将极小值所在的区间不断缩小,从而找到极小值点。
-牛顿迭代法:通过使用函数的导数和二阶导数来逼近极小值点,并不断逼近真实解。
-梯度下降法:将函数转化为一个极小化问题,并利用梯度下降的方式逼近极小值点,进而找到函数的极小值点。
3. 问题三:求解微分方程dy/dx = -0.1*y的解。
-二分法:通过离散化微分方程,将微分方程转化为一个差分方程,然后通过迭代计算不同点的函数值,从而得到函数的近似解。
-牛顿迭代法:将微分方程转化为一个积分方程,并通过迭代计算得到不同点的函数值,从而得到函数的近似解。
-梯度下降法:将微分方程转化为一个极小化问题,并利用梯度下降的方式逼近极小值点,从而得到函数的近似解。
实验步骤:1.编写代码实现各个数值计算方法的求解过程。
2.对每个数值计算问题,设置合适的初始值和终止条件。
3.运行程序,记录求解过程中的迭代次数和每次迭代的结果。
4.比较不同数值计算方法的精度和效率,并分析其优缺点。
实验结果:经过实验测试,得到了如下结果:-问题一的二分法迭代次数为10次,求解结果为x=0;牛顿迭代法迭代次数为4次,求解结果为x=0;梯度下降法迭代次数为6次,求解结果为x=0。
-问题二的二分法迭代次数为10次,求解结果为x=1;牛顿迭代法迭代次数为3次,求解结果为x=1;梯度下降法迭代次数为4次,求解结果为x=1-问题三的二分法迭代次数为100次,求解结果为y=e^(-0.1x);牛顿迭代法迭代次数为5次,求解结果为y=e^(-0.1x);梯度下降法迭代次数为10次,求解结果为y=e^(-0.1x)。
东南大学计算方法实验报告

计算方法与实习实验报告学院:电气工程学院指导老师:***班级:160093******学号:********实习题一实验1 拉格朗日插值法一、方法原理n次拉格朗日插值多项式为:L n(x)=y0l0(x)+y1l1(x)+y2l2(x)+…+y n l n(x)n=1时,称为线性插值,L1(x)=y0(x-x1)/(x0-x1)+ y1(x-x0)/(x1-x0)=y0+(y1-x0)(x-x0)/(x1-x0)n=2时,称为二次插值或抛物线插值,精度相对高些L2(x)=y0(x-x1)(x-x2)/(x0-x1)/(x0-x2)+y1(x-x0)(x-x2)/(x1-x0)/(x1-x2)+y2(x-x0)(x-x1)/(x2-x0)/(x2-x1)二、主要思路使用线性方程组求系数构造插值公式相对复杂,可改用构造方法来插值。
对节点x i(i=0,1,…,n)中任一点x k(0<=k<=n)作一n 次多项式l k(x k),使它在该点上取值为1,而在其余点x i(i=0,1,…,k-1,k+1,…,n)上为0,则插值多项式为L n(x)=y0l0(x)+y1l1(x)+y2l2(x)+…+y n l n(x) 上式表明:n 个点x i(i=0,1,…,k-1,k+1,…,n)都是l k(x)的零点。
可求得l k三.计算方法及过程:1.输入节点的个数n2.输入各个节点的横纵坐标3.输入插值点4.调用函数,返回z函数语句与形参说明程序源代码如下:#include<iostream>#include<math.h>using namespace std;#define N 100double fun(double *x,double *y, int n,double p);void main(){int i,n;cout<<"输入节点的个数n:";cin>>n;double x[N], y[N],p;cout<<"please input xiangliang x= "<<endl;for(i=0;i<n;i++)cin>>x[i];cout<<"please input xiangliang y= "<<endl;for(i=0;i<n;i++)cin>>y[i];cout<<"please input LagelangrichazhiJieDian p= "<<endl;cin>>p;cout<<"The Answer= "<<fun(x,y,n,p)<<endl;system("pause") ;}double fun(double x[],double y[], int n,double p){double z=0,s=1.0;int k=0,i=0;double L[N];while(k<n){ if(k==0){ for(i=1;i<n;i++)s=s*(p-x[i])/(x[0]-x[i]);L[0]=s*y[0];k=k+1;}else{s=1.0;for(i=0;i<=k-1;i++)s=s*((p-x[i])/(x[k]-x[i]));for(i=k+1;i<n;i++) s=s*((p-x[i])/(x[k]-x[i]));L[k]=s*y[k];k++;}}for(i=0;i<n;i++)z=z+L[i];return z;}五.实验分析n=2时,为一次插值,即线性插值n=3时,为二次插值,即抛物线插值n=1,此时只有一个节点,插值点的值就是该节点的函数值n<1时,结果都是返回0的;这里做了n=0和n=-7两种情况3<n<100时,也都有相应的答案常用的是线性插值和抛物线插值,显然,抛物线精度相对高些n次插值多项式Ln(x)通常是次数为n的多项式,特殊情况可能次数小于n.例如:通过三点的二次插值多项式L2(x),如果三点共线,则y=L2(x)就是一条直线,而不是抛物线,这时L2(x)是一次式。
计算方法,二分法实验报告

实验报告 ___二分法班级:2007060101 学号:200706010103 姓名:严伟一、实验目的目的: 通过对二分法的编程练习与上机运算,进一步体会二分法的特点;二、实验内容要求内容要求: ①要求可随机输入区间[a,b]的值执行程序,算出误差限的值.②讨论a,b变化时,二分次数的变化;误差限变化时二分次数的变化;估算的次数与实际二分次数的符合情况;三、流程图四、算法①给定区间[a,b],并设f(a)与f(b)符合相反,取ε为根的容许误差, δ为|f(x)|的容许误差.令c=(a+b)/2 .②如果(c-a)< ε或|f(c)|<δ,则输出C,结束;否则执行③.③如果f(a)*f(b)>0, 则根位于区间[a, c]内,以c代替b; f(a)*f(b)< 0则根位于区间[c,b]内,以c代替a;重复①,②,③.直到区间[a, b]长度缩小到允许误差范围之内或f(c)=0,此时区间中点c即可作为所求的根。
五、实验结果应用方程:f(x)=x3+x2-3x-3=0⑴编写c语言程序如下:#include<stdio.h>#include<math.h>#define eps 5e-4#define delta 1e-6float f(float x){return x*x*x+x*x-3*x-3;}void main(){float a,b,c;int k;float fa,fb,fc;int n=1;scanf("%f,%f",&a,&b);printf("a=%f b=%f\n",a,b);k=(log(b-a)-log(eps))/log(2.0);printf("k=%d\n",k);fa=f(a);fb=f(b);do{if(fa*fb>0){printf("无解");break;}else{c=(a+b)/2;fc=f(c);if(fabs(fc)<delta)break;if(fa*fc<0){b=c;fb=fc;}if(fb*fc<0){a=c;fa=fc;}if((b-a)<eps)break;}printf("%d %f %f\n",n,c,fc);n++;}while(n=k );}⑵实例验证结果:①输入初始参数:a=1, b=2, EPS=5e-6 ;其结果为:②改变a, b的值为:a=0, b=2, EPS不变,仍为5e-6,其结果为:③改变EPS的值为:EPS=5e-4, a, b不变,仍为a=1, b=2,其结果为:六、估算次数与实际二分次数的分析和讨论I. 输入不同的区间初值a, b,二分次数的变化情况答:输入的区间范围越大,要达到相同的精确值,二分次数K会相应的增加。
计算方法-解线性方程组的直接法实验报告

cout<<endl;
for(k=i+1;k<m;k++)
{
l[k][i]=a[k][i]/a[i][i];
for(r=i;r<m+1;r++) /*化成三角阵*/
a[k][r]=a[k][r]-l[k][i]*a[i][r];
}
}
x[m-1]=a[m-1][m]/a[m-1][m-1];
{
int i,j;
float t,s1,s2;
float y[100];
for(i=1;i<=n;i++) /*第一次回代过程开始*/
{
s1=0;
for(j=1;j<i;j++)
{
t=-l[i][j];
s1=s1+t*y[j];
}
y[i]=(b[i]+s1)/l[i][i];
}
for(i=n;i>=1;i--) /*第二次回代过程开始*/
s2=s2+l[i][k]*u[k][r];
l[i][r]=(a[i][r]-s2)/u[r][r];
}
}
printf("array L:\n");/*输出矩阵L*/ for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%7.3f ",l[i][j]);
printf("\n");
{
s2=0;
for(j=n;j>i;j--)
计算方法实验报告2

实验报告2:解线性方程组的直接法姓名:杜娟学号:08012324 班级:勘查08-3班一.上机题目用高斯列主元消去法和LU分解法解线性方程组二.目的要求掌握用高斯列主元消去法和LU分解法设计程序,从而实现解线性方程组。
三.方法原理1.如果在一列中选取按模最大的元素,将其调到主干方程位置再做消元,则称为列主元消元法。
调换方程组的次序是为了使运算中做分母量的绝对值尽量地大,减少舍入误差的影响。
2.由高斯消元法得到启发,对消元的过程相当于将分解为一个上三角矩阵和一个下三角矩阵的过程。
如果直接分解得到和,。
这时方程化为,令,由解出;再由,解出。
这就是直接分解法。
四.算法步骤列主元消元法算法1.输入:方程组阶数n,方程组系数矩阵A和常数向量项b。
2.for k=1 to n-1 //选主元的消元过程{//选择{s=|a kk|,m=kfor u=k+1 to nif |a uk|>s then{m=u,s=| a uk|}for v=k to n //交换第k行和第m行{t=a kv; a kv=a mv; a mv=t}t=b k;b k=b m;b m=t}for i=k+1 to n{t=a ik/a kkfor j=k+1 to n{a ij=a ij-t*a kj}b i=b i-t*a kj}}3.for i:=n TO 1 //回代求解4.输出方程组的解 x i, i=1,2,…,n。
如果对于第k步,从k行至n行和从k列至n列中选取按模最大的,对第行和第行交换,对第列和第v列交换,这就是全主元消元法。
在k列和第v列交换时,还要记录下v的序号,以便恢复未知量xk和xv的位置。
LU分解法1计算的第一行元素要计算,则列出式(3.20)等号两边的第1行第1列元素的关系式:故。
一般地,由的第一行元素的关系式得到2计算的第一列元素要计算,则列出式(3.20)等号两边的第2行第1列元素的关系式:故。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算方法实验报告格式
小组名称:
组长姓名(班号):
小组成员姓名(班号):
按贡献排序情况:
指导教师评语:
小组所得分数:
一个完整的实验,应包括数据准备、理论基础、实验内容及方法,最终对实验结果进行分析,以达到对理论知识的感性认识,进一步加深对相关算法的理解,数值实验以实验报告形式完成,实验报告格式如下:
一、实验名称
实验者可根据报告形式需要适当写出.
二、实验目的及要求
首先要求做实验者明确,为什么要做某个实验,实验目的是什么,做完该实验应达到什么结果,在实验过程中的注意事项,实验方法对结果的影响也可以以实验目的的形式列出.
三、算法描述(实验原理与基础理论)
数值实验本身就是为了加深对基础理论及方法的理解而设置的,所以要求将实验涉及到的理论基础,算法原理详尽列出.
四、实验内容
实验内容主要包括实验的实施方案、步骤、实验数据准备、实验的算法以及可能用到的仪器设备.
五、程序流程图
画出程序实现过程的流程图,以便更好的对程序执行的过程有清楚的认识,在程序调试过程中更容易发现问题.
六、实验结果
实验结果应包括实验的原始数据、中间结果及实验的最终结果,复杂的结果可以用表格
形式列出,较为简单的结果可以与实验结果分析合并出现.
七、实验结果分析
实验结果分析包括对对算法的理解与分析、改进与建议.
数值实验报告范例
为了更好地做好数值实验并写出规范的数值实验报告,下面给出一简单范例供读者参考.
数值实验报告
小组名称: 小组成员(班号): 按贡献排序情况: 指导教师评语: 小组所得分数:
一、实验名称
误差传播与算法稳定性.
二、实验目的
1.理解数值计算稳定性的概念. 2.了解数值计算方法的必要性. 3.体会数值计算的收敛性与收敛速度.
三、实验内容
计算dx x x I n
n ⎰
+=
1
10
,1,2,,10n = . 四、算法描述
由 dx x x I n
n ⎰
+=
1
10
,知 dx x x I n n ⎰+=--101110,则
n
dx x dx x x x I I n n n n n 11010101011
11==++=+⎰⎰
---.
得递推关系: (I )=n I 1101
--n I n
,10,,2,1 =n . (II ))1
(1011
n n I n
I -=- ,1,,9,10 =n . 下面分别以(1)、(2)递推关系求解: 方案1 =
n I 1101
--n I n
,10,,2,1 =n . 当0=n 时,=+=
⎰
dx x I 1
010
1
㏑=1011㏑1.1,递推公式为
()10110,1,2,,10,ln 1.1.n
n I I n n I -⎧
=-=⎪⎨
⎪=⎩
(1) 方案2 )1
(1011n n I n
I -=
-,1,,9,10 =n . 当10<<x 时, n n n x x x x 10
110111≤+≤,则 dx x dx x x dx x n
n n 10
11011110101
⎰⎰⎰
≤+≤.
即
)
1(101)1(111+≤≤+n I n n .
取递推初值 )
110(22021])110(101)110(111[2110+=+++≈
I .递推公式为 11011(),10,9,,1,1021.
220(101)n n I I n n I -⎧
=-=⎪⎪
⎨⎪=+⎪⎩
(2) 取递推公式(1)中的初值095310.01.1ln 0≈=I ,得
10110, 1,2,,10,0.095310.
n
n I I n n I -⎧=-=⎪⎨
⎪≈⎩ 取递推公式(2)中的初值008678.010≈I ,得
1
1011(),10,9,,1,100.008678.
n n I I n n I -⎧
=-=⎪⎨
⎪≈⎩ 五、程序流程图
由于实验方案明显、简单,实现步骤及流程图省略.
六、实验结果
计算结果如表1-2:
表1-2 计算结果
七、实验结果分析
由递推公式(1)知当1.1ln 0=I 时,n I 应当为精确解,递推公式的每一步都没有误差的取舍,但计算结果033333.0~5=I >=016667.04~I ,6~
I 出现负值.由此看出,当n 较大时,用递推公式(1)中的n I ~
近似n I 是不正确的.
主要原因是初值095310.0~0=I 不是精确值,设有误差)~
(0I e ,由递推公式(1)知 )~
(10)~(1--=n n I e I e 则有
)~
()10()~(100)~(10)~(021I e I e I e I e n n n n -=-=-=--
误差)~(n I e 随n 的增大而迅速增加,增加到)~
(0I e 的n )10(-倍.由此可见,递推公式计算的误差不仅取决于初值的误差,公式的精确性,还依赖于误差的传递即递推计算的稳定性.
由递推公式(2)知 008678.010≈I ,n I 为估计值,并不精确,有1210
1
)(10≤I e ,而由)(10
1)(*
*
1n n I e I e -
=- 得 )()10
1()(**
0n n I e I e -
= 误差)(*
0I e 随递推公式逐步缩小.综上所述,在递推计算中,数值计算方法是非常重要的,
误差估计、误差传播及递推计算的稳定性都会直接影响递推结果.。