计算方法实验报告
数值分析(计算方法)课程设计实验报告(附程序)

n=4 时,max[L(X)-h(X)]=0.4020;
n=8 时,max[L(X)-h(X)]=0.1708;
n=10 时,max[L(X)-h(X)]=0.1092。
图象分析: 从图象可以看出随着插值节点数的增加出现异常的摆动,中间能较好的接近 原函数,但两边却出现很大的误差。
(3).对定义在(-5,5)上的函数
程序代码 2:
x=[-1:0.2:1]; y=1./(1+25.*x.^2); x0=[-1:0.01:1]; y0=lagrange(x,y,x0); y1=1./(1+25.*x0.^2);
plot(x0,y0,'--r'); hold on; plot(x0,y1,'-b'); x2=abs(y0-y1); max(x2) ; 程序代码3: n=3; for i=1:n x(i)=cos(((2.*i-1).*pi)./(2.*(n+1))); y(i)=1./(1+25.*x(i).*x(i)); end x0=-1:0.01:1; y0=lagrange(x,y,x0); y1=1./(1+25.*x0.^2); plot(x0,y0,'--r') hold on plot(x0,y1,'-b')
以 x1,x2,„,xn+1 为插值节点构造上述各函数的 Lagrange 插值多项式, 比较其 结果。
设计过程: 已知函数 f(x)在 n+1 个点 x0,x1,…,xn 处的函数值为 y0,y1,…,yn 。 求一 n 次多 项式函数 Pn(x),使其满足: Pn(xi)=yi,i=0,1,…,n. 解决此问题的拉格朗日插值多项式公式如下
计算方法实验报告

