数值分析课程设计Word下载.docx

上传人:b****5 文档编号:20793762 上传时间:2023-01-25 格式:DOCX 页数:15 大小:95.08KB
下载 相关 举报
数值分析课程设计Word下载.docx_第1页
第1页 / 共15页
数值分析课程设计Word下载.docx_第2页
第2页 / 共15页
数值分析课程设计Word下载.docx_第3页
第3页 / 共15页
数值分析课程设计Word下载.docx_第4页
第4页 / 共15页
数值分析课程设计Word下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

数值分析课程设计Word下载.docx

《数值分析课程设计Word下载.docx》由会员分享,可在线阅读,更多相关《数值分析课程设计Word下载.docx(15页珍藏版)》请在冰豆网上搜索。

数值分析课程设计Word下载.docx

2基本原理12

3实验内容及数据来源12

4实验结论14

心得15

参考文献16

实验一列主元Gauss消去法

1实验目的与要求

熟悉列主元Gauss消去法的基本原理;

会用matlab程序实现列主元Gauss消去法的全过程。

2基本原理

为了提高计算的数值稳定性,在消元过程中采用选择主元的方法.常采用的是列主元消去法。

给定线性方程组Ax=b,记A

(1)=A,b

(1)=b,列主元Gauss消去法的具体过程如下:

首先在增广矩阵B

(1)=(A

(1),b

(1))的第一列元素中,取

为主元素,

然后进行第一步消元得增广矩阵B

(2)=(A

(2),b

(2))。

再在矩阵B

(2)=(A

(2),b

(2))的第二列元素中,取

然后进行第二步消元得增广矩阵B(3)=(A(3),b(3))。

按此方法继续进行下去,经过n-1步选主元和消元运算,得到增广矩阵B(n)=(A(n),b(n))。

则方程组A(n)x=b(n)是与原方程组等价的上三角形方程组,可进行回代求解。

易证,只要|A|

0,列主元Gauss消去法就可顺利进行。

可见,列主元Gauss消去法是在每一步消元前,在主元所在的一列选取绝对值最大的元素作为主元素.而全主元Gauss消去法是在每一步消元前,在所有元素中选取绝对值最大的元素作为主元素.但由于运算量大增,实际应用中并不经常使用.

3实验内容及数据来源

下面先用Matlab编写列主元Gauss消去的函数文件如下:

%列选主元的高斯消去法

functionX=lufact_my(A,B)

%InpiutA是系数矩阵,B是右端项

%Outputx是解

[N,N]=size(A);

X=zeros(N,1);

Y=zeros(N,1);

C=zeros(1,N);

R=1:

N;

k=1;

whilek<

=N-1

%求列中最大的值赋给max

[max1,j]=max(abs(A(k:

N,k)));

%交换行

C=A(k,:

);

%C为A的第k列的值

