数值稳定性验证实验报告

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

实验课程:数值计算方法专业:数学与应用数学班级:08070141

学号:37

*名:***

中北大学理学院

实验1 赛德尔迭代法

【实验目的】

熟悉用塞德尔迭代法解线性方程组 【实验内容】

1.了解MATLAB 语言的用法

2.用塞德尔迭代法解下列线性方程组

1234123412341234

541012

581034

x x x x x x x x x x x x x x x x ---=-⎧⎪-+--=⎪⎨

--+-=⎪⎪---+=⎩ 【实验所使用的仪器设备与软件平台】

计算机,MATLAB7.0

【实验方法与步骤】

1.先找出系数矩阵A ,将前面没有算过的x j 分别和矩阵的(,)A i j 相乘,然后将累加的和赋值给sum ,即(),j sum sum A i j x =+⋅.算出

()/(,)i i x b sum A i i =-,依次循环,算出所有的i x 。

2.若i x 前后两次之差的绝对值小于所给的误差限ε,则输出i x .否则重复以上过程,直到满足误差条件为止.

【实验结果】

(A 是系数矩阵,b 是右边向量,x 是迭代初值,ep 是误差限)

function y=seidel(A,b,x,ep) n=length(b); er=1; k=0; while er>=ep

k=k+1;

for i=[1:1:n]

q=x(i);

sum=0;

for j=[1:1:n]

if j~=i

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

end

end

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

er=abs(q-x(i));

end

end

fprintf('迭代次数k=%d\n',k)

disp(x')

【结果分析与讨论】

>> A=[5 -1 -1 -1;-1 10 -1 -1;-1 -1 5 -1;-1 -1 -1 10]; b=[-4 12 8 34];

seidel(A,b,[0 0 0 0],1e-3)

迭代次数k=6

0.99897849430002

1.99958456867649

2.99953139743435

3.99980944604109

实验课程:数值计算方法专业:数学与应用数学班级:08070141

学号:37

姓名:汪鹏飞

中北大学理学院

实验2 最小二乘法的拟合

【实验目的】

熟悉最小二乘法的拟合方法 【实验内容】

1.了解MATLAB 语言的用法

2.给出数据

希望用一次,二次多项式利用最小二乘法拟合这些数据,试写出正规方程组,并求出最小平方逼近多项式。

【实验所使用的仪器设备与软件平台】

计算机,MATLAB7.0,

【实验方法与步骤】

1.先算出 1

n j j i i l x ==∑,再算出 (1)1

n

j j i i i b x y -==∑

2.在正规方程组

20121111

231

01211111

120121

1111n n n n

m

i i m i i

i i i i n n n n n

m i i i m i i i

i i i i i n n n n n

m m m m m m i i i m i i i

i i i i i a n a x a x a x y a x a x a x a x x y a x a x a x a x x y ====+=====+++=====⎧++++=⎪

⎪++++=⎪⎨⎪⎪

⎪++++=⎪⎩∑∑∑∑∑∑∑∑∑∑∑∑∑∑ 中令1

n j j i i l x ==∑,(1)1

n

j j i i i b x y -==∑

3.令正规方程组的系数矩阵为A ,当j m ≤时,将j l 的值赋给(1,1)A j +, 当j>m 时,将j l 的值赋给(1,1)A j m m +-+,再将矩阵A 的其他元素写出来,于是正规矩阵可写成Aa b =,最后用1a A b -=即可算出向量a,向量a 的

元素依次是常数项,一次项的系数,二次项的系数m次项的系数.

4.由系数即可写出拟合的多项式曲线.

【实验结果】

(x,y为给定的对应值,m是要求的拟合次数)

function a=zxecf(x,y,m)

n=length(x);

A(1,1)=n;

for j=[1:1:2*m]

l(j)=0;

for i=[1:1:n]

l(j)=l(j)+x(i)^j;

end

if j<=m

A(1,1+j)=l(j);

else A(j+1-m,m+1)=l(j);

end

end

for j=[1:1:m+1]

b(j)=0;

for i=[1:1:n]

b(j)=b(j)+y(i)*x(i)^(j-1);

end

end

for i=[2:1:m+1]

k=-1;

for j=[m+1:-1:1]

k=k+1;

A(i,j)=l(m+i-1-k);

相关文档
最新文档