班级:地信11102班序号: 20姓名:任亮目录计算方法实验报告(一) (3)计算方法实验报告(二) (6)计算方法实验报告(三) (9)计算方法实验报告(四) (13)计算方法实验报告(五) (18)计算方法实验报告(六) (22)计算方法实验报告(七) (26)计算方法实验报告(八) (28)计算方法实验报告(一)一、实验题目:Gauss消去法解方程组二、实验学时: 2学时三、实验目的和要求1、掌握高斯消去法基础原理2、掌握高斯消去法法解方程组的步骤3、能用程序语言对Gauss消去法进行编程实现四、实验过程代码及结果1、实验算法及其代码模块设计(1)、建立工程,建立Gauss.h头文件,在头文件中建类,如下:class CGauss{public:CGauss();virtual ~CGauss();public:float **a; //二元数组float *x;int n;public:void OutPutX();void OutputA();void Init();void Input();void CalcuA();void CalcuX();void Calcu();};(2)、建立Gauss.cpp文件,在其中对个函数模块进行设计2-1:构造函数和析构函数设计CGauss::CGauss()//构造函数{a=NULL;x=NULL;cout<<"CGauss类的建立"<<endl;}CGauss::~CGauss()//析构函数{cout<<"CGauss类撤销"<<endl;if(a){for(int i=1;i<=n;i++)delete a[i];delete []a;}delete []x;}2-2:函数变量初始化模块void CGauss::Init()//变量的初始化{cout<<"请输入方程组的阶数n=";cin>>n;a=new float*[n+1];//二元数组初始化,表示行数for(int i=1;i<=n;i++){a[i]=new float[n+2];//表示列数}x=new float[n+1];}2-3:数据输入及输出验证函数模块void CGauss::Input()//数据的输入{cout<<"--------------start A--------------"<<endl;cout<<"A="<<endl;for(int i=1;i<=n;i++)//i表示行,j表示列{for(int j=1;j<=n+1;j++){cin>>a[i][j];}}cout<<"--------------- end --------------"<<endl;}void CGauss::OutputA()//对输入的输出验证{cout<<"-----------输出A的验证-----------"<<endl;for(int i=1;i<=n;i++){for(int j=1;j<=n+1;j++){cout<<a[i][j]<<" ";}cout<<endl;}cout<<"---------------END--------------"<<endl;}2-4:消元算法设计及实现void CGauss::CalcuA()//消元函数for(int k=1 ;k<n;k++){for(int i=k+1;i<=n;i++){double lik=a[i][k]/a[k][k];for(int j=k;j<=n+1;j++){a[i][j]-=lik*a[k][j];}a[i][k]=0; //显示消元的效果}}}2-5:回代计算算法设计及函数实现void CGauss::CalcuX()//回带函数{for(int i=n;i>=1;i--){double s=0;for(int j=i+1;j<=n;j++){s+=a[i][j]*x[j];}x[i]=(a[i][n+1]-s)/a[i][i];}}2-6:结果输出函数模块void CGauss::OutPutX()//结果输出函数{cout<<"----------------X---------------"<<endl;for(int i=1 ;i<=n;i++){cout<<"x["<<i<<"]="<<x[i]<<endl;}}(3)、“GAUSS消元法”主函数设计int main(int argc, char* argv[]){CGauss obj;obj.Init();obj.Input();obj.OutputA();obj.CalcuA();obj.OutputA();obj.CalcuX();obj.OutPutX();//obj.Calcu();return 0;2、实验运行结果计算方法实验报告(二)一、实验题目:Gauss列主元消去法解方程组二、实验学时: 2学时三、实验目的和要求1、掌握高斯列主元消去法基础原理(1)、主元素的选取(2)、代码对主元素的寻找及交换2、掌握高斯列主元消去法解方程组的步骤3、能用程序语言对Gauss列主元消去法进行编程实现四、实验过程代码及结果1、实验算法及其代码模块设计(1)、新建头文件CGuassCol.h,在实验一的基础上建立类CGauss的派生类CGuassCol公有继承类CGauss,如下:#include "Gauss.h"//包含类CGauss的头文件class CGaussCol:public CGauss{public:CGaussCol();//构造函数virtual ~CGaussCol();//析构函数public:void CalcuA();//列主元的消元函数int FindMaxIk(int k);//寻找列主元函数void Exchange(int k,int ik);//交换函数void Calcu();};(2)、建立CGaussCol.cpp文件,在其中对个函数模块进行设计2-1:头文件的声明#include "stdafx.h"#include "CGuassCol.h"#include "math.h"#include "iostream.h"2-2:派生类CGaussCol的构造函数和析构函数CGaussCol::CGaussCol()//CGaussCol类构造函数{cout<<"CGaussCol类被建立"<<endl;}CGaussCol::~CGaussCol()//CGaussCol类析构函数{cout<<"~CGaussCol类被撤销"<<endl;}2-3:高斯列主元消元函数设计及代码实现void CGaussCol::CalcuA()//{for(int k=1 ;k<n;k++){int ik=this->FindMaxIk(k);if(ik!=k)this->Exchange(k,ik);for(int i=k+1;i<=n;i++){float lik=a[i][k]/a[k][k];for(int j=k;j<=n+1;j++){a[i][j]-=lik*a[k][j];}}}}2-4:列主元寻找的代码实现int CGaussCol::FindMaxIk(int k)//寻找列主元{float max=fabs(a[k][k]);int ik=k;for(int i=k+1;i<=n;i++){if(max<fabs(a[i][k])){ik=i;max=fabs(a[i][k]);}}return ik;}2-5:主元交换的函数模块代码实现void CGaussCol::Exchange(int k,int ik)//做交换{for(int j=k;j<=n+1;j++){float t=a[k][j];a[k][j]=a[ik][j];a[ik][j]=t;}}(3)、建立主函数main.cpp文件,设计“Gauss列主元消去法”主函数模块3-1:所包含头文件声明#include "stdafx.h"#include "Gauss.h"#include "CGuassCol.h"3-2:主函数设计int main(int argc, char* argv[]){CGaussCol obj;obj.Init();//调用类Gauss的成员函数obj.Input();//调用类Gauss的成员函数obj.OutputA();//调用类Gauss的成员函数obj.CalcuA();obj.OutputA();obj.CalcuX();obj.OutPutX();return 0;}2、实验结果计算方法实验报告(三)一、实验题目:Gauss完全主元消去法解方程组二、实验学时: 2学时三、实验目的和要求1、掌握高斯完全主元消去法基础原理;2、掌握高斯完全主元消去法法解方程组的步骤;3、能用程序语言对Gauss完全主元消去法进行编程(C++)实现。
东南大学计算方法实验报告

计算方法与实习实验报告学院:电气工程学院指导老师:***班级: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)是一次式。
计算方法与计算 实验一误差分析

