计算方法实验

合集下载

计算方法实验报告

计算方法实验报告

计算方法实验报告计算方法实验报告概述:计算方法是一门研究如何用计算机解决数学问题的学科。

在本次实验中,我们将学习和应用几种常见的计算方法,包括数值逼近、插值、数值积分和常微分方程求解。

通过实验,我们将深入了解这些方法的原理、应用场景以及其在计算机科学和工程领域的重要性。

数值逼近:数值逼近是一种通过使用近似值来计算复杂函数的方法。

在实验中,我们通过使用泰勒级数展开和牛顿迭代法等数值逼近技术,来计算函数的近似值。

这些方法在科学计算和工程领域中广泛应用,例如在信号处理、图像处理和优化问题中。

插值:插值是一种通过已知数据点来估算未知数据点的方法。

在实验中,我们将学习和应用拉格朗日插值和牛顿插值等方法,以及使用这些方法来构造函数的近似曲线。

插值技术在数据分析、图像处理和计算机图形学等领域中具有重要的应用价值。

数值积分:数值积分是一种通过将函数曲线划分为小矩形或梯形来估算函数的积分值的方法。

在实验中,我们将学习和应用矩形法和梯形法等数值积分技术,以及使用这些方法来计算函数的近似积分值。

数值积分在物理学、金融学和统计学等领域中被广泛使用。

常微分方程求解:常微分方程求解是一种通过数值方法来求解微分方程的方法。

在实验中,我们将学习和应用欧拉法和龙格-库塔法等常微分方程求解技术,以及使用这些方法来求解一些常见的微分方程。

常微分方程求解在物理学、生物学和工程学等领域中具有广泛的应用。

实验结果:通过实验,我们成功地应用了数值逼近、插值、数值积分和常微分方程求解等计算方法。

我们得到了准确的结果,并且在不同的应用场景中验证了这些方法的有效性和可靠性。

这些实验结果将对我们进一步理解和应用计算方法提供重要的指导和支持。

结论:计算方法是计算机科学和工程领域中的重要学科,它提供了解决复杂数学问题的有效工具和方法。

通过本次实验,我们深入了解了数值逼近、插值、数值积分和常微分方程求解等计算方法的原理和应用。

这些方法在科学研究、工程设计和数据分析等领域中具有广泛的应用价值。

数学计算方法实验报告

数学计算方法实验报告

数学计算方法实验报告习题二2.估计用二分法求方程f(x)=x3+4x2-10=0在区间[1,2]内根的近似值,为使方程不超过10时所需的二分次数。

f(x k)程序过程:function two (tolerance)a=1;b=2;counter=0;while (abs(b-a)>tolerance)c=(a+b)/2;fa=a^3+4*a^2-10;fb=b^3+4*b^2-10;fc=c^3+4*c^2-10;if ((fa==0|fb==0)) disp(counter);elseif (fa*fc<0)b=c;counter=counter+1;elseif (fb*fc<0)a=c;counter=counter+1;elseif (fb==0)disp(counter);endendsolution=(a+b)/2;disp(solution);disp(counter);实验结果:6.取x0=1.5,用牛顿迭代法求第三中的方程根.f(x)=x3+4x2-10=0的近似值(精确到||x k+1-x k|≦10-5,并将迭代次数与3题比较。

程序过程:function six (g)a=1.5;fa=a^3+4*a^2-10;ga=3*a^2+8*a;b=a-fa/ga;k=1;while(abs(b-a)>g)a=b;fa=a^3+4*a^2-10;ga=3*a^2+8*a;b=a-fa/ga;k=k+1;endformat long;disp(a);disp(k);实验结果:程序结果计算结果8.用弦割法求方程f(x)=x3-3x2-x+9=0在区间[-2,-1]内的一个实根近似值x k,|f(x k)|≦10-5.程序过程:function eight (t)a=-2;b=-1;fa=a^3-3*a^2-a+9;fb=b^3-3*b^2-b+9;c=b-fb*(b-a)/(fb-fa);k=1;while(abs(c-b)>t)a=b;b=c;fa=a^3-3*a^2-a+9;fb=b^3-3*b^2-b+9;c=b-fb*(b-a)/(fb-fa);k=k+1;endformat long;disp(k);disp(b);实验结果: 计算结果9.用艾特肯算法求方程x3+4x2-10=0在区间[1,2]内的根的近似值(取x0=1.5,g(x)=410 x ,精确到|x k+1-x k |≦10-5,并与2,3,6结果比较。

计算方法_实验报告

计算方法_实验报告

一、实验目的1. 理解并掌握计算方法的基本概念和原理;2. 学会使用计算方法解决实际问题;3. 提高编程能力和算法设计能力。

二、实验内容本次实验主要涉及以下内容:1. 线性方程组的求解;2. 多项式插值;3. 牛顿法求函数零点;4. 矩阵的特征值和特征向量求解。

三、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 科学计算库:NumPy、SciPy四、实验步骤及结果分析1. 线性方程组的求解(1)实验步骤a. 导入NumPy库;b. 定义系数矩阵A和增广矩阵b;c. 使用NumPy的linalg.solve()函数求解线性方程组。

(2)实验结果设系数矩阵A和增广矩阵b如下:A = [[2, 1], [1, 2]]b = [3, 2]解得:x = [1, 1]2. 多项式插值(1)实验步骤a. 导入NumPy库;b. 定义插值点x和对应的函数值y;c. 使用NumPy的polyfit()函数进行多项式拟合;d. 使用poly1d()函数创建多项式对象;e. 使用多项式对象计算插值点对应的函数值。

(2)实验结果设插值点x和对应的函数值y如下:x = [1, 2, 3, 4, 5]y = [1, 4, 9, 16, 25]拟合得到的二次多项式为:f(x) = x^2 + 1在x = 3时,插值得到的函数值为f(3) = 10。

3. 牛顿法求函数零点(1)实验步骤a. 导入NumPy库;b. 定义函数f(x)和导数f'(x);c. 设置初始值x0;d. 使用牛顿迭代公式进行迭代计算;e. 判断迭代结果是否满足精度要求。

(2)实验结果设函数f(x) = x^2 - 2x - 3,初始值x0 = 1。

经过6次迭代,得到函数零点x ≈ 3。

4. 矩阵的特征值和特征向量求解(1)实验步骤a. 导入NumPy库;b. 定义系数矩阵A;c. 使用NumPy的linalg.eig()函数求解特征值和特征向量。

计算方法实验报告

计算方法实验报告

班级:地信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++)实现。

数值计算方法实验报告

数值计算方法实验报告

数值计算方法实验报告实验目的:通过实验验证不同数值计算方法在求解数学问题时的精度和效率,并分析其优缺点。

实验原理:实验内容:本实验选取了三个典型的数值计算问题,并分别采用了二分法、牛顿迭代法和梯度下降法进行求解。

具体问题和求解方法如下: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)是一次式。

