当前位置:文档之家› 数值分析课程设计实验报告

数值分析课程设计实验报告

数值分析课程设计实验报告
数值分析课程设计实验报告

数值分析课程设计实验报告

姓名:陈浩

学号:081002102

班级:091002

指导老师:任林源

完成日期:2011-7

目录

一丶概述________________________________________ 二丶设计内容____________________________________ 三丶设计过程____________________________________ 四丶主要代码____________________________________ 五丶结果显示____________________________________ 六丶结果验证____________________________________ 七丶设计总结____________________________________

实验一:Gauss消去法和Gauss选列主元消去法

一丶概述

1.1设计名称:Gauss消去法和Gauss选列主元消去法

1.2设计目的:

数值分析课本中的最基础解线性方程组的方法Gauss消去法和Gauss选列主元消去法,随着对他们的深入研究发现他们也有很多缺点.设计这次试验是为了找出这两者之间的区别。加强对这两种算法的了解和掌握,还有锻炼分析问题,解决问题的能力,理解和掌握相关算法的原理执行并完成程序设计.

二丶设计内容、

编程试验Gauss消去法和Gauss选列主元消去法;对二者算法进行比较;

三丶设计过程

3.1 Gauss消去法

3.1.1 消去法实现:

根据消去法的原理,编写Matlab程序,并运行,然后带入数据算出结果,再比较.

3.1.2 Gauss消去法的原理:

方程组:A*x=b A为矩阵A=[ a(11) a(12)…a(1n);

a(21) a(22)…a(2n);

……………………

a(n1) a(n2)…a(nn)]

b=[b1 b2 …bn]

1.回带过程

用行列式的初等行变换把A化为上三角矩阵,则可以取得xn的值,有xn的值则可以带入上一式中求出x(n-1)的值,以此类推则可以求得xi的值则递推公式

xn=un,n-1/unn

xi=1/uii(ui,n+1-(ui,i+1xi+1+…..+uinxn))

3.2 Gauss选列主元消去法

3.2.1 原理:选列主元消去法就是在系数矩阵中按列选取绝对值最大的值作为主元素,然后交换所在行与主元素所在行的位置,再按顺序消去法进行消元。

四丶主要代码:

4.1 Gauss消去法主要代码

function x=hanxiaogu (A,b)

n=length(b);

for i= 1:n-1

for k= i+1:n

for j= i+1:n

if abs (A(i,i))<10^(-6)

warning('分母为零不能计算!');

return;

else

A(k,j)= A(k,j)-A(i,j)*A(k,i)/A(i,i);

end

end

b(k)=b(k)-b(i)*A(k,i)/A(i,i);

A(k,i)=0;

end

end

%回代求解

x(n)=b(n)/A(n,n);

for i=n-1:-1:1

sum=0;

for j=i+1:n

sum=sum+A(i,j)*x(j);

end

x(i)=(b(i)-sum)/A(i,i);

end

end

4.2 Gauss选列主元消法主要代码

function x=Gaussxiaoqumethod(A,b)

%用高斯消去法解线性方程组A*x=b% x是未知量

n=length(b);

x=zeros(n,1);

c=zeros(1,n);

%寻找最大元

t=0;

for i=1:n-1

max=abs(A(i,i));

m=i;

for j=i+1:n

if max

max=abs(A(j,i));

m=j;

end

end

if m~=i

for k=1:n

c(k)=A(i,k);

A(i,k)=A(m,k);

A(m,k)=c(k);

end

t=b(i);

b(i)=b(m);

b(m)=t;

end

for k=i+1:n

for j=i+1:n

A(k,j)=A(k,j)-A(i,j)*A(k,i)/A(i,i);

end

b(k)=b(k)-b(i)*A(k,i)/A(i,i);

A(k,i)=0;

end

end

%回带过程

x(n)=b(n)/A(n,n);

for i=n-1:-1:1

sum=0;

for j=i+1:n

sum=sum+A(i,j)*x(j);

end

x(i)=(b(i)-sum)/A(i,i);

end

end

五丶结果显示:

5.1 Gauss消去法和Gauss主元消去法结果相同

显示结果:A =

4096 1234 3678 2943

2246 3872 4015 1129

3645 1926 3781 643

1784 4002 2786 3927

b =

4063 1550 4240 -2557

x=hanxiaogu (A,b)

x =

-0.1818

-1.6694

2.2226

-0.4440

六丶结果验证

A*x=4063.3384

1550.2234

4240.2332

2556.6944

这说明Gauss消去法和Gauss主元消去法的计算精度是相当高的。但

是如果系数矩阵A是奇异矩阵,就会出错。

七丶设计总结

列主元消元法和Gauss消元法的计算过程基本上是一样的,只是在每一次消元前要选取系数矩阵的列主元,然后把方程组做适当的行交换再进行消元运算,这就保证了舍入误差不扩散。列主元消元法克服了顺序Gauss消元的缺点,运算量也没有全主元消元法那么大,因此是解线性方程组的一种比较实用而且简单的方法。

实验二:Gauss-Seidol迭代法线性方程组

一概述:

1.1设计说明:Guass-Seidol迭代法

1.2设计目的:深入学习和掌握Gauss-Seidol迭代法解线性方程组,

会使用Matlab软件,回编写程序,并使用程序带入数据,计算

出结果。

二丶算法内容:

编写程序,并使用Matlab程序运行程序,计算出结果

三丶设计过程

3.1Gauss-Seidol迭代法

3.1.1迭代法的实现:根据迭代法的原理,编写Matlab程序,并运行,

然后带入数据算出结果。

3.1.2Gauss-Seidol迭代法的原理:

线性方程组Ax=b A=(aij)n×n非奇异,b=[b…b]’≠o.将Ax=b变换成映射形式的同解组 x=Gx+f