% 输出的量--每次迭代次数k和迭代值xk,
%
--每次迭代的绝对误差juecha和相对误差xiangcha,
误差分析
误差问题是数值分析的基础,又是数值分析中一个困难的课题。在实际计算 中,如果选用了不同的算法,由于舍入误差的影响,将会得到截然不同的结果。 因此,选取算法时注重分析舍入误差的影响,在实际计算中是十分重要的。同时, 由于在数值求解过程中用有限的过程代替无限的过程会产生截断误差,因此算法 的好坏会影响到数值结果的精度。 一、实验目的
因为运行后输出结果为: y 1.370 762 168 154 49, yˆ =1.370 744 664 189
38, R 1.750 396 510 491 47e-005, WU= 1.782 679 830 970 664e-005 104 . 所
以, yˆ 的绝对误差为 10 4 ,故 y
③ 运行后输出计算结果列入表 1–1 和表 1-2 中。
④ 将算法 2 的 MATLAB 调用函数程序的函数分别用 y1=15-2*x^2 和
y1=x-(2*x^2+x-15)/(4*x+1)代替,得到算法 1 和算法 3 的调用函数程序,将其保
存,运行后将三种算法的前 8 个迭代值 x1, x2 ,, x8 列在一起(见表 1-1),进行
的精确解 x* 2.5 比较,观察误差的传播.
算法 1 将已知方程化为同解方程 x 15 2x2 .取初值 x0 2 ,按迭代公式
xk1 15 2xk2
数值计算方法I实验报告