计算方法实验报告(附代码)

计算方法实验报告(附代码)

实验一 牛顿下山法实验说明:求非线性方程组的解是科学计算常遇到的问题,有很多实际背景.各种算法层出不穷,其中迭代是主流算法。

只有建立有效的迭代格式,迭代数列才可以收敛于所求的根。

因此设计算法之前,对于一般迭代进行收敛性的判断是至关重要的。

牛顿法也叫切线法,是迭代算法中典型方法,只要初值选取适当,在单根附近,牛顿法收敛速度很快,初值对于牛顿迭代 至关重要。

当初值选取不当可以采用牛顿下山算法进行纠正。

牛顿下山公式:)()(1k k k k x f x f x x '-=+λ下山因子 ,,,,322121211=λ下山条件|)(||)(|1k k x f x f <+实验代码:#include<iostream> #include<iomanip> #include<cmath>using namespace std;double newton_downhill(double x0,double x1); //牛顿下山法函数,返回下山成功后的修正初值double Y; //定义下山因子Y double k; //k为下山因子Y允许的最小值double dfun(double x){return 3*x*x-1;} //dfun()计算f(x)的导数值double fun1(double x){return x*x*x-x-1;} //fun1()计算f(x)的函数值double fun2(double x) {return x-fun1(x)/dfun(x);} //fun2()计算迭代值int N; //N记录迭代次数double e; //e表示要求的精度int main(){double x0,x1;cout<<"请输入初值x0:";cin>>x0;cout<<"请输入要求的精度:";cin>>e;N=1;if(dfun(x0)==0){cout<<"f'(x0)=0,无法进行牛顿迭代!"<<endl;}x1=fun2(x0);cout<<"x0"<<setw(18)<<"x1"<<setw(18)<<"e"<<setw(25)<<"f(x1)-f(x0)"<<endl;cout<<setiosflags(ios::fixed)<<setprecision(6)<<x0<<" "<<x1<<" "<<fabs(x1-x0)<<" "<<fabs(fun1(x1))-fabs(fun1(x0))<<endl;if(fabs(fun1(x1))>=fabs(fun1(x0))){ //初值不满足要求时,转入牛顿下山法x1=newton_downhill(x0,x1);} //牛顿下山法结束后,转入牛顿迭代法进行计算while(fabs(x1-x0)>=e){ //当精度不满足要求时N=N+1;x0=x1;if(dfun(x0)==0){cout<<"迭代途中f'(x0)=0,无法进行牛顿迭代!"<<endl;} x1=fun2(x0);cout<<setiosflags(ios::fixed)<<setprecision(6)<<x0<<" "<<x1<<" "<<fabs(x1-x0)<<endl;}cout<<"迭代值为:"<<setiosflags(ios::fixed)<<setprecision(6)<<x1<<'\n';cout<<"迭代次数为:"<<N<<endl;return 0;}double newton_downhill(double x0,double x1){Y=1;cout<<"转入牛顿下山法,请输入下山因子允许的最小值:";cin>>k;while(fabs(fun1(x1))>=fabs(fun1(x0))){if(Y>k){Y=Y/2;}else {cout<<"下山失败!";exit(0);}x1=x0-Y*fun1(x0)/dfun(x0);}//下山成功则cout<<"下山成功!Y="<<Y<<",转入牛顿迭代法计算!"<<endl;return x1;}实验结果:图4.1G-S 迭代算法流程图实验二 高斯-塞德尔迭代法实验说明:线性方程组大致分迭代法和直接法。

计算方法实验报告

计算方法实验报告

实验一:误差传播与算法稳定性实验目的:体会稳定性在选择算法中的地位。

实验内容:考虑一个简单的由积分定义的序列10I ,0,1,10nn x dx n a x==+⎰其中a 为参数,分别对0.05a =及15a =按下列两种方法计算。

方案1:用递推公式11,1,2,,10n n I aI n n-=-+= 递推初值可由积分直接得01lna I a+= 方案2:用递推公式111(),,1,,1n n I I n N N a n-=-+=-根据估计式当1n a n ≥+时,11(1)(1)(1)n I a n a n <<+++或当01n a n ≤<+时,11(1)(1)n I a n n<≤++ 取递推初值 当1n a n ≥+时, 11121()2(1)(1)(1)2(1)(1)N N a I I a N a N a a N +≈+=+++++ 当01n a n ≤<+时,111()2(1)(1)N N I I a N N≈+++ 实验要求:列出结果,并对其稳定性进行分析比较,说明原因。

实验二:非线性方程数值解法实验目的:探讨不同方法的计算效果和各自特点 实验内容:应用算法(1)牛顿法;(2)割线法 实验要求:(1)用上述各种方法,分别计算下面的两个例子。

在达到精度相同的前提下,比较其迭代次数。

(I )31080x x +-=,取00x =;(II) 2281(0.1)sin 1.060x x x -+++=,取00x =;(2) 取其它的初值0x ,结果如何?反复选取不同的初值,比较其结果; (3) 总结归纳你的实验结果,试说明各种方法的特点。

实验三:选主元高斯消去法----主元的选取与算法的稳定性问题提出:Gauss 消去法是我们在线性代数中已经熟悉的。

但由于计算机的数值运算是在一个有限的浮点数集合上进行的,如何才能确保Gauss 消去法作为数值算法的稳定性呢?Gauss 消去法从理论算法到数值算法,其关键是主元的选择。

数值计算方法实验报告

数值计算方法实验报告

一、实验目的1. 熟悉数值计算的基本概念和方法;2. 掌握数值计算的基本原理和算法;3. 提高编程能力和数值计算能力;4. 通过实验,加深对数值计算方法的理解和应用。

二、实验内容1. 矩阵运算2. 线性方程组求解3. 函数求值4. 微分方程求解三、实验步骤1. 矩阵运算(1)编写程序实现矩阵的加法、减法、乘法运算;(2)编写程序实现矩阵的转置运算;(3)编写程序实现矩阵的逆运算。

2. 线性方程组求解(1)编写程序实现高斯消元法求解线性方程组;(2)编写程序实现雅可比迭代法求解线性方程组;(3)编写程序实现高斯-赛德尔迭代法求解线性方程组。

3. 函数求值(1)编写程序实现牛顿迭代法求函数的零点;(2)编写程序实现二分法求函数的零点;(3)编写程序实现割线法求函数的零点。

4. 微分方程求解(1)编写程序实现欧拉法求解一阶微分方程;(2)编写程序实现龙格-库塔法求解一阶微分方程;(3)编写程序实现龙格-库塔-法求解二阶微分方程。

四、实验结果与分析1. 矩阵运算(1)矩阵加法、减法、乘法运算结果正确;(2)矩阵转置运算结果正确;(3)矩阵逆运算结果正确。

2. 线性方程组求解(1)高斯消元法求解线性方程组,结果正确;(2)雅可比迭代法求解线性方程组,结果正确;(3)高斯-赛德尔迭代法求解线性方程组,结果正确。

3. 函数求值(1)牛顿迭代法求函数的零点,结果正确;(2)二分法求函数的零点,结果正确;(3)割线法求函数的零点,结果正确。

4. 微分方程求解(1)欧拉法求解一阶微分方程,结果正确;(2)龙格-库塔法求解一阶微分方程,结果正确;(3)龙格-库塔-法求解二阶微分方程,结果正确。

五、实验总结本次实验通过对数值计算方法的学习和实践,使我对数值计算有了更深入的了解。

以下是我对本次实验的总结:1. 矩阵运算是数值计算的基础,熟练掌握矩阵运算对于解决实际问题具有重要意义;2. 线性方程组求解是数值计算中常见的问题,高斯消元法、雅可比迭代法和高斯-赛德尔迭代法是常用的求解方法;3. 函数求值是数值计算中另一个常见问题,牛顿迭代法、二分法和割线法是常用的求解方法;4. 微分方程求解是数值计算中的难点,欧拉法、龙格-库塔法和龙格-库塔-法是常用的求解方法。

计算方法实验方法过程

计算方法实验方法过程

计算方法实验方法过程
计算方法和实验方法是科学研究中的重要手段,它们可以帮助我们探索未知的领域和验证假设。

以下是计算方法和实验方法的详细过程:
确定研究问题:首先需要确定一个具体的研究问题,这通常是基于现实生活中的现象或实验现象,并具有实际应用价值。

收集数据:根据研究问题,需要收集相关的数据。

这可以通过各种途径,如调查、实验、观察等。

在收集数据时,需要保证数据的准确性和可靠性。

建立模型:在收集完数据后,需要建立一个适当的模型来描述问题。

这个模型可以是数学模型、物理模型或计算机模型等。

模型的建立需要基于对问题的深入理解和分析。

计算方法:根据建立的模型,选择适当的计算方法来进行数据处理和分析。

计算方法的选择需要基于问题的性质和数据的特点,并且需要考虑计算的效率和精度。

实验方法:根据研究问题,设计适当的实验来验证假设或探究现象。

实验方法的选择需要考虑实验的目的、实验条件、实验步骤等因素,并确保实验结果的准确性和可重复性。

数据处理和分析:使用计算方法对实验数据进行处理和分析,提取有用的信息,并进行统计和可视化处理。

在这个过程中,需要注意数据的处理方式和处理工具的选择。

结果解释和结论:根据数据处理和分析的结果,解释现象并得出结论。

如果结果与预期不一致,可能需要重新审视模型和实验方法,并进行修正和改进。

总的来说,计算方法和实验方法都是科学研究中的重要手段,它们可以帮助我们探索未知的领域和验证假设。

在具体的研究过程中,需要根据问题的性质和数据的特点选择适当的方法,并进行充分的准备和实验设计。

计算方法实验报告

计算方法实验报告

1. 熟悉并掌握常用的计算方法,包括数值积分、数值微分、线性方程组求解等。

2. 培养运用计算机进行数值计算的能力。

3. 增强对数值计算误差的分析和判断能力。

二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 库:NumPy、SciPy、Matplotlib三、实验内容1. 数值积分(1)函数:f(x) = x^2(2)区间:[0, 1](3)方法:梯形法、辛普森法、复合梯形法2. 数值微分(1)函数:f(x) = e^x(2)点:x = 1(3)方法:有限差分法、中点法、牛顿法3. 线性方程组求解(1)方程组:2x + 3y - z = 8-x + 2y + 2z = -3x - y + 3z = 5(2)方法:高斯消元法、LU分解法1. 数值积分(1)编写函数f(x) = x^2(2)定义积分区间[0, 1](3)实现梯形法、辛普森法、复合梯形法(4)计算积分结果2. 数值微分(1)编写函数f(x) = e^x(2)定义点x = 1(3)实现有限差分法、中点法、牛顿法(4)计算导数结果3. 线性方程组求解(1)定义方程组系数矩阵A和常数向量b(2)实现高斯消元法、LU分解法(3)求解方程组(4)输出解向量x五、实验结果与分析1. 数值积分(1)梯形法:积分结果约为1.6667(2)辛普森法:积分结果约为1.6447(3)复合梯形法:积分结果约为1.6458分析:三种方法计算结果接近,但辛普森法误差最小。

2. 数值微分(1)有限差分法:导数结果约为2.7183(2)中点法:导数结果约为2.7183(3)牛顿法:导数结果约为2.7183分析:三种方法计算结果一致,误差较小。

3. 线性方程组求解(1)高斯消元法:解向量x = [2, 1, 1](2)LU分解法:解向量x = [2, 1, 1]分析:两种方法求解结果一致,且解向量正确。

六、实验总结本次实验通过Python编程,实现了数值积分、数值微分和线性方程组求解。

计算方法 实验报告 拉格朗日 龙贝格 龙格库塔

计算方法 实验报告 拉格朗日 龙贝格  龙格库塔
agrange.c,romberg.c和runge.c三个子文件包含(#include)在了main.c中,所以,要查看运行结果,老师只需直接用win-tc打开main.c,运行即可。感谢使用!
主界面:
/*lagrange.c*/
float real_value(float x) /*由被插值函数计算真实值*/
c=getchar();
if(c=='N'||c=='n') break;
}
}
/*romberg.c*/
double function(double x) /*被积函数*/
{
return 4.0/(1+(x)*(x));
}
double t(double a,double b,int m) /*计算T1*/
实验二(龙贝格公式)
§公式
§算法描述
§流程图
§运行结果
§结果分析:Romberg积分法是在积分步长逐步折半的过程中,用低精度求积公式的组合得到更高精度求积公式的一种方法,它算法简单,且收敛加速效果极其显著。
实验三(四阶龙格库塔)
§公式
k1=h*f(xn,yn);
k2=h*f(xn+h/2,yn+k1/2);
T1=t(a,b,0);
T2=T1/2.0+t(a,b,1);
S1=(4*T2-T1)/3.0;
T1=T2;
T2=T1/2.0+t(a,b,2);
S2=(4*T2-T1)/3.0;
C1=(16*S2-S1)/15.0;
T1=T2;
T2=T1/2.0+t(a,b,3);
S1=S2;
S2=(4*T2-T1)/3.0;