由此构造迭代公式 x(k)=Gx(k-1)+f

对取定的初值向量想x(0),取得极限 x*=Gx*+f

从而x*为A*x=b的解,当k充分大的时候x*=x(k).

四丶主要代码:

function x=naspgs(A,b,x0,e,N)

%用途:用向量(稀疏存储)形式的Gauss-Seidel迭代解线性方程组Ax=b

%格式:x=naspgs(A,b,x0,e,N) A为系数矩阵,b为右端向量,x返回解向

% 量,x0为初值向量(默认原点),e为精确度(默认1e-4),设置迭代次数上限

% 以防发散(默认500)

n=length(b);

if nargin<5,N=500;end

if nargin<3,e=1e-4,end

if nargin<2,x0=zeros(n,1);end

x0=sparse(x0);b=sparse(b);A=sparse(A);%使用稀疏矩阵存储

x=x0;x0=x+2*e;x0=sparse(x0);

k=0;A1=tril(A);iA1=inv(A1);

while norm(x0-x,inf)>e&k

k=k+1;

x0=x;x=-iA1*(A-A1)*x0+iA1*b;

end

x=full(x);

if k==N,warning('已达迭代次数上线');end

end

五丶结果显示

A=[17.031,-0.615,-2.991,1.007,-1.006,0.000;

-1.000,34.211,-1.000,-2.100,0.300,-1.700;

0.000,0.500,13.000,-0.500,1.000,-1.500;

4.501,3.110,-3.907,-61.705,12.170,8.999;

0.101,-8.012,-0.017,-0.910,4.918,0.100;

1.000,

2.000,

3.000,

4.500,

5.000,21.803]

b=[0.230,-52.322,54.000,240.236,29.304,-117.818]'

e=10^(-6)

x0=[0 0 0 0 0 0] '

N=500

x=naspgs(A,b,x0,e,N)

x =[0.9071 -1.9618 3.2937 -4.5007 2.0293 -5.2551]'

六丶结果验证:A*x=[0.2301897 -52.3220098 53.9995 241.1419028 29.3037902 117.8189953]

这说明Gauss-Seidol迭代法的精确度比较高,但是奇异矩阵还是会出错的。

七丶设计总结

直接法得到的解是理论上准确的,但是我们可以看得出,它们的计算量都是n3数量级,存储量为n2量级,这在n比较小的时候还比较合适,但是对于现在的很多实际问题,往往要我们求解很大的n的矩阵,而且这些矩阵往往是系数矩阵就是这些矩阵含有大量的0元素。对于这类的矩阵,在用直接法时就会耗费大量的时间和存储单元。因此我们有必要引入一类新的方法:迭代法。

迭代法具有的特点是速度快。与非线性方程的迭代法一样,需要我们构造一个等价的方程,从而构造一个收敛序列,序列的极限值就是方程组的根。迭代法需要主要的是所求方程组的特征值的模必须小于1,否则方程组的行列式不收敛。

数值分析课程设计

淮海工学院计算机工程学院课程设计报告书 课程名:《数值分析》 题目:数值分析课程设计 班级: 学号: 姓名:

数值分析课程设计 课程设计要求 1、研究第一导丝盘速度y与电流周波x的关系。 2、数据拟合问题运用样条差值方法求出温度变化的拟合曲线。 课程设计目的 1、通过编程加深对三次样条插值及曲线拟合的最小二乘法的理解; 2、学习用计算机解决工程问题,主要包括数据处理与分析。 课程设计环境 visual C++ 6.0 课程设计内容 课程设计题目1: 合成纤维抽丝工段中第一导丝盘的速度对丝的质量有很大的影响,第一丝盘的速度和电流周波有重要关系。下面是一组实例数据: 其中x代表电流周波,y代表第一导丝盘的速度 课程设计题目3: 在天气预报网站上获得你家乡所在城市当天24小时温度变化的数据,认真观察分析其变化趋势,在此基础上运用样条差值方法求出温度变化的拟合曲线。然后将该函数曲线打印出来并与原来的温度变化数据形成的曲线进行比较,给出结论。写出你研究的心得体会。 课程设计步骤 1、利用最小二乘法写出题1的公式和算法; 2、利用excel表格画出数据拟合后题1的图像; 3、在Visual C++ 6.0中编写出相应的代码; 4、搜索11月12日南通当地一天的温度变化数据; 5、在Visual C++ 6.0中编写出相应的代码; 6、利用excel表格画出数据拟合后题3的图像 课程设计结果 课程设计题目1 数值拟合

解:根据所给数据,在excel窗口运行: x=[49.2 50.0 49.3 49.0 49.0 49.5 49.8 49.9 50.2 50.2] y=[16.7 17.0 16.8 16.6 16.7 16.8 16.9 17.0 17.0 17.1] 课程设计题目3 数据为:X=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]; Y=[12,12,11,12,12,12,12,12,13,15,16,17,17,18,17,17,17,16,15,15,15,15,14,14]; 源代码为: 第一题: #include #include"math.h" using namespace std; //double x[100],y[100]; int main(){ int i; double k,b; double sum1=0,sum2=0,sum3=0,sum4=0; double x[10]={49.2,50.0,49.3,49.0,49.0,49.5,49.8,49.9,50.2,50.2}; double y[10]={16.7,17.0,16.8,16.6,16.7,16.8,16.9,17.0,17.0,17.1}; for(i=0;i<10;i++){ sum1+=x[i]*y[i]; sum2+=x[i];

数值计算课程设计任务书

