当前位置:文档之家› 计算方法上机实验报告

计算方法上机实验报告

计算方法上机实验报告
计算方法上机实验报告

. / 《计算方法》上机实验报告

班级:XXXXXX

小组成员:XXXXXXX

XXXXXXX

XXXXXXX

XXXXXXX

任课教师:XXX

二〇一八年五月二十五日

前言

通过进行多次的上机实验,我们结合课本上的内容以及老师对我们的指导,能够较为熟练地掌握Newton 迭代法、Jacobi 迭代法、Gauss-Seidel 迭代法、Newton 插值法、Lagrange 插值法和Gauss 求积公式等六种算法的原理和使用方法,并参考课本例题进行了MATLAB 程序的编写。

以下为本次上机实验报告,按照实验内容共分为六部分。

实验一:

一、实验名称及题目: Newton 迭代法

例2.7(P38):应用Newton 迭代法求在附近的数

值解,并使其满足.

二、解题思路:

设'x 是0)(=x f 的根,选取0x 作为'x 初始近似值,过点())(,00x f x 做曲线)(x f y =的切线L ,L 的方程为))((')(000x x x f x f y -+=,求出L 与x 轴交

点的横坐标)

(')

(0001x f x f x x -

=,称1x 为'x 的一次近似值,过点))(,(11x f x 做曲线)(x f y =的切线,求该切线与x 轴的横坐标)

(')

(1112x f x f x x -

=称2x 为'x 的二次近似值,重复以上过程,得'x 的近似值序列{}n x ,把)

(')

(1n n n n x f x f x x -

=+称为'x 的1+n 次近似值,这种求解方法就是牛顿迭代法。

三、Matlab 程序代码:

function newton_iteration(x0,tol) syms z %定义自变量 format long %定义精度 f=z*z*z-z-1;

f1=diff(f);%求导 y=subs(f,z,x0);

y1=subs(f1,z,x0);%向函数中代值 x1=x0-y/y1; k=1;

while abs(x1-x0)>=tol x0=x1;

y=subs(f,z,x0); y1=subs(f1,z,x0); x1=x0-y/y1;k=k+1; end

x=double(x1) K

四、运行结果:

实验二:

一、实验名称及题目:

Jacobi 迭代法

例3.7(P74):试利用Jacobi 迭代公式求解方程组

要求数值解

为方程组的精确解. 二、解题思路:

首先将方程组中的系数矩阵A 分解成三部分,即:U D L A ++=,D 为对角阵,L 为下三角矩阵,U 为上三角矩阵。

之后确定迭代格式,f X B X k k +=+)()1(*,( ???=2,1,0k , k 即迭代次数),B 称为迭代矩阵。

最后选取初始迭代向量)0(X ,开始逐次迭代。最后验证精度。(迭代阵:b D UX

D X

k k

1

)

(1)

1(--++-=。)

雅克比迭代法的优点明显,计算公式简单,每迭代一次只需计算

一次矩阵和向量的乘法,且计算过程中原始矩阵A始终不变,比较容易并行计算。然而这种迭代方式收敛速度较慢,而且占据的存储空间较大。

三、Matlab程序代码:

function jacobi(A,b,x0,eps,x1)

D = diag(diag(A));%求A的对角矩阵

L = -tril(A,-1);%求A的下三角矩阵

U = -triu(A,1);%求A的上三角矩阵

B = D\(L+U);

f = D\b;

x = B*x0+f;

n = 1;%迭代次数

while norm(x-x1)>=eps

x = B*x+f;

n = n+1;

end

format long

n

x

jingdu=norm(x-x1)

四、运行结果:

实验三:

一、实验名称及题目:

Gauss-Seidel 迭代法

例 3.8(P75):试利用Gauss-Seidel 迭代公式求解方程组

,并使其数值解

为方程组的精确解. 二、解题思路:

Gauss-Seidel 迭代法与Jacobi 迭代法思路相近,首先将方程组中的系数矩阵A 分解成三部分,即:U D L A ++=,D 为对角阵,L 为下三角矩阵,U 为上三角矩阵。之后确定迭代格式,f X B X k k +=+)()1(*,( ???=2,1,0k , k 即迭代次数),B 称为迭代矩阵。最后选取初始迭代向量0X ,开始逐次迭代。最后验证精度。(迭代阵:

b L D UX

L D X

k k

1

)

(1)

1()()(--++++-=。)

Gauss-Seidel 迭代法与Jacobi 迭代法相比速度更快,但不全如此。有例子表明:Gauss-Seidel 迭代法收敛时,Jacobi 迭代法可能不收敛;而Jacobi 迭代法收敛时,Gauss-Seidel 迭代法也可能不收敛。 三、Matlab 程序代码:

function gauss_seidel(A,b,x0,eps,x1) D = diag(diag(A));%求A的对角矩阵L = -tril(A,-1);%求A的下三角矩阵

U = -triu(A,1);%求A的上三角矩阵B = (D-L)\U;

f = (D-L)\b;

x = B*x0+f;

n = 1;%迭代次数

while norm(x1-x)>=eps

x = B*x+f;

n = n+1;

end

format long

n

x

jingdu=norm(x1-x)

四、运行结果:

实验四:

一、实验名称及题目:

Lagrange 插值法

例 4.1(P88):给定函数及插值节点

.试构造Lagrange 插值多项式,

给出其误差估计,并由此计算及其误差.

二、解题思路:

一般来说,如果我们有n 个点()()n n y x y x ,,...,1,1,各i x 互不相同。那么应用拉格朗日插值公式所得到的拉格朗日插值多项式为:

∑==n

j j j x l y x L 0)()(,其中每个)(x l j 为拉格朗日基本多项式(或称插值基函

数),其表达式为:∏≠=--=n

j i i i

j i

j x x x x x l ,0)(。

三、Matlab 程序代码:

function y=lagrange(x0,x)

n=length(x0);%向量长度 s=0;

for k=1:n %k 从1到n 的循环 p=1.0; for j=1:n

if j~=k %“~=”不等于的意思 p=p*(x-x0(j))/(x0(k)-x0(j)); end end

y0=x0(k)*(1+cos(x0(k))); s=p*y0+s; end

format long s

wucha=abs(x*(1+cos(x))-s)

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