管理科学研究中的计算实验方法

管理科学研究中的计算实验方法

管理科学研究中的计算实验方法计算实验方法是管理科学研究中常用的一种探究问题的方法,它以模型构建为基础,利用计算机辅助技术进行模拟和数据分析。

相比传统的实验方法,计算实验具有成本低、效率高、风险小和可重复性强等优点。

本文旨在全面介绍计算实验方法的基本原理和应用。

一、计算实验方法的基本原理计算实验方法是基于现代计算机技术,通过数学模型和软件工具对管理问题进行预测、分析和优化的方法。

其基本原理包括以下几个方面:1.建立数学模型。

计算实验方法要求对研究问题建立准确、可靠的数学模型,用以描述问题的本质、特性和规律。

数学模型包括确定问题的变量、确定变量之间的关系、确定约束条件及目标函数。

2.采用计算机技术。

计算实验方法利用计算机技术进行模拟和数据分析,计算机对模型进行计算处理,生成各种预测结果和分析报告。

3.分析模型预测结果。

计算实验方法通过对模型预测结果的分析,探究问题的本质及其机理,进而优化模型,提高预测能力。

4.验证模型可靠性。

在计算实验中,必须对模型进行验证,检验其可靠性,以确保模型的有效性。

二、计算实验方法的应用计算实验方法广泛应用于管理科学研究,可以有效解决一系列管理实践中面临的复杂问题,如以下四个方面:1.生产流程优化。