A(k,:

)=A(j+k-1,:

%将A的第K列赋为最大

A(j+k-1,:

)=C;

d=R(k);

R(k)=R(j+k-1);

R(j+k-1)=d;

%主元为0的情况

ifA(k,k)==0

'

Aissingular.nouniquesolution'

break

end

%化为上三角

form=k+1:

N

mult=A(m,k)/A(k,k);

A(m,k)=mult;

A(m,k+1:

N)=A(m,k+1:

N)-mult*A(k,k+1:

N);

m=m+1;

k=k+1;

end

%对右端项做处理,但要保证行的交换相同,要注意R(k)的作用

Y

(1)=B(R

(1));

fork=2:

Y(k)=B(R(k))-A(k,1:

k-1)*Y(1:

k-1);

X(N)=Y(N)/A(N,N);

fork=N-1:

-1:

1

X(k)=(Y(k)-A(k,k+1:

N)*X(k+1:

N))/A(k,k);

例题:

用列主元Gauss消去法求解方程

的解。

输入:

>

A=[223;

476;

789];

B=[4;

7;

9];

lufact(A,B)

输出:

ans=

-2.3333

-0.3333

3.1111

4实验结论

上述matlab程序可以比较好的实现列主元Gauss消去法,且经过实际例子检验出这种方法是正确的。

列主元Gauss消去法是在每一步消元前,在主元所在的一列选取绝对值最大的元素作为主元素.而全主元Gauss消去法是在每一步消元前,在所有元素中选取绝对值最大的元素作为主元素.但由于运算量大增,实际应用中并不经常使用.

实验二Lagrange插值

熟悉Lagrange插值法的基本原理;

会用matlab程序实现Lagrange插值法;

会用Lagrange插值法求解实际问题。

给定(n+1)个插值节点

和对应的函数值

,利用n次拉格朗日插值多项式公式:

,其中

,可以得到插值区间任意x的函数值y为

从公式中可以看出,生成的多项式与用来插值的数据密切相关,数据变化则函数就要重新计算,所以当插值数据特别多的时候,计算量就会比较大。

由于Matlab中并没有现成的拉格朗日插值命令,下面先编写拉格朗日的函数文件:

functions=Lagrange(x,y,x0)

nx=length(x);

ny=length(y);

ifnx~=ny

warning('

矢量x与y的长度应该相同'

return

m=length(x0);

fori=1:

m

t=0.0;

forj=1:

nx

u=1.0;

fork=1:

nx;

ifk~=j

u=u*(x0(i)-x(k))/(x(j)-x(k));

t=t+u*y(j);

s(m)=t;

Return

编好M文件后,就可以用Lagrange插值函数进行插值计算了,下面根据x和y的数据求0.9出的值。

其中,

x=[0.70.50.40.8]

y=[-0.916291-0.693147-0.356675-0.223144];

x=[0.70.50.40.8];

y=[-0.916291-0.693147-0.356675-0.223144];

Lagrange(x,y,0.9)

1.3930

下面重新给定数据:

求解3.6,4.9,7.3三个点上的值。

x=[578910]

y=[107641];

x=[578910];

y=[107641];

Lagrange(x,y,[3.44.97.3])

006.7729

从上图中可以看出,拉格朗日插值的一个特点:

拟合出的多项式通过每一个测量数据点。

由于Lagrange插值的n次插值基函数

lk(x)(k=0,1,2,…n)都依赖于全部插值结点,利用公式很容易得到插值多项式,但在增加或减少结点时,插值基函数

lk(x)(k=0,1,2,…n)也随之变化,必须全部重新计算。

实验三龙贝格求积公式

熟悉龙贝格求积公式的基本原理;

会用matlab程序实现龙贝格求积公式;

会用龙贝格求积公式求解定积分。

由于变步长梯形求积法算法简单,但其精度较差,收敛速度较慢,故利用变步长梯形法算法简单的优点,重新形成一个新算法,这就是龙贝格求积公式。

它是对近似值进行修正以后得到的更近似的公式,能自动改变积分步长,以使其相邻两次值的绝对误差或相对误差小于预先设定的允许误差。

龙贝格求积公式为:

根据上述实验原理,可以编写龙贝格求积公式的M文件romber.m:

function[R,quad,err,h]=romber(fun,a,b,n,delta)

M=1;

h=b-a;

err=1;

J=0;

R=zeros(4,4);

R(1,1)=h*(fun(a)+fun(b))/2;

while((err>

delta)&

&

(J<

n))||(J<

4)

J=J+1;

h=h/2;

s=0;

forp=1:

M

x=a+h*(2*p-1);

c=fun(x);

s=s+c;

R(J+1,1)=R(J,1)/2+h*s;

M=2*M;

forK=1:

J

R(J+1,K+1)=R(J+1,K)+(R(J+1,K)-R(J,K))/(4.^K-1);

err=abs(R(J,J)-R(J+1,K+1));

end

quad=R(J+1,J+1)

用龙贝格算法计算定积分

在matlab的命令栏输入:

fun=@(x)sqrt(4*x-x.^3);

romber(fun,0,1,5,10.^(-10))

输出结果:

quad=

1.2580

0.866000000

1.11771.20150000

1.20831.23851.2410000

1.24081.25161.25251.252600

1.25241.25621.25651.25661.25660

1.25651.25791.25801.25801.25801.2580

龙贝格求积公式算法简单,高速有效,易于编制程序,适合于计算机上操作。

采用了提高阶数与减少步长这两种提高精度的措施。

能比较准确的求出定积分的值。

但它有一个明显的缺点是:

每当把区间对分后,就要对被积函数f(x)计算它在新分点处的值,而这些函数值的个数是成倍增加的。

实验四Runge-Kutta方法

熟悉Runge-Kutta方法的基本原理;

会用matlab程序实现Runge-Kutta方法;

会用Runge-Kutta方法求解微分方程。

三阶库塔方法(它的截断误差为

):

用方程

中函数

在前一节点

上取值

的线性组合构造一个表示

的近似公式,从而避免了求

时用

的高阶导数。

该方法有多样推导方法,这里用数值积分法推导。

为此,先将微分方程

略加变形得出:

,对该式两边在相邻两节点

之间求积分,移项得出:

,采用不同的方法计算定积分

,便可得出数值积分的不同近似结果。

还可以构造更高阶的龙格—库塔公式,它的一般形式是:

,其中,

根据上述实验原理,可以编写Runge-Kutta方法的M文件:

functionR=rk3(f,a,b,ya,N)

h=(b-a)/N;

T=zeros(1,N+1);

Y=zeros(1,N+1);

T=a:

h:

b;

Y

(1)=ya;

forj=1:

k1=feval(f,T(j),Y(j));

k2=feval(f,T(j)+h/3,Y(j)+h*k1/3);

k3=feval(f,T(j)+2*h/3,Y(j)+2*h*k2/3);

Y(j+1)=Y(j)+h*(k1+3*k3)/4;

R=[T'

Y'

];

根据给出的条件求下列微分方程的解:

建立本题数据的M文件:

functionz=f(x,y)

z=y-x/y;

以f.m文件命名。

然后,回到Matlab的命令窗口,

rk3('

f'

0,1,1,10)

回车后得到结果:

01.0000

0.10001.1003

0.20001.2025

0.30001.3081

0.40001.4187

0.50001.5359

0.60001.6613

0.70001.7965

0.80001.9433

0.90002.1035

1.00002.2791

龙格—库塔方法可以解决大部分微分方程的求解问题,并且可以较好较快的解出微分方程的解。

并且,龙格—库塔方法是由Euler法改进的,故其拥有Euler法的所有优点。

实验五Gauss-Seidel迭代法实例

熟悉Gauss-Seidel迭代法的基本原理;

会用matlab程序实现Gauss-Seidel迭代法;

会用Gauss-Seidel迭代法求解微分方程。

设线性方程组为AX=B,则Gauss-Seidel迭代法的迭代公式:

对应的矩阵表达式为:

称为Gauss-Seidel迭代矩阵,

上式称为Gauss-Seidel迭代法,简称为G-S迭代法

下面编写Gauss-Seidel迭代法的M文件gseid.m:

functionX=gseid(A,B,P,delta,max1)

N=length(B);

fork=1:

max1

ifj==1

X

(1)=(B

(1)-A(1,2:

N)*P(2:

N))/A(1,1);

elseifj==N

X(N)=(B(N)-A(N,1:

N-1)*(X(1:

N-1))'

)/A(N,N);

else

X(j)=(B(j)-A(j,1:

j-1)*X(1:

j-1)-A(j,j+1:

N)*P(j+1:

N))/A(j,j);

err=abs(norm(X'

-P));

relerr=err/(norm(X)+eps);

P=X'

;

if(err<

delta)|(relerr<

delta)

X

用Gauss-Seidel迭代法求解线性方程组Ax=B,其中,

A=[4-11;

4-81;

-215];

B=[7-2115]'

A=[4-11;

B=[7-2115]'

P=[000]'

delta=0.0000001;

max1=80;

X=gseid(A,B,P,delta,max1)

X=

2.00004.00003.0000

线性方程组的解法很多,如雅克比迭代法,高斯迭代法以及超松弛迭代法,较雅克比迭代法来看,高斯迭代法收敛较快.同样取精确到小数点后同一位数的近似解,高斯迭代法所需要的迭代次数次比雅克比迭代法需要的迭代次数少。

心得

短短几天的数值分析课程设计很快结束了,通过此次的训练我了解到一些简单的matlab编程方法,丰富了编程知识及常识,了解到了基础知识的重要性,以前认为的matlab都只是用来作图形的,但是课设完了我知道能利matlab解决比较复杂的数值计算问题。

通过我的努力以及遇到不会的问题主动向老师提问,我顺利的完成了这次语言课程设计,感到要想对一门课程了解深刻就必须亲自身入其中的去体验,这样才能发现服,也才能真正的学到知识,也明白了那句“纸上谈来终觉浅,深知此是要躬行自己的很多缺点,才能一一的去克”的真正意义。

纵然把结论书本背得滚瓜烂熟而不运用与实际,也不过是纸上谈兵罢了,终究在未来需要动手能力和实践人才的社会竞争中被淘汰,所以我们须要课程实习,需要工程训练,这样才能成为真正的二十一世纪合格的大学生!

参考文献

[1]石辛民.郝整清.基于Matlab的实用数值计算.清华大学出版社.北京交通大学出版社,2006

[2]苏金朋.阮沈勇.Matlab实用教程.电子工程出版社,2005

[3]张明辉.Matlab6.1..中国水利水电出版社,2008

[4]张池平.计算方法.哈尔滨工业大学出版社,2009

[5]杨万利.数值分析教程.国防工业出版社,2005

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 起诉状

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1