实验报告实验课程名称数值计算方法I开课实验室数学实验室学院理学院年级2012 专业班信息与计算科学2班学生姓名学号开课时间2012 至2013 学年第 2 学期实验一 误差分析试验1.1(病态问题)问题提出:考虑一个高次的代数多项式)1.1()()20()2)(1()(201∏=-=---=k k x x x x x p显然该多项式的全部根为1,2,…,20共计20个,且每个根都是单重的。
现考虑该多项式的一个扰动)2.1(0)(19=+x x p ε其中ε是一个非常小的数。
这相当于是对(1.1)中19x 的系数作一个小的扰动。
我们希望比较(1.1)和(1.2)根的差别,从而分析方程(1.1)的解对扰动的敏感性。
实验内容:为了实现方便,我们先介绍两个MA TLAB 函数:“roots ”和“poly ”。
roots(a)u =其中若变量a 存储n+1维的向量,则该函数的输出u 为一个n 维的向量。
设a 的元素依次为121,,,+n a a a ,则输出u 的各分量是多项式方程01121=+++++-n n n n a x a x a x a的全部根;而函数 poly(v)b =的输出b 是一个n+1维向量,它是以n 维向量v 的各分量为根的多项式的系数。
可见“roots ”和“poly ”是两个互逆的运算函数。
))20:1((;)2();21,1(;000000001.0ve poly roots ess ve zeros ve ess +===上述简单的MA TLAB 程序便得到(1.2)的全部根,程序中的“ess ”即是(1.2)中的ε。
实验要求:(1)选择充分小的ess ,反复进行上述实验,记录结果的变化并分析它们。
如果扰动项的系数ε很小,我们自然感觉(1.1)和(1.2)的解应当相差很小。
计算中你有什么出乎意料的发现?表明有些解关于如此的扰动敏感性如何?(2)将方程(1.2)中的扰动项改成18x ε或其它形式,实验中又有怎样的现象? (3)(选作部分)请从理论上分析产生这一问题的根源。
「实验报告计算方法」

「实验报告计算方法」实验报告的计算方法包括统计数据的处理、数据分析与图表的绘制等内容。
下面将以实验报告中常见的计算方法为例进行详细介绍。
首先,实验报告中常见的计算方法之一是平均值的计算。
在实验中,往往需要多次重复测量同一个实验现象或现象相关的参数,然后将测得的数据求平均值。
计算平均值的步骤如下:1.将测得的数据依次排列;2.求出所有数据的总和;3.将总和除以数据的个数,得到平均值。
例如,实验中测得物体从起点到终点的位移分别为32 cm、35 cm和38 cm,那么求位移的平均值时,先将这3个数相加得到:32 + 35 + 38 = 105 cm,然后将总和105除以3(数据的个数),得到位移的平均值为35 cm。
第二,实验报告中还常常需要计算数据组的标准差。
标准差是用来描述一组数据的离散程度的指标,用来衡量数据的分散程度。
计算标准差的步骤如下:1.求出数据的平均值;2.将每组数据减去平均值后的差值平方;3.将所有平方差值相加;4.将总和除以数据的个数;5.将上一步骤的结果开平方,得到标准差。
例如,实验中测得物体从起点到终点的位移分别为32 cm、35 cm和38 cm,先求位移的平均值得到35 cm,然后将每组数据减去平均值后的差值平方,得到:(32-35)^2 + (35-35)^2 + (38-35)^2 = 9 + 0 + 9 = 18,然后将平方差值相加得到18,再将18除以3(数据的个数),得到6,最后将6开平方,得到标准差为2.45 cm。
第三,实验报告中还涉及数据的比较与分析。
通过比较不同样本或者不同实验条件下的数据来推导结论。
常用的比较与分析方法有:T检验、方差分析、线性回归等。
T检验用于比较两组数据的均值是否存在显著差异。
根据两组数据的均值、标准差和数据个数,通过T检验的统计分析可以给出是否存在显著差异的结论。
方差分析用于比较多组数据的均值是否存在显著差异。
根据多组数据的均值、标准差和数据个数,通过方差分析的统计分析可以给出是否存在显著差异的结论。
计算方法实验报告习题2(浙大版)

计算方法实验报告实验名称: 实验2 列主元素消去法解方程组 1 引言工程实际问题中,线型方程的系数矩阵一般为低阶稠密矩阵和大型稀疏矩阵。
用高斯消去法解Ax =b 时,可能出现)(k kk a 很小,用作除数会导致中间结果矩阵元素数量级严重增长和舍入误差的扩散,使结果不可靠;采用选主元素的三角分解法可以避免此类问题。
高斯消去法的消去过程,实质上是将A 分解为两个三角矩阵的乘积A =LU ,并求解Ly =b 的过程。
回带过程就是求解上三角方程组Ux =y 。
所以在实际的运算中,矩阵L 和U 可以直接计算出,而不需要任何中间步骤,从而在计算过程中将高斯消去法的步骤进行了进一步的简略,大大提高了运算速度,这就是三角分解法。
采用选主元的方式与列主元高斯消去法一样,也是为了避免除数过小,从而保证了计算的精确度。
2 实验目的和要求通过列主元素消去法求解线性方程组,实现P A =LU 。
要求计算解x ,L ,U ,整形数组IP (i ),(i =1,2,…,)(记录主行信息)。
3 算法原理与流程图(1)原理将A 分解为两个三角矩阵的乘积A =LU 。
对方程组的增广矩阵[]b A A ,=经过k-1步分解后,可变成如下形式:⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡→-------------n nnnjnkk n n n i in ij ik k i i i k kn kj kk k k k k k n k j k k k k k k k n j k k n j k k b a a a l l l b a a a l l l b a a a l l l y u u u u l l y u u u u u l y u u u u u u A1,211,211,211,1,1,11,12,11,122221,2222111,1,11,11211第k 步分解,为了避免用绝对值很小的数kku 作除数,引进量1111 (,1,,;1,2,,) ()/ (1,2,,;1,2,,)k kj kj km mj m k ik ik im mk kk m u a l u j k k n k n l a l u u i k k n k n -=-=⎧=-=+=⎪⎪⎨⎪=-=++=⎪⎩∑∑11(,1,,)k i ik im mkm s a l u i k k n -==-=+∑,于是有kk u =ks 。
实验报告产量怎么算

实验报告产量怎么算实验报告产量的计算方法取决于实验的具体内容和目的。
一般来说,产量是实验中所得的产品数量或者产物的质量。
以下是几种常见实验的产量计算方法:1. 化学反应实验的产量计算:化学反应的产物通常可以通过化学方程式确定,根据反应物的量或质量来计算产物的量或质量。
产量计算的基本公式为:产量= 反应物限定用量×产物理论摩尔比×产物相对分子质量或相对原子质量。
例如,对于2H₂+ O₂→2H₂O反应,若限定用量为2mol的H₂,且理论反应比为2:1,产物为水(H₂O) 的相对分子质量为18g/mol,则产量为2mol ×1 ×18g/mol = 36g。
2. 物理实验的产量计算:例如,对于一个制备某种溶液的实验,产量可以根据所使用的溶质质量、摩尔质量以及溶液的摩尔浓度来计算。
产量计算的基本公式为:产量= 溶质的质量(或摩尔数)/ 溶液的摩尔浓度。
例如,若所制备溶液的溶质质量为4g,溶质的摩尔质量为36g/mol,溶液的摩尔浓度为0.2mol/L,则产量为4g / (0.2mol/L) = 20L。
3. 生物实验的产量计算:生物实验中的产量通常是指某种微生物、细胞或者酶反应所产生的某种产物的数量或质量。
产量的计算方法根据实验种类的不同而不同。
例如,在细菌培养实验中,可以通过对培养基中细菌的计数来计算产量;在酶催化实验中,可以通过反应产物的检测与定量来确定产量。
总而言之,实验报告产量的计算方法需要结合具体的实验内容和目的来确定。
无论是化学反应、物理实验还是生物实验,都需要根据实验条件和所得结果确定合适的产量计算方法,并保证计算的准确和可靠性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《计算方法》实验报告专业班级:学生姓名:学生学号:实验名称:实验一:非线性方程求根迭代法实验二:求解线性方程组(1) 实验三:求解线性方程组(2)实验四:数值积分实验五:数值微分实验一:一、实验名称非线性方程求根迭代法二、实验目的(1)熟悉非线性方程求根简单迭代法,牛顿迭代及牛顿下山法 (2)能编程实现简单迭代法,牛顿迭代及牛顿下山法 (3)认识选择迭代格式的重要性 (4) 对迭代速度建立感性的认识;分析实验结果体会初值对迭代的影响三、实验内容用牛顿下山法解方程013=--x x (初值为0.6)输入:初值,误差限,迭代最大次数,下山最大次数输出:近似根各步下山因子四、基本原理(计算公式)求非线性方程组的解是科学计算常遇到的问题,有很多实际背景.各种算法层出不穷,其中迭代是主流算法。
只有建立有效的迭代格式,迭代数列才可以收敛于所求的根。
因此设计算法之前,对于一般迭代进行收敛性的判断是至关重要的。
牛顿法也叫切线法,是迭代算法中典型方法,只要初值选取适当,在单根附近,牛顿法收敛速度很快,初值对于牛顿迭代 至关重要。
当初值选取不当可以采用牛顿下山算法进行纠正。
一般迭代:)(1k k x x φ=+ 0)()(=⇔=x f x x φ 牛顿公式:)()(1k k k k x f x f x x '-=+ 牛顿下山公式:)()(1k k k k x f x f x x '-=+λ下山因子 ,,,,322121211=λ 下山条件|)(||)(|1k k x f x f <+五、算法设计与实现(流程图)牛顿下山算法见流程图:六、个人理解:这个问题的关键之处不是公式的复杂性,而是如何对算法的实现提供一个条理清晰且方法合理的if 嵌套,这个算法中运用了许多判断,如何进行其判断结果的返回将是解决这个问题的重中之重。
把这个问题弄清楚,再结合本身并不复杂的算法公式,这个问题就可解了。
这个程序开始花费了我很长时间搞清楚如何进行判断返回的运算来解决if 语句嵌套。
图3.2牛顿下山算法流程图⇐⇐⇐⇐七、输入与输出图1图2八、结果讨论和分析可见,该程序的输出分为两个情况,两者的差别是初值选取的不同,所以说,牛顿法的收敛性依赖于初值x0的选取,如果x0偏离x的准确值较远,则牛顿法将可能发散。
所以要引入牛顿下山法来避免这一情况。
所以,当图2情况下,初值为0.6的时候,会进行牛顿下山法使结果可以进行再次迭代,解决了牛顿法初值选取问题。
实验二:一、实验名称求解线性方程组(Gauss - Seidel 迭代法)二、实验目的(1)熟悉求解线性方程组的有关理论和方法; (2)能编程实现雅可比及高斯-塞德尔迭代法、列主元高斯消去法、约当消去,追赶法 (3)通过测试,进一步了解各种方法的优缺点 (4) 根据不同类型的方程组,选择合适的数值方法三、实验内容用Gauss - Seidel 迭代法求解方程组⎪⎩⎪⎨⎧=+--=-+-=--2.453.82102.7210321321321x x x x x x x x x输入:系数矩阵A ,最大迭代次数N ,初始向量,误差限e输出:解向量四、基本原理(计算公式)无论是三次样条还是拟合问题最终都归结为线性方程组,求解线性方程组在数值分析中非常重要,在工程计算中也不容忽视。
线性方程组大致分迭代法和直接法。
只有收敛条件满足时,才可以进行迭代。
雅可比及高斯-塞德尔是最基本的两类迭代方法,最大区别是迭代过程中是否引用新值进行剩下的计算。
消元是最简单的直接法,并且也十分有效的,列主元高斯消去法对求解一般的线性方程组都适用,同时可以用来求矩阵对应的行列式。
约当消去实质是经过初等行变换将系数矩阵化为单位阵,主要用来求矩阵的逆。
在使用直接法,要注意从空间、时间两方面对算法进行优化。
高斯-塞德尔迭代:⎪⎪⎭⎫ ⎝⎛--=∑∑+=-=++n i j k j ij i j k j ij i ii k i x a x a b a x 1)(11)1()1(1 n i ,...,2,1=五、算法设计与实现(流程图,个人理解)图4.1G-S迭代算法流程图个人理解:该算法最考验人的地方在于对运算公式的理解,这个公式相对于其他几个实验来说是最难的,其原因在于要用到多重嵌套循环,而且其中对数组的运用对于很多同学来说也是比较困难的。
只要将其中依次将数组的值的和对另一个数组赋值的原理搞清楚以后,这个问题将很容易解决,所以,这一点,也是这个程序最考验人的地方。
六、输入与输出七、结果讨论和分析对于求解行列式来说,一般的方法很难求出,只能通过之前步骤的结果一步步地将结果求得,在这些迭代中,选取一个好的迭代方式,既避免了可能存在的发散情况,又加快了收敛次数。
上两图说明高斯赛德尔迭代对于某些迭代来说还是有缺陷的,并不能解出有效结果。
实验三:一、实验名称求解线性方程组(选主元高斯消去)二、实验目的(1)熟悉求解线性方程组的有关理论和方法;(2)能编程实现雅可比及高斯-塞德尔迭代法、列主元高斯消去法、约当消去,追赶法(3)通过测试,进一步了解各种方法的优缺点(4)根据不同类型的方程组,选择合适的数值方法三、实验内容图4.3列主元的高斯消去流程用选主元高斯消去求行列式值8234311263574123------四、基本原理(计算公式) 提示:A.nnmnnnm nn n n b b b b b a a a a A ...)1(.........)1(..................||111111111-=-===B. 消元结果直接存储在系数矩阵中C. 当消元过程发生两行对调的情况为偶数次时,行列式值为对角线乘积,否则为对角线乘积的相反数(5)用选主元约当消去分别对矩阵求其逆矩阵,若不可逆输出奇异标志⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--=232311111A 和⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡----=116504612A 提示:[][]1||-⇒A I IA五、算法设计与实现(流程图)六、个人理解:我感觉选主元高斯消去编程稍微有一些困难,难在对公式的理解,还有对数组的处理。
可能我从一开始就理解有误,只是把握住了其中心思想,但是对其函数的具体实现还是存在一些偏差,导致输出结果并不是很理想。
七、输入与输出八、结果讨论和分析感觉我这个程序运行还是有些问题,无法实现某些功能,仅仅能够解决行列式的最终求值问题。
实验四:一、实验名称数值积分二、实验目的(1) 熟悉复化梯形方法、复化Simpson 方法、梯形递推算法、龙贝格算法;(2) 能编程实现复化梯形方法、复化Simpson 方法、梯形递推算法、龙贝格算法; (3) 理解并掌握自适应算法和收敛加速算法的基本思想;(4) 分析实验结果体会各种方法的精确度,建立计算机求解定积分问题的感性认识三、实验内容(1) 用龙贝格算法计算dx xx1sin 输入:积分区间,误差限输出:序列Tn ,Sn,Cn,Rn 及积分结果四、基本原理(计算公式)在许多实际问题中,常常需要计算定积分dx x f ba ⎰)(的值。
根据微积分学基本定理,若被积函数f(x)在区间[a,b]上连续,只要能找到f(x)的一个原函数F(x),便可利用牛顿-莱布尼兹公式⎰-=ba a Fb F x f )()()(求得积分值。
但是在实际使用中,往往遇到如下困难,而不能使用牛顿-莱布尼兹公式。
(1) 找不到用初等函数表示的原函数(2) 虽然找到了原函数,但因表达式过于复杂而不便计算 (3) f(x)是由测量或计算得到的表格函数由于以上种种困难,有必要研究积分的数值计算问题。
利用插值多项式 )()(x f x P n ≈则积分dx x f ba ⎰)(转化为dx x P ban⎰)(,显然易算。
dx x P b an⎰)(称为插值型求积公式。
最简单的插值型求积公式是梯形公式和Simpson 公式,。
当求积结点提供较多,可以分段使用少结点的梯形公式和Simpson 公式,并称为复化梯形公式、复化Simpson 公式。
如步长未知,可以通过误差限的控制用区间逐次分半的策略自动选取步长的方法称自适应算法。
梯形递推公式给出了区间分半前后的递推关系。
由梯形递推公式求得梯形序列,相邻序列值作线性组合得Simpson 序列, Simpson 序列作线性组合得柯特斯序列, 柯特斯序列作线性组合的龙贝格序列。
若|R 2-R 1|<ε,则输出R2;否则…依此类推。
如此加工数据的过程叫龙贝格算法,如下图所示:复化梯形公式)]()(2)([21110n n k k n x f x f x f h T ++=∑-=复化Simpson 公式])(4)()(2)([61021110∑∑-=+-=+++=n k k n k n k n x f x f x f x f hS梯形递推公式∑-=++=10212)(22n k k n n x f h T T 加权平均公式:n nn S T T =--1442n n n C S S =--144222 n n n R C C =--144323 龙贝格算法大大加快了误差收敛的速度,由梯形序列O(h2) 提高到龙贝格序列的O(h8)五、算法设计与实现(流程图)(1) 龙贝格算法见流程图六、个人理解龙贝格算法其实是在梯形递推的基础之上生成的一种精度高,而且收敛速度也较快的一种算法。
对于梯形算法来说,程序比较容易编写,而龙贝格算法,程序中需要注意用龙贝格算法加速收敛的时候如何处理判断以后生成的返回值才能使程序正常运行。
而且,对于本题的特殊性,对于积分的函数中存在分母为x 的情况,在此情况下,就必须要讨论x 为0溢出的情况,刚开始编好的程序总是出现莫名其妙的输出,后来才发现是出现了分母为0的情况。
所以,在编程中,要注意细节,往往一个很好的程序,某一个不起眼的细节很可能影响整个图2.2梯形递推算法流程图图2.3龙贝格算法流程图程序的正常运行。
还有最后编写防止溢出的操作函数的时候,==不小心写为=,也找了很久的错误。
这些都是非常低级的错误,但是因为粗心,仍然出现了。
所以,以后编程要认真。
七、输入与输出八、结果讨论和分析龙贝格算法可以达到预期目的,求得所需要的结果。
但无法分析出是否节约了时间和效率,但绝对是个可行的办法。
实验五:一、实验名称微分方程的差分方法二、实验目的(1)熟悉数值微分中Euler法,改进Euler法,Rung-Kutta方法;(2)能编程实现Euler法,改进Euler法,Rung-Kutta方法;(3)通过实验结果分析各个算法的优缺点;(4)明确步长对算法的影响并理解变步长的Rung-Kutta方法三、实验内容(1)()⎪⎩⎪⎨⎧=-='102 y y x y y 0 < x<1取h=0.1时用Euler 法,改进Euler 法,Rung-Kutta 方法求其数值解并与精确解进行比较。