数值计算课程设计任务书 学院信息与计算科学/应用数学专业班级学生: 题目:典型数值算法的C++语言程序设计 课程设计从2017 年 6 月12 日起到2017 年7月 1 日 1、课程设计的内容和要求(包括原始数据、技术要求、工作要求等): 每人需作10个算法的程序、必做6题、自选4题。 对每个算法要求用C++语言进行编程。 必选题: 1、高斯列主元法解线性方程组 2、牛顿法解非线性方程组 3、经典四阶龙格库塔法解一阶微分方程组 4、三次样条插值算法(压紧样条)用C++语言进行编程计算 依据计算结果,用Matlab画图并观察三次样条插值效果。 5、龙贝格求积分算法 6、M次多项式曲线拟合,据计算结果,用Matlab画图并观察拟合效果。 自选题:自选4道其他数值算法题目.每道题目重选次数不得超过5次. 2、对课程设计成果的要求〔包括图表、实物等硬件要求〕: 2.1 提交课程设计报告 按照算法要求,应用C++语言设计和开发算法程序,提交由: 1)每个算法的原理与公式说明; 2)每个算法相应的程序设计说明(程序中的主要变量语义说明,变量的数据类型说明,数据在内存中组织和存储结构说明,各函数的输入形参和输出形参说明,函数功能说明,函数中算法主要流程图,函数的调用方法说明); 3)每个程序使用的实例(引用的实例可以自拟,也可以借用相关数值计算参考书中的例题作为作为验证程序是否正确的实例,无论是自拟实例还是引用实例,实例都应详细写入报告的正文中); 4)每个算法的调试记录(包括程序调试(静态调试和动态调试)和程序修改记录、程序测试(可以手工计算进行测试、也可以利用Matlab的函数或

数值分析实验报告1

实验一误差分析 实验1.1(病态问题) 实验目的:算法有“优”与“劣”之分,问题也有“好”与“坏”之别。对数值方法的研究而言,所谓坏问题就是问题本身对扰动敏感者,反之属于好问题。通过本实验可获得一个初步体会。 数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。 问题提出:考虑一个高次的代数多项式 显然该多项式的全部根为1,2,…,20共计20个,且每个根都是单重的。现考虑该多项式的一个扰动 其中ε(1.1)和(1.221,,,a a 的输出b ”和“poly ε。 (1(2 (3)写成展 关于α solve 来提高解的精确度,这需要用到将多项式转换为符号多项式的函数poly2sym,函数的具体使用方法可参考Matlab 的帮助。 实验过程: 程序: a=poly(1:20); rr=roots(a); forn=2:21 n form=1:9 ess=10^(-6-m);

ve=zeros(1,21); ve(n)=ess; r=roots(a+ve); -6-m s=max(abs(r-rr)) end end 利用符号函数:(思考题一)a=poly(1:20); y=poly2sym(a); rr=solve(y) n

很容易的得出对一个多次的代数多项式的其中某一项进行很小的扰动,对其多项式的根会有一定的扰动的,所以对于这类病态问题可以借助于MATLAB来进行问题的分析。 学号:06450210 姓名:万轩 实验二插值法

数值分析实验报告之常微分方程数值解

数学与计算科学学院实验报告 实验项目名称常微分方程数值解 所属课程名称数值方法B 实验类型验证 实验日期 2013.11.11 班级 学号 姓名 成绩

【实验过程】(实验步骤、记录、数据、分析) 注:以下图形是通过Excel 表格处理数据得出,并未通过MATLAB 编程序所得! 1、1(0)1dy y x dx y ?=-++???=? 由题可知精确解为:x y x e -=+,当x=0时,y(x)=0。 h=0.1 表1 h=0.1时三个方法与精确值的真值表 图1 h=0.1时三个方法走势图 步长 Euler 法 预估校正法 经典四阶库 精确值 0.1 1.010000 1.005000 1.004838 1.249080 0.2 1.029000 1.019025 1.018731 1.055455 0.3 1.056100 1.041218 1.040818 1.091217 0.4 1.090490 1.070802 1.070320 1.131803 0.5 1.131441 1.107076 1.106531 1.176851 0.6 1.178297 1.149404 1.148812 1.226025 0.7 1.230467 1.197211 1.196586 1.279016 0.8 1.287421 1.249975 1.249329 1.335536 0.9 1.348678 1.307228 1.306570 1.395322 1.0 1.413811 1.368541 1.367880 1.458127

h=0.05(此时将源程序中i的围进行扩大,即for(i=0;i<20;i++)) 表2 h=0.05时三个方法与精确值的真值表步长Euler法预估校正法经典四阶库精确值 0.05 1.002500 1.001250 1.001229 1.011721 0.10 1.007375 1.004877 1.004837 1.024908 0.15 1.014506 1.010764 1.010708 1.039504 0.20 1.023781 1.018802 1.018731 1.055455 0.25 1.035092 1.028885 1.028801 1.072710 0.30 1.048337 1.040915 1.040818 1.091217 0.35 1.063421 1.054795 1.054688 1.110931 0.40 1.080250 1.070436 1.070320 1.131801 0.45 1.098737 1.087752 1.087628 1.153791 0.50 1.118800 1.106662 1.106531 1.176851 0.55 1.140360 1.127087 1.126950 1.200942 0.60 1.163342 1.148954 1.148812 1.226025 0.65 1.187675 1.172193 1.172046 1.252062 0.70 1.213291 1.196736 1.196585 1.279016 0.75 1.240127 1.222520 1.222367 1.306852 0.80 1.268121 1.249485 1.249329 1.335536 0.85 1.297215 1.277572 1.277415 1.365037 0.90 1.327354 1.306728 1.306570 1.395322 0.95 1.358486 1.336900 1.336741 1.426362 1.00 1.390562 1.368039 1.367880 1.458127 图2 h=0.05时三个方法走势图

数值计算实验报告

(此文档为word格式,下载后您可任意编辑修改!) 2012级6班###(学号)计算机数值方法 实验报告成绩册 姓名:宋元台 学号: 成绩:

数值计算方法与算法实验报告 学期: 2014 至 2015 第 1 学期 2014年 12月1日课程名称: 数值计算方法与算法专业:信息与计算科学班级 12级5班 实验编号: 1实验项目Neton插值多项式指导教师:孙峪怀 姓名:宋元台学号:实验成绩: 一、实验目的及要求 实验目的: 掌握Newton插值多项式的算法,理解Newton插值多项式构造过程中基函数的继承特点,掌握差商表的计算特点。 实验要求: 1. 给出Newton插值算法 2. 用C语言实现算法 二、实验内容 三、实验步骤(该部分不够填写.请填写附页)

1.算法分析: 下面用伪码描述Newton插值多项式的算法: Step1 输入插值节点数n,插值点序列{x(i),f(i)},i=1,2,……,n,要计算的插值点x. Step2 形成差商表 for i=0 to n for j=n to i f(j)=((f(j)-f(j-1)(x(j)-x(j-1-i)); Step3 置初始值temp=1,newton=f(0) Step4 for i=1 to n temp=(x-x(i-1))*temp*由temp(k)=(x-x(k-1))*temp(k-1)形成 (x-x(0).....(x-x(i-1)* Newton=newton+temp*f(i); Step5 输出f(x)的近似数值newton(x)=newton. 2.用C语言实现算法的程序代码 #includeMAX_N) { printf("the input n is larger than MAX_N,please redefine the MAX_N.\n"); return 1; } if(n<=0) { printf("please input a number between 1 and %d.\n",MAX_N); return 1; } printf("now input the (x_i,y_i)i=0,...%d\n",n); for(i=0;i<=n;i++) { printf("please input x(%d) y(%d)\n",i,i);

数值分析实验报告1

实验一 误差分析 实验(病态问题) 实验目的:算法有“优”与“劣”之分,问题也有“好”与“坏”之别。对数值方法的研究而言,所谓坏问题就是问题本身对扰动敏感者,反之属于好问题。通过本实验可获得一个初步体会。 数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。 问题提出:考虑一个高次的代数多项式 )1.1() ()20()2)(1()(20 1∏=-=---=k k x x x x x p 显然该多项式的全部根为1,2,…,20共计20个,且每个根都是单重的。现考虑该多项式的一个扰动 )2.1(0 )(19=+x x p ε 其中ε是一个非常小的数。这相当于是对()中19x 的系数作一个小的扰动。我们希望比较()和()根的差别,从而分析方程()的解对扰动的敏感性。 实验内容:为了实现方便,我们先介绍两个Matlab 函数:“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 ”是两个互逆的运算函数。 ;000000001.0=ess );21,1(zeros ve = ;)2(ess ve = ))20:1((ve poly roots + 上述简单的Matlab 程序便得到()的全部根,程序中的“ess ”即是()中的ε。 实验要求: (1)选择充分小的ess ,反复进行上述实验,记录结果的变化并分析它们。 如果扰动项的系数ε很小,我们自然感觉()和()的解应当相差很小。计算中你有什么出乎意料的发现表明有些解关于如此的扰动敏感性如何 (2)将方程()中的扰动项改成18x ε或其它形式,实验中又有怎样的现象 出现 (3)(选作部分)请从理论上分析产生这一问题的根源。注意我们可以将 方程()写成展开的形式, ) 3.1(0 ),(1920=+-= x x x p αα 同时将方程的解x 看成是系数α的函数,考察方程的某个解关于α的扰动是否敏感,与研究它关于α的导数的大小有何关系为什么你发现了什么现象,哪些根关于α的变化更敏感 思考题一:(上述实验的改进) 在上述实验中我们会发现用roots 函数求解多项式方程的精度不高,为此你可以考虑用符号函数solve 来提高解的精确度,这需要用到将多项式转换为符号多项式的函数poly2sym,函数的具体使用方法可参考Matlab 的帮助。

《数值分析》课程设计报告

《数值分析》课程设计实验报告 龙格—库塔法分析Lorenz 方程 200820302033 胡涛 一、问题叙述 考虑著名的Lorenz 方程 () dx s y x dt dy rx y xz dt dz xy bz dt ?=-???=--???=-?? 其中s ,r ,b 为变化区域内有一定限制的实参数,该方程形式简单,表面上看并无惊人之处,但由该方程揭示出的许多现象,促使“混沌”成为数学研究的崭新领域,在实际应用中也产生了巨大的影响。 二、问题分析 Lorenz 方程实际上是一个四元一阶常微分方程,用解析法精确求解是不可能的,只能用数值计算,最主要的有欧拉法、亚当法和龙格- 库塔法等。为了得到较高精度的,我们采用经典四阶龙格—库塔方法求解该问题。 三、实验程序及注释 (1)算法程序 function [T]=Runge_Kutta(f,x0,y0,h,n) %定义算法,其中f 为待解方程组, x0是初始自变量,y0是初始函数 值,h 是步长,n 为步数 if nargin<5 n=100; %如果输入参数个数小于5,则步数 n=100 end r=size(y0);r=r(1); %返回初始输出矩阵的行列数,并将 值赋给r(1) s=size(x0);s=s(1); %返回初始输入矩阵的行列数,并 将值赋给s(1) r=r+s; T=zeros(r,n+1); T(:,1)=[y0;x0]; for t=2:n+1 %以下是具体的求解过程 k1=feval(f,T(1:r-1,t-1)); k2=feval(f,[k1*(h/2)+T(1:r-1,t-1);x0+h/2]); k3=feval(f,[k2*(h/2)+T(1:r-1,t-1);x0+h/2]); k4=feval(f,[k3*h+T(1:r-1,t-1);x0+h]); x0=x0+h; T(:,t)=[T(1:r-1,t-1)+(k1+k2*2+k3*2+k4)*(h/6);x0]; end

数值分析实验报告

学生实验报告实验课程名称 开课实验室 学院年级专业班 学生姓名学号 开课时间至学年学期

if(A(m,k)~=0) if(m~=k) A([k m],:)=A([m k],:); %换行 end A(k+1:n, k:c)=A(k+1:n, k:c)-(A(k+1:n,k)/ A(k,k))*A(k, k:c); %消去end end x=zeros(length(b),1); %回代求解 x(n)=A(n,c)/A(n,n); for k=n-1:-1:1 x(k)=(A(k,c)-A(k,k+1:n)*x(k+1:n))/A(k,k); end y=x; format short;%设置为默认格式显示,显示5位 (2)建立MATLAB界面 利用MA TLAB的GUI建立如下界面求解线性方程组: 详见程序。 五、计算实例、数据、结果、分析 下面我们对以上的结果进行测试,求解:

? ? ? ? ? ? ? ? ? ? ? ? - = ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? - - - - - - 7 2 5 10 13 9 14 4 4 3 2 1 13 12 4 3 3 10 2 4 3 2 1 x x x x 输入数据后点击和,得到如下结果: 更改以上数据进行测试,求解如下方程组: 1 2 3 4 43211 34321 23431 12341 x x x x ?? ???? ?? ???? ?? ???? = ?? ???? - ?? ???? - ???? ?? 得到如下结果:

(完整版)哈工大-数值分析上机实验报告

实验报告一 题目:非线性方程求解 摘要:非线性方程的解析解通常很难给出,因此线性方程的数值解法就尤为重要。本实验采用两种常见的求解方法二分法和Newton法及改进的Newton法。 前言:(目的和意义) 掌握二分法与Newton法的基本原理和应用。 数学原理: 对于一个非线性方程的数值解法很多。在此介绍两种最常见的方法:二分法和Newton法。 对于二分法,其数学实质就是说对于给定的待求解的方程f(x),其在[a,b]上连续,f(a)f(b)<0,且f(x)在[a,b]内仅有一个实根x*,取区间中点c,若,则c恰为其根,否则根据f(a)f(c)<0是否成立判断根在区间[a,c]和[c,b]中的哪一个,从而得出新区间,仍称为[a,b]。重复运行计算,直至满足精度为止。这就是二分法的计算思想。

Newton法通常预先要给出一个猜测初值x0,然后根据其迭代公式 产生逼近解x*的迭代数列{x k},这就是Newton法的思想。当x0接近x*时收敛很快,但是当x0选择不好时,可能会发散,因此初值的选取很重要。另外,若将该迭代公式改进为 其中r为要求的方程的根的重数,这就是改进的Newton法,当求解已知重数的方程的根时,在同种条件下其收敛速度要比Newton法快的多。 程序设计: 本实验采用Matlab的M文件编写。其中待求解的方程写成function的方式,如下 function y=f(x); y=-x*x-sin(x); 写成如上形式即可,下面给出主程序。 二分法源程序: clear %%%给定求解区间 b=1.5; a=0;

%%%误差 R=1; k=0;%迭代次数初值 while (R>5e-6) ; c=(a+b)/2; if f12(a)*f12(c)>0; a=c; else b=c; end R=b-a;%求出误差 k=k+1; end x=c%给出解 Newton法及改进的Newton法源程序:clear %%%% 输入函数 f=input('请输入需要求解函数>>','s') %%%求解f(x)的导数 df=diff(f);

数值分析实验报告模板

数值分析实验报告模板 篇一:数值分析实验报告(一)(完整) 数值分析实验报告 1 2 3 4 5 篇二:数值分析实验报告 实验报告一 题目:非线性方程求解 摘要:非线性方程的解析解通常很难给出,因此线性方程的数值解法就尤为重要。本实验采用两种常见的求解方法二分法和Newton法及改进的Newton法。利用二分法求解给定非线性方程的根,在给定的范围内,假设f(x,y)在[a,b]上连续,f(a)xf(b) 直接影响迭代的次数甚至迭代的收敛与发散。即若x0 偏离所求根较远,Newton法可能发散的结论。并且本实验中还利用利用改进的Newton法求解同样的方程,且将结果与Newton法的结果比较分析。 前言:(目的和意义) 掌握二分法与Newton法的基本原理和应用。掌握二分法的原理,验证二分法,在选对有根区间的前提下,必是收

敛,但精度不够。熟悉Matlab语言编程,学习编程要点。体会Newton使用时的优点,和局部收敛性,而在初值选取不当时,会发散。 数学原理: 对于一个非线性方程的数值解法很多。在此介绍两种最常见的方法:二分法和Newton法。 对于二分法,其数学实质就是说对于给定的待求解的方程f(x),其在[a,b]上连续,f(a)f(b) Newton法通常预先要给出一个猜测初值x0,然后根据其迭代公式xk?1?xk?f(xk) f'(xk) 产生逼近解x*的迭代数列{xk},这就是Newton法的思想。当x0接近x*时收敛很快,但是当x0选择不好时,可能会发散,因此初值的选取很重要。另外,若将该迭代公式改进为 xk?1?xk?rf(xk) 'f(xk) 其中r为要求的方程的根的重数,这就是改进的Newton 法,当求解已知重数的方程的根时,在同种条件下其收敛速度要比Newton法快的多。 程序设计: 本实验采用Matlab的M文件编写。其中待求解的方程写成function的方式,如下 function y=f(x);

12级数值分析课程设计

数值分析课程设计题目与要求 (12级应数及创新班) [设计题一] 编写顺序Gauss消去法和列主元Gauss消去法的函数,再分别调用这两个函数求解下面的84阶方程组: = , 然后考虑将方程组的阶数取为10至100之间多个值进行求解。将你的计算结果与方程组的精确解进行比较。从“快”、“准”、“省”三个方面分析以上两个算法,试提出改进的算法并加以实现和验证。 [设计题二] 编写平方根法和改进的平方根法(参见教材《计算方法》P54的例题2.5)的函数,然后分别调用这两个函数求解对称正定方程组Ax=b,其中A和b分别为: (1)系数矩阵A为矩阵(阶数取为10至100之间多个值): , 向量b随机地选取; (2)系数矩阵A为Hilbert矩阵(阶数取为5至40之间多个值),即A的第i行第j列元素,向量b的第i个分量取为。将你的计算结果与方程组的精确解进 行比较。 若出现问题,分析其原因,提出改进的设想并尝试实现之。

对于迭代法 ,......)2,1,0(99.02 1=-=+k x x x k k k , 它显然有不动点0*=x 。试设计2个数值实验 得到收敛阶数的大概数值(不利用判定收敛阶的判据定理): (1) 直接用收敛阶的定义; (2) 用最小二乘拟合的方法。 [设计题四] 湖水在夏天会出现分层现象,接近湖面温度较高,越往下温度变低。这种上热下冷的现象影响了水的对流和混合过程,使得下层水域缺氧,导致水生鱼类的死亡。如果把水温T 看成深度x 的函数T(x),有某个湖的观测数据如下: 环境工程师希望: 1) 用三次样条插值求出T(x)。 2) 求在什么深度处dx dT 的绝对值达到最大( 即02 2=dx T d )。 [设计题五] 某飞机头部的光滑外形曲线的型值点坐标由下表给出: ...值y 及一阶、二阶导数值y ’,y ”。绘出模拟曲线的图形。

数值分析实验报告资料

机电工程学院 机械工程 陈星星 6720150109 《数值分析》课程设计实验报告 实验一 函数插值方法 一、问题提出 对于给定的一元函数)(x f y =的n+1个节点值(),0,1,,j j y f x j n ==。试用Lagrange 公式求其插值多项式或分段二次Lagrange 插值多项式。 数据如下: (1 求五次Lagrange 多项式5L ()x ,计算(0.596)f ,(0.99)f 的值。(提示:结果为(0.596)0.625732f ≈, (0.99) 1.05423f ≈) 实验步骤: 第一步:先在matlab 中定义lagran 的M 文件为拉格朗日函数 代码为: function[c,l]=lagran(x,y) w=length(x); n=w-1; l=zeros(w,w); for k=1:n+1 v=1; for j=1:n+1 if(k~=j) v=conv(v,poly(x(j)))/(x(k)-x(j)); end end l(k,:)=v; end c=y*l; end

第二步:然后在matlab命令窗口输入: >>>> x=[0.4 0.55 0.65 0.80,0.95 1.05];y=[0.41075 0.57815 0.69675 0.90 1.00 1.25382]; >>p = lagran(x,y) 回车得到: P = 121.6264 -422.7503 572.5667 -377.2549 121.9718 -15.0845 由此得出所求拉格朗日多项式为 p(x)=121.6264x5-422.7503x4+572.5667x3-377.2549x2+121.9718x-15.0845 第三步:在编辑窗口输入如下命令: >> x=[0.4 0.55 0.65 0.80,0.95 1.05]; >> y=121.6264*x.^5-422.7503*x.^4+572.5667*x.^3-377.2549*x.^2+121.9718 *x-15.0845; >> plot(x,y) 命令执行后得到如下图所示图形,然后 >> x=0.596; >> y=121.6264*x.^5-422.7503*x.^4+572.5667*x.^3-377.2549*x.^2+121.9718 *x-15.084 y =0.6257 得到f(0.596)=0.6257 同理得到f(0.99)=1.0542

数值分析实验报告

实验一、误差分析 一、实验目的 1.通过上机编程,复习巩固以前所学程序设计语言及上机操作指令; 2.通过上机计算,了解误差、绝对误差、误差界、相对误差界的有关概念; 3.通过上机计算,了解舍入误差所引起的数值不稳定性。 二.实验原理 误差问题是数值分析的基础,又是数值分析中一个困难的课题。在实际计算中,如果选用了不同的算法,由于舍入误差的影响,将会得到截然不同的结果。因此,选取算法时注重分析舍入误差的影响,在实际计算中是十分重要的。同时,由于在数值求解过程中用有限的过程代替无限的过程会产生截断误差,因此算法的好坏会影响到数值结果的精度。 三.实验内容 对20,,2,1,0 =n ,计算定积分 ?+=10 5dx x x y n n . 算法1:利用递推公式 151--=n n y n y , 20,,2,1 =n , 取 ?≈-=+=1 00182322.05ln 6ln 51dx x y . 算法2:利用递推公式 n n y n y 51511-= - 1,,19,20 =n . 注意到 ???=≤+≤=10 10202010201051515611261dx x dx x x dx x , 取 008730.0)12611051(20120≈+≈y .: 四.实验程序及运行结果 程序一: t=log(6)-log(5);

n=1; y(1)=t; for k=2:1:20 y(k)=1/k-5*y(k-1); n=n+1; end y y =0.0884 y =0.0581 y =0.0431 y =0.0346 y =0.0271 y =0.0313 y =-0.0134 y =0.1920 y =-0.8487 y =4.3436 y =-21.6268 y =108.2176 y =-541.0110 y =2.7051e+003 y =-1.3526e+004 y =6.7628e+004 y =-3.3814e+005 y =1.6907e+006 y =-8.4535e+006 y =4.2267e+007 程序2: y=zeros(20,1); n=1; y1=(1/105+1/126)/2;y(20)=y1; for k=20:-1:2 y(k-1)=1/(5*k)-(1/5)*y(k); n=n+1; end 运行结果:y = 0.0884 0.0580 0.0431 0.0343 0.0285 0.0212 0.0188 0.0169

数值分析课程课程设计汇总

课 程 设 计 我再也回不到大二了, 大学是那么短暂 设计题目 数值分析 学生姓名 李飞吾 学 号 x x x x x x x x 专业班级 信息计x x x x x 班 指导教师 设 计 题 目 共15题如下 成绩

数值分析课程设计 1.1 水手、猴子和椰子问题:五个水手带了一只猴子来到南太平洋的一个荒岛上,发现那里有一大堆椰子。由于旅途的颠簸,大家都很疲惫,很快就入睡了。第一个水手醒来后,把椰子平分成五堆,将多余的一只给了猴子,他私藏了一堆后便又去睡了。第二、第三、第四、第五个水手也陆续起来,和第一个水手一样,把椰子分成五堆,恰多一只猴子,私藏一堆,再去入睡,天亮以后,大家把余下的椰子重新等分成五堆,每人分一堆,正好余一只再给猴子,试问原先共有几只椰子?(15621) 试分析椰子数目的变化规律,利用逆向递推的方法求解这一问题 解:算法分析:解该问题主要使用递推算法,关于椰子数目的变化规律可以设起初的椰子数为0p ,第一至五次猴子在夜里藏椰子后,椰子的数目分别为01234,,,,p p p p p 再设最后每个人分得x 个椰子,由题: 14 (1)5 k k p p +=- (k=0,1,2,3,4)51(1)5 x p =- 所以551p x =+,11k k p p +=+利用逆向递推方法求解 15 1,4 k k p p +=+ (k=0,1,2,3,4) MATLAB 代码: n=input('n= '); n= 15621 for x=1:n p=5*x+1; for k=1:5 p=5*p/4+1; end if p==fix(p), break end end disp([x,p]) 1.2 设,1 5n n x I dx x =+? (1)从0I 尽可能精确的近似值出发,利用递推公式: 11 5(1,2,20)n n I I n n -=-+= 计算机从1I 到20I 的近似值; (2)从30I 较粗糙的估计值出发,用递推公式:

数值分析2016上机实验报告

序言 数值分析是计算数学的范畴,有时也称它为计算数学、计算方法、数值方法等,其研究对象是各种数学问题的数值方法的设计、分析及其有关的数学理论和具体实现的一门学科,它是一个数学分支。是科学与工程计算(科学计算)的理论支持。许多科学与工程实际问题(核武器的研制、导弹的发射、气象预报)的解决都离不开科学计算。目前,试验、理论、计算已成为人类进行科学活动的三大方法。 数值分析是计算数学的一个主要部分,计算数学是数学科学的一个分支,它研究用计算机求解各种数学问题的数值计算方法及其理论与软件实现。现在面向数值分析问题的计算机软件有:C,C++,MATLAB,Python,Fortran等。 MATLAB是matrix laboratory的英文缩写,它是由美国Mathwork公司于1967年推出的适合用于不同规格计算机和各种操纵系统的数学软件包,现已发展成为一种功能强大的计算机语言,特别适合用于科学和工程计算。目前,MATLAB应用非常广泛,主要用于算法开发、数据可视化、数值计算和数据分析等,除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能。 本实验报告使用了MATLAB软件。对不动点迭代,函数逼近(lagrange插值,三次样条插值,最小二乘拟合),追赶法求解矩阵的解,4RungeKutta方法求解,欧拉法及改进欧拉法等算法做了简单的计算模拟实践。并比较了各种算法的优劣性,得到了对数值分析这们学科良好的理解,对以后的科研数值分析能力有了极大的提高。

目录 序言 (1) 问题一非线性方程数值解法 (3) 1.1 计算题目 (3) 1.2 迭代法分析 (3) 1.3计算结果分析及结论 (4) 问题二追赶法解三对角矩阵 (5) 2.1 问题 (5) 2.2 问题分析(追赶法) (6) 2.3 计算结果 (7) 问题三函数拟合 (7) 3.1 计算题目 (7) 3.2 题目分析 (7) 3.3 结果比较 (12) 问题四欧拉法解微分方程 (14) 4.1 计算题目 (14) 4.2.1 方程的准确解 (14) 4.2.2 Euler方法求解 (14) 4.2.3改进欧拉方法 (16) 问题五四阶龙格-库塔计算常微分方程初值问题 (17) 5.1 计算题目 (17) 5.2 四阶龙格-库塔方法分析 (18) 5.3 程序流程图 (18) 5.4 标准四阶Runge-Kutta法Matlab实现 (19) 5.5 计算结果及比较 (20) 问题六舍入误差观察 (22) 6.1 计算题目 (22) 6.2 计算结果 (22) 6.3 结论 (23) 7 总结 (24) 附录

数值分析课程设计(最终版)

本文主要通过Matlab 软件,对数值分析中的LU 分解法、最小二乘法、复化Simpon 积分、Runge-Kutta 方法进行编程,并利用这些方法在MATLAB 中对一些问题进行求解,并得出结论。 实验一线性方程组数值解法中,本文选取LU 分解法,并选取数据于《数值分析》教材第5章第153页例5进行实验。所谓LU 分解法就是将高斯消去法改写为紧凑形式,可以直接从矩阵A 的元素得到计算L 、U 元素的递推公式,而不需要任何步骤。用此方法得到L 、U 矩阵,从而计算Y 、X 。 实验二插值法和数据拟合中,本文选取最小二乘拟合方法进行实验,数据来源于我们课堂学习该章节时的课件中的多项式拟合例子进行实验。最小二乘拟合是一种数学上的近似和优化,利用已知的数据得出一条直线或者曲线,使之在坐标系上与已知数据之间的距离的平方和最小。利用excel 的自带函数可以较为方便的拟合线性的数据分析。 实验三数值积分中,本文选取复化Simpon 积分方法进行实验,通过将复化Simpson 公式编译成MATLAB 语言求积分∫e ;x dx 1 0完成实验过程的同时,也对复化Simpon 积分章节的知识进行了巩固。 实验四常微分方程数值解,本文选取Runge-Kutta 方法进行实验,通过实验了解Runge-Kutta 法的收敛性与稳定性同时学会了学会用Matlab 编程实现Runge-Kutta 法解常微分方程,并在实验的过程中意识到尽管我们熟知的四种方法,事实上,在求解微分方程初值问题,四阶法是单步长中最优秀的方法,通常都是用该方法求解的实际问题,计算效果比较理想的。 实验五数值方法实际应用,本文采用最小二乘法拟合我国2001年到2015年的人口增长模型,并预测2020年我国人口数量。 关键词:Matlab ;LU 分解法;最小二乘法;复化Simpon 积分;Runge-Kutta

数值分析实验报告总结

数值分析实验报告总结 随着电子计算机的普及与发展,科学计算已成为现代科 学的重要组成部分,因而数值计算方法的内容也愈来愈广泛和丰富。通过本学期的学习,主要掌握了一些数值方法的基本原理、具体算法,并通过编程在计算机上来实现这些算法。 算法算法是指由基本算术运算及运算顺序的规定构成的完 整的解题步骤。算法可以使用框图、算法语言、数学语言、自然语言来进行描述。具有的特征:正确性、有穷性、适用范围广、运算工作量少、使用资源少、逻辑结构简单、便于实现、计算结果可靠。 误差 计算机的计算结果通常是近似的,因此算法必有误差, 并且应能估计误差。误差是指近似值与真正值之差。绝对误差是指近似值与真正值之差或差的绝对值;相对误差:是指近似值与真正值之比或比的绝对值。误差来源见表 第三章泛函分析泛函分析概要 泛函分析是研究“函数的函数”、函数空间和它们之间 变换的一门较新的数学分支,隶属分析数学。它以各种学科

如果 a 是相容范数,且任何满足 为具体背景,在集合的基础上,把客观世界中的研究对象抽 范数 范数,是具有“长度”概念的函数。在线性代数、泛函 分析及相关的数学领域,泛函是一个函数,其为矢量空间内 的所有矢量赋予非零的正长度或大小。这里以 Cn 空间为例, Rn 空间类似。最常用的范数就是 P-范数。那么 当P 取1, 2 ,s 的时候分别是以下几种最简单的情形: 其中2-范数就是通常意义下的距离。 对于这些范数有以下不等式: 1 < n1/2 另外,若p 和q 是赫德尔共轭指标,即 1/p+1/q=1 么有赫德尔不等式: II = ||xH*y| 当p=q=2时就是柯西-许瓦兹不等式 般来讲矩阵范数除了正定性,齐次性和三角不等式之 矩阵范数通常也称为相容范数。 象为元素和空间。女口:距离空间,赋范线性空间, 内积空间。 1-范数: 1= x1 + x2 +?+ xn 2-范数: x 2=1/2 8 -范数: 8 =max oo ,那 外,还规定其必须满足相容性: 所以

数值分析-课程设计doc

课程设计报告 课程名称数值分析 课题名称数值积分 专业信息与计算科学 班级 学号 姓名 指导教师 2015 年12 月20 日

湖南工程学院 课程设计任务书 课程名称数值分析 课题数值积分 专业班级信息与计算科学0901班 学生姓名 学号 指导老师辉 审批 任务书下达日期2015 年12 月7 日任务完成日期2015 年12 月20日

设计内容与设计要求 1. 设计内容: 非奇异矩阵矩阵A ∈R n*n ,已知A -1的一个近似矩阵D (0)∈R n*n ,则由矩阵公式: ?????+=-=--)()1()1(K K K K K F I D D AD I F , K=0,1,2,3........... (1).已知矩阵A 及其逆矩阵的一个近似D (k)为: A=?? ??? ?? ?? ???--------7.49.43.49.19.47.11.88.78.26 .21.27.07.37.08.38.1 D= ???? ? ???? ???---------185.0061.0388.0293.0199.0009.0046.0230.0089.0016.0169.0035.0270.0163.0460.0211.0 用以上方法计算序列{D (k)}迭代次数超过100次时结束。 (2)分析最后得到的D (k)是否A 的一个较好的近似逆矩阵 2.设计要求: ● 课程设计报告正文内容 a. 问题的描述及算法设计; b. 算法的流程图(要求画出模块图); c. 算法的理论依据及其推导; d. 相关的数值结果(通过程序调试),; e. 数值计算结果的分析; f. 附件(所有程序的原代码,要求对程序写出必要的注释)。 ● 书写格式

数值分析实验报告1

实验一 误差分析 实验1.1(病态问题) 实验目的:算法有“优”与“劣”之分,问题也有“好”与“坏”之别。对数值方法的研究而言,所谓坏问题就是问题本身对扰动敏感者,反之属于好问题。通过本实验可获得一个初步体会。 数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。 问题提出:考虑一个高次的代数多项式 )1.1() ()20()2)(1()(20 1∏=-=---=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)的解对扰动的敏感性。 实验容:为了实现方便,我们先介绍两个Matlab 函数:“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 ”是两个互逆的运算函数。 ;000000001.0=ess );21,1(zeros ve = ;)2(ess ve =

相关主题
文本预览
相关文档 最新文档