计算实验方法可以模拟生产流程,分析不同操作方案对生产效率、成本等指标的影响,通过寻找最优的操作方案,优化生产流程,提高生产效率和质量。

2.库存管理。

计算实验可以通过建立物流模型,分析不同库存策略对成本、服务水平等指标的影响,探究最优库存策略,实现库存管理的优化。

3.项目管理。

通过建立项目管理模型,计算实验可以对项目进度进行模拟、分析,及时预测和解决项目管理中面临的各种问题,提高项目的执行效率和质量。

4.市场营销。

计算实验可以通过建立市场模型,分析不同市场推广策略对销售额、市场占有率等指标的影响,优化市场营销策略,提高销售业绩和效益。

三、计算实验方法的局限性和发展趋势虽然计算实验方法具有多种优点和应用前景,但其仍然存在一些局限和不足之处。

《计算方法》实验报告材料

《计算方法》实验报告材料
double ChaShang(int n,vector<double>&X,vector<double>&Y);
double Newton(double x,vector<double>&X,vector<double>&Y);
int main(){
char a='n';
do{
int n;
cout<<"请输入插值点个数:"<<endl;
for(int i=0;i<N;i++){
X[i]=p;
Y[i]=1/(1+p*p);
p=p+c;
}
cout<<"请输入要求值x的值:"<<endl;
double x;
cin>>x;
double result=fenduan(N,X,Y,x,c);
cout<<"由分段线性插值法得出结果: "<<result<<endl;
cin>>n;
vector<double>X(n,0);
vector<double>Y(n,0);
cout<<"请输入插值点对应的值及函数值(Xi,Yi):"<<endl;
for(int i=0;i<n;i++){
cin>>X[i]>>Y[i];
}
cout<<"请输入要求值x的值:"<<endl;

计算方法数值实验报告

计算方法数值实验报告

计算方法数值实验报告(一)班级:0902 学生:苗卓芳 倪慧强 岳婧实验名称: 解线性方程组的列主元素高斯消去法和LU 分解法实验目的: 通过数值实验,从中体会解线性方程组选主元的必要性和LU 分解法的优点,以及方程组系数矩阵和右端向量的微小变化对解向量的影响。

实验内容:解下列两个线性方程组(1) ⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎭⎫ ⎝⎛--11134.981.4987.023.116.427.199.103.601.3321x x x (2) ⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎭⎫ ⎝⎛----15900001.582012151526099999.23107104321x x x x 解:(1) 用熟悉的算法语言编写程序用列主元高斯消去法和LU 分解求解上述两个方程组,输出Ax=b 中矩阵A 及向量b, A=LU 分解的L 及U ,detA 及解向量。

①先求解第一个线性方程组⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎭⎫ ⎝⎛--11134.981.4987.023.116.427.199.103.601.3321x x x在命令窗口中运行A=[3.01,6.03,1.99;1.27,4.16,-1.23;0.987,-4.81,9.34] 可得A =3.0100 6.0300 1.99001.2700 4.1600 -1.23000.9870 -4.8100 9.3400b=[1,1,1]可得b =1 1 1H =det(A)可得 H =-0.0305列主元高斯消去法:在命令窗口中运行function x=Gauss_pivot(A,b)、A=[3.01,6.03,1.99;1.27,4.16,-1.23;0.987,-4.81,9.34];b=[1,1,1];n=length(b);x=zeros(n,1);c=zeros(1,n);dl=0;for i=1:n-1max=abs(A(i,i));m=i;for j=i+1:nif max<abs(A(j,i))max=abs(A(j,i));m=j;endendif(m~=i)for k=i:nc(k)=A(i,k);A(i,k)=A(m,k);A(m,k)=c(k);enddl=b(i);b(i)=b(m);b(m)=dl;endfor k=i+1:nfor j=i+1:nA(k,j)=A(k,j)-A(i,j)*A(k,i)/A(i,i);endb(k)=b(k)-b(i)*A(k,i)/A(i,i);A(k,i)=0;endendx(n)=b(n)/A(n,n);for i=n-1:-1:1sum=0;for j=i+1:nsum =sum+A(i,j)*x(j);endx(i)=(b(i)-sum)/A(i,i);end经程序可得实验结果ans =1.0e+003 *1.5926-0.6319-0.4936LU分解法:在命令窗口中运行function x=lu_decompose(A,b)A=[3.01,6.03,1.99;1.27,4.16,-1.23;0.987,-4.81,9.34];b=[1,1,1];L=eye(n);U=zeros(n,n);x=zeros(n,1);c=zeros(1,n);for i=1:nU(1,i)=A(1,i);if i==1;L(i,1)=1;elseL(i,1)=A(i,1)/U(1,1);endendfor i=2:nfor j=i:nsum=0;for k=1:i-1sum =sum+L(i,k)*U(k,j);endU(i,j)=A(i,j)-sum;Ifj~=nsum=0;for k=1:i-1sum=sum+L(j+1,k)*U(k,i);endL(j+1,i)=(A(j+1,i)-sum)/U(I,i);endendendy(1)=b(1);for k=2:nsum=0;forj=1:k-1sum=sum+L(k,j)*y (j);endy(k)=b(k)-sum;endx(n)=y(n)/U(n,n);260页最后一行c(k)=A(i,k);A(i,k)=A(m,k);A(m,k)=c(k);enddl=b(i);b(i)=b(m);b(m)=dl;endfor k=i+1:nfor j=i+1:nA(k,j)=A(k,j)-A(i,j)*A(k,i)/A(i,i);endb(k)=b(k)-b(i)*A(k,i)/A(i,i);A(k,i)=0;endendx(n)=b(n)/A(n,n);for i=n-1:-1:1sum=0;for j=i+1:nsum =sum+A(i,j)*x(j);endx(i)=(b(i)-sum)/A(i,i);end经程序可得结果ans =1.0e+003 *1.5926-0.6319-0.4936②再求解第二个线性方程组⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎭⎫ ⎝⎛----15900001.582012151526099999.23107104321x x x x 即A=[10,-7,0,1;-3,2.099999,6,2;5,-1,5,-1;2,1,0,2];b=[8,5.900001,5,1];重复上述步骤可的结果为ans =0.0000-1.00001.00001.0000(2)将方程组(1)中系数3.01改为3.00,0.987改为0.990,用列主元高斯消去法求解变换后的方程组,输出列主元行交换次序,解向量x 及detA ,并与(1)中结果比较。

计算方法实验

计算方法实验
一、曲线拟合
1、实验内容
试用最小二乘法分别求一次和二次多项式,使其与下列数据按拟
合,并比较两曲线的优劣。
xi
1.36 1.49 1.73 1.81 1.95
yi
14.094 15.069 16.844 17.378 18.435
2.实验原理
曲线拟合的最小二乘法:设通过点(������������,������������ )的规律为 y=f(x),即
cout << "Input the "<< num <<" of x:"; cin >> data_x[num-1]; cout << "Input the "<< num <<" of y:"; cin >> data_y[num-1];
num--; } double A =0.0; double B =0.0; double C =0.0; double D =0.0; A = (data_x*data_x).sum(); B = data_x.sum(); C = (data_x*data_y).sum(); D = data_y.sum(); double k,b,tmp =0; if(tmp=(A*data_x.size()-B*B)) {
double h=(b-a)/n; double T=0; for(int i=1;i<n;i++) {
T=T+Function(a+i*h); } T*=2; T=(Function(a)+Function(b)+T)*h/2; return T; } //复化辛普森公式 double MulripleSimpson(double a,double b,int n) { double h=(b-a)/n; double T=0; for(int i=0;i<n;i++) {

数值计算方法实验报告

数值计算方法实验报告

数值计算方法实验报告数值计算方法实验报告引言:数值计算方法是一种通过数学模型和计算机算法来解决实际问题的方法。

在科学研究和工程应用中,数值计算方法被广泛应用于求解方程、优化问题、模拟仿真等领域。

本实验报告将介绍数值计算方法的基本原理和实验结果。

一、二分法求根二分法是一种通过不断折半缩小搜索区间来求解方程根的方法。

在实验中,我们选取了一个简单的方程f(x) = x^2 - 4 = 0来进行求根实验。

通过不断将搜索区间进行二分,我们可以逐步逼近方程的根。

实验结果表明,通过二分法,我们可以得到方程的根为x = 2。

二、牛顿迭代法求根牛顿迭代法是一种通过不断逼近方程根的方法。

在实验中,我们同样选取了方程f(x) = x^2 - 4 = 0进行求根实验。

牛顿迭代法的基本思想是通过对方程进行线性近似,求得近似解,并不断迭代逼近方程的根。

实验结果表明,通过牛顿迭代法,我们可以得到方程的根为x = 2。

三、高斯消元法求解线性方程组高斯消元法是一种通过变换线性方程组的系数矩阵,将其化为上三角矩阵的方法。

在实验中,我们选取了一个简单的线性方程组进行求解实验。

通过对系数矩阵进行行变换,我们可以将其化为上三角矩阵,并通过回代求解得到方程组的解。

实验结果表明,通过高斯消元法,我们可以得到线性方程组的解为x = 1,y = 2,z = 3。

四、插值与拟合插值与拟合是一种通过已知数据点来构造函数模型的方法。

在实验中,我们选取了一组数据点进行插值与拟合实验。

通过拉格朗日插值多项式和最小二乘法拟合,我们可以得到数据点之间的函数模型。

实验结果表明,通过插值与拟合,我们可以得到数据点之间的函数关系,并可以通过该函数模型来进行预测和拟合。

结论:数值计算方法是一种通过数学模型和计算机算法来解决实际问题的方法。

通过本次实验,我们学习了二分法求根、牛顿迭代法求根、高斯消元法求解线性方程组以及插值与拟合的基本原理和应用。

这些方法在科学研究和工程应用中具有广泛的应用前景。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数值计算方法》实验专业:姓名:姓名:实验一1. 题目 (课本46页习题二第1题)用列主元素法解下列方程,结果保留4位小数。

⎪⎩⎪⎨⎧=+-=-+=-+21863544462321321321x x x x x x x x x2. 模型建立(理论分析)用方程组的增广矩阵[]⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=n nnn n n n b a a a b a a a b a a a b A 21222221111211, 表示,并在增广矩阵上进行计算。

首先在矩阵的第一列中选取绝对值最大的元,通过行互换,将最大的元所在行换在第一行的位置,得到增广矩阵()()[]11,b A ,然后进行消元,得到矩阵()()[]()()()()()()()()()⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=2222222222111111211122,n nn n nn b a a b a a b a a a b A然后在每次从消元之前,都通过行变换将绝对值最大的元所在的行换到相应行,再进行消元。

如此经过n-1步,增广矩阵被化成上三角矩阵,最后回代过程求解。

这种算法就是列主元素法求解方程组。

3. 算法(1)输入A=[2,6,-4;1,4,-5;6,-1,18];b=[4;3;2];计算rank(A);rank(B)。

(2)判断所需求的方程组解的情况,选择相应计算方法,本题是存在唯一解。

(3)置储存空间X ,C 矩阵,比较所在列进行消元运算数值绝对值,取下标位置。

(4)取绝对值大的元所在行通过行变换换到首位,再进行消元,直到化为上三角矩阵,停机。

4. 程序列主元素消去法程序clearclcA=[2,6,-4;1,4,-5;6,-1,18];b=[4;3;2];B=[A b];RA=rank(A);RB=rank(B);zhica=RB-RA;if zhica>0,disp('请注意:因为RA~=RB,所以此方程组无解')returnendif RA==RBif RA==3disp('请注意:因为RA=RB=3,所以此方程组有唯一解')X=zeros(3,1);C=zeros(1,4);for p=1:2[Y,j]=max(abs(B(p:3,p)));C=B(p,:);B(p,:)=B(j+p-1,:);B(j+p-1,:)=C;for k=p+1:3m=B(k,p)/B(p,p);B(k,p:4)=B(k,p:4)-m*B(p,p:4);endendb=B(1:3,4);A=B(1:3,1:3);X(3)=b(3)/A(3,3);for q=2:-1:1X(q)=(b(q)-sum(A(q,q+1:3)*X(q+1:3)))/A(q,q);endXelsedisp('请注意:因为RA=RB<3,所以此方程组有无穷多解') endend5.运行结果实验二1. 题目 (课本46页习题二第3题)用紧凑格式解下列方程组,并写出L ,U 矩阵。

⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡19044102256811616427811694143214321x x x x 2. 模型建立(理论分析)已知用矩阵形式表示Gauss 消去法的消元过程是对方程组增广矩阵[A,b]进行一系列初等变换,将系数矩阵A 左乘上三角形矩阵的过程,也等价于用一串初等矩阵去做乘增广矩阵,因此消元过程可以通过矩阵运算来表示。

例如,第一次消元等价于用初等矩阵⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡---=1000100010001131211n l l l L 左乘矩阵()()[][]b A b A ,,=11 其中()()()n i a a l i i ,,3,2/111111 ==,即()()[]()()[]11122b A L b A ,,=。

一般地,第k 次消元等价于用初等矩阵⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡--=+11111000nk kk k l l L左乘矩阵()()[]k k b A ,,其中()()()n k i a a l k kk k ikik ,,1/ +==,经过1-n 次消元后得到()()[]()()[]11121b A L LLb A n n nn,, --=,因为⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=+-111111000nk kk kl l L ,令⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡==-----111111321323121111211nn n n n n l l l l l l lL L L L,[]()()[]n n Lb LA b A ,,= 消元过程实际上是把系数矩阵A 分解成单位下三角与上三角矩阵的乘积的过程。

LU A =其中L 为单位上三角矩阵,U 为下三角矩阵。

⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=-111111321323121nn n n n l l l l l l lL, ⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=nn n n u u u u u u u u U 0223221131211 这种分解称为杜利特尔(Doolittle)分解,也称为LU 分解。

当A 为n 阶方阵,若A 的顺序主子式()1,,2,1-=n i A i 均不为零,则矩阵A 存在唯一的Doolittle 分解。

由矩阵的乘法法则,得ij l 和ij u 的公式()()()n j i n j u u l a l n i j n i u l a u n j a u jj j k kj ik ij ij i k kj ik ij ij j j ,,1,1,,2,1/,,,,,2,,2,1111111 +=-=⎪⎪⎭⎫ ⎝⎛-===-===∑∑-=-=计算过程应按第1行,第1列,第2行,第2列,…的顺序进行。

得到L ,U 矩阵再由bLy=和yUx=计算方程组的解。

本题要求用紧凑格式解下列方程组,并写出L,U矩阵。

在程序实现上就是进行Doolittle分解。

3. 算法(1)输入A=[1,2,3,4;1,4,9,16;1,8,27,64;1,16,81,256];b=[2;10;44;190];并设l,u的储存空间。

(2)计算()()()njinjuulalnijniulaunjaujjjkkjikijijikkjikijijjj,,1,1,,2,1/,,,,,2,,2,1111111+=-=⎪⎪⎭⎫⎝⎛-===-===∑∑-=-=。

(3)bLy=和yUx=计算方程组的解,停机。

4.程序LU矩阵分解clearclcA=[1,2,3,4;1,4,9,16;1,8,27,64;1,16,81,256];b=[2;10;44;190];n=length(A);u=zeros(n,n);l=eye(n,n);u(1, : )=A(1, : );l(2:n,1)=A(2:n,1)/u(1,1);for k=2:nu(k,k:n)=A(k,k:n)-l(k,1:k-1)*u(1:k-1,k:n);l(k+1:n,k)=(A(k+1:n,k)-l(k+1:n,1:k-1)*u(1:k-1,k))/u(k,k); endulY=zeros(n,1);Y(1)=b(1);for i=2:nY(i)=b(i)-l(i,1:i-1)*Y(1:i-1);endX=zeros(n,1);if det(u)==0;X=0;elseX(n)=Y(n)/u(n,n);for i=n-1:-1:1X(i)=(Y(i)-u(i,i+1:n)*X(i+1:n))/u(i,i);endendX5.运行结果实验三1. 题目 (课本47页习题二第6题)分别用平方根法和改进平方根法求解方程组⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡---816211515311401505231214321x x x x 2. 模型建立(理论分析)依据定理,如果A 为n 阶对称正定矩阵,则存在惟一的非奇异下三角阵L 使得T LL A =且L 的对角元素皆为正数。

⎪⎪⎪⎪⎪⎭⎫⎝⎛⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=nn n n nn n n l l l l l l l l l l l l A 2221211121222111 其中()n i l ii 2,10=>。

由矩阵乘法及0=ik l (当k i <时),得∑∑=-=+==nk j k ij jj jk ik jk ik ij l l l l l l a 111矩阵的这种分法称为Cholesky 分解法,即平方根分解法。

比较A 与T LL 的相应元素,可得()()n k i l l l a l n k l a l kk k j kj ij ik ik k j kj kk kk ,,1/,,2,1112/1112+=⎪⎪⎭⎫ ⎝⎛-==⎪⎪⎭⎫ ⎝⎛-=∑∑-=-=规定1=⋅∑=j 。

计算顺序是按列进行的,即()() →=→→=→n i l l n i l l i i ,,3,,3,2222111当矩阵A 完成Cholesky 分解后,求解对称正定方程组b Ax =的解计算公式。

1,,1,,)(,,2,1,111 -=-⇐=-⇐∑∑+=-=n n k x ly x nk y l b y nk j k k j kj k k k j j j k k k当A 为对称矩阵,且A 的所有顺序主子式均不为零,A 可唯一分解为如下的形式 LU A =为了利用A 的对称性,将U 再分解为:01-,1-,1-1111112221111DU u u u u u u u u u U n n nn n nn =⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛⎪⎪⎪⎪⎪⎭⎫⎝⎛=其中D 为对角阵,0U 为单位上三角阵,于是0LDU LU A ==由分解的唯一性即得T 0L U =,代入得到对称矩阵A 的分解式T LDL A =。

这是一种改进的平方根法(T LDL 法)其中L 为单位下三角阵,()n ,d ,d D 1diag =为对角阵。

由比较法可以导出T LDL 分解的计算公式:对于n k ,,2,1 =()n k i d l d l a l d l a d k k j kj j ij ik ik k j jkj kk k ,,1/11112+=⎪⎪⎭⎫⎝⎛-=-=∑∑-=-=计算顺序如下:()() →→=→→=→32211,,3,,3,2d n i l d n i l d i i 此时式中有许多计算式重复的,改进辅助量()n k i n k d l u k ik ik ,,1,,,2,1 +===kkj ik k j kj ij ik kj k j kjkj kk k d u l l u a u l u a d /1111=-=-=∑∑-=-=T LDL 分解后,解对称正定方程组b Ax =可分两步进行:先解方程组b Ly =,再由y D x L T 1-=求x 。

相关文档
最新文档