文档库 最新最全的文档下载
当前位置:文档库 › 数值分析报告上机实验——解线性方程组

数值分析报告上机实验——解线性方程组

数值分析报告上机实验——解线性方程组
数值分析报告上机实验——解线性方程组

实验报告

课程名称数值分析

实验项目名称解线性方程组

实验类型上机实验学时 4 班级20111131 学号2011113130 姓名张振指导教师沈艳

实验室名称理学楼407 实验时间2013.12.9

实验成绩预习部分

实验过程

表现

实验报告

部分

总成绩

教师签字日期

哈尔滨工程大学教务处制

实验四 解线性方程组

一.解线性方程组的基本思想 1.直接三角分解法:

将系数矩阵A 转变成等价两个矩阵L 和U 的乘积 ,其中L 和U 分别是下三角和上三角矩阵。当A 的所有顺序主子式都不为0时,矩阵A 可以分解为A=LU ,且分解唯一。其中L 是单位下三角矩阵,U 是上三角矩阵。 2.平方根法:

如果矩阵A 为n 阶对称正定矩阵,则存在一个对角元素为正数的下三角实矩阵L ,使得:A=LL^T 。当限定L 的对角元素为正时,这种分解是唯一的,称为平方根法(Cholesky )分解。 3.追赶法:

设系数矩阵为三对角矩阵

1122233111000000000

000000

n n n n

n b c a b c a b A a b c a b ---?? ? ? ?=

? ?

?

?

??

?

则方程组Ax=f 称为三对角方程组。

设矩阵A 非奇异,A 有Crout 分解A=LU ,其中L 为下三角矩阵,U 为单位上三角矩阵,记

1122

233

1

1000010

000

0001000

000100,00000000

00

0001n n n

n b L U γαβγββγβ--???? ?

? ? ? ? ??==

?

? ?

? ? ?

? ?

?

?

?

?

?

?

? 可先依次求出L ,U 中的元素后,令Ux=y ,先求解下三角方程组Ly=f 得出y ,再求解上三角

方程组Ux=y 。

4.雅克比迭代法:

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

之后确定迭代格式,X )1(+k = BX )(k +f ,如图2所示,其中B 称为迭代矩阵,雅克比迭代法中一般记为J 。(k = 0,1,......)再选取初始迭代向量X )0(,开始逐次迭代。

5.超松弛迭代法(SOR )

它是在GS 法基础上为提高收敛速度,采用加权平均而得到的新算法。 选取分裂矩阵M 为带参数的下三角矩阵

M =

ω

1

(D -L ω), 其中ω>0 为可选择的松弛因子,一般当1<ω<2时称为超松弛。 二.实验题目及实验目的

1.(第五章习题8)用直接三角分解(杜利特尔(Doolittle )分解)求线性方程组

141x +251x +36

1

x = 9, 131

x +241x +351x = 8,

12

1

x + 2x +32x = 8 的解。

2.(第五章习题9)用追赶法解三对角方程组Ax=b ,其中

A=?

?

?

??

?

??

??--------2100012100012100012100012,b=???????? ??00001.

3.(第五章习题10)用改进的平方根法解线性方程组

????? ??---131321112????? ??321x x x = ????

?

??654 4.(第六章习题7)用SOR 方法解线性方程组(分别取松弛因子ω=1.03,ω=1,

ω=1.1)

41x - 2x = 1, -1x +42x - 3x = 4,

-2x +43x = -3.

精确解x *=(

21,1,-2

1

)T .要求当)(*k x x -∞<5×106-时迭代终止,并且对每一个ω值确定迭代次数.

5.(第六章习题8)用SOR 方法解线性方程组(取ω=0.9) 51x -22x + 3x = -12, -1x +42x - 23x = 20, 21x -32x +103x = 3.

要求当)

()1(k k x x -+∞

<104-时迭代终止.

6.(第六章习题9)设有线性方程组Ax=b ,其中A 为对称正定阵,迭代公式

)()1(k k x x =++ω(b- A )(k x ),k=0,1,2…,

试证明当0<ω<

β

2

时上述迭代法收敛(其中0<α≤λ(A)≤β). 7.(第六章计算实习题1)给出线性方程组H n x=b ,其中系数矩阵H n 为希尔伯特矩阵:

H n x=(h ij )∈R n n ?, h ij =

1

1

-+j i ,i ,j=1,2,…,n.

假设x *=(1,1,…,1)T ∈R n ,b= H n x *.若取n=6,8,10,分别雅克比迭代法及SOR 迭代(ω=1,1.25,1.5)求解.比较计算结果. 三.实验手段:

指操作环境和平台:win7系统下MATLAB R2009a

程序语言:一种类似C 语言的程序语言,但比C 语言要宽松得多,非常方便。 四.程序

1.

①直接三角分解(文件ZJsanjiao.m ) function x=ZJsanjiao(A,b) [m,n]=size(A); [l u]=lu(A); s=inv(l)*[A,b]; x=ones(m,1);

for i=m:-1:1

h=s(i,m+1);

for j=m:-1:1;

if j~=i

h=h-x(j)*s(i,j);

end

end

x(i)=h/s(i,i);

end

②控制台输入代码:

>> A=[1/4,1/5,1/6;1/3,1/4,1/5;1/2,1,2];

>> b=[9;8;8];

>> x=ZJsanjiao(A,b)

2.

①追赶法(文件ZG_SDJ.m)

function x=ZG_SDJ(a,b,c,f)

%aê????????a??

%bê???????é?·?μ??a??£???êy±èaéùò???%cê?????????·?μ??a??£???êy±èaéùò???%fê?3£êy??b

N=length(a);

b=[b,0];

c=[0,c];

a1=zeros(N,1);

b1=zeros(N,1);

y=zeros(N,1);

x=zeros(N,1);

a1(1)=a(1);

b1(1)=b(1)/a1(1);

y(1)=f(1)/a1(1);

for j1=2:N

a1(j1)=a(j1)-c(j1)*b1(j1-1);

b1(j1)=b(j1)/a1(j1);

temp1=f(j1)-c(j1)*y(j1-1);

y(j1)=temp1/a1(j1);

end

j1=N;

x(j1)=y(j1);

for j1=N-1:-1:1

x(j1)=y(j1)-b1(j1)*x(j1+1);

end

②控制台输入代码:

>> a=[2 2 2 2 2];

>> b=[-1 -1 -1 -1];

>> c=[-1 -1 -1 -1];

>> f=[1;0;0;0;0];

>> x=ZG_SDJ(a,b,c,f)

3.

①改进的平方根法(文件GJPFG.m)

function GJPFG(A,b)

n=length(b);% n?aáD??£?

% LDL'·??a£?

d(1)=A(1,1);

for i=2:n

for j=1:i-1

sum1=0;

for k=1:j-1

sum1=sum1+t(i,k)*l(j,k);

end

t(i,j)=A(i,j)-sum1;

l(i,j)=t(i,j)/d(j);

end

sum2=0;

for k=1:i-1

sum2=sum2+t(i,k)*l(i,k);

end

d(i)=A(i,i)-sum2;

end

for i=1:n

l(i,i)=1;

end

disp('μ¥????èy?????óL?a£o'); %?a3?μ¥????èy?????óL£?

l

disp('???????óD?a£o'); %?a3????????óD£?

d

%óéLDL'x=b?ó?ax£?

%óéLy=b£??óy£?

%óéL'x=inv£¨D£?y£??ó?ax£?

y(1)=b(1);

for i=2:n

sum3=0;

for k=1:i-1

sum3=sum3+l(i,k)*y(k);

end

y(i)=b(i)-sum3;

end

x(n)=y(n)/d(n);

for i=n-1:-1:1

sum4=0;

for k=i+1:n

sum4=sum4+l(k,i)*x(k);

end

x(i)=(y(i)/d(i))-sum4;

end

disp('óéLy=b?ó?ayμ?£o');

y

disp('Ax=bμ??ax?a£o');

x

②控制台输入代码:

>> A=[2 -1 1;-1 -2 3;1 3 1];

>> b=[4;5;6];

>> GJPFG(A,b)

4.

①SOR方法(文件SOR_1.m)

function SOR_1(A,b,x0,x_a,w)

%x_a?a??è·?a

if(w<=0 || w>=2)

error('2?êy·??§′í?ó');

return;

end

eps=5.0e-6;

D=diag(diag(A)); %?óAμ????????óL=-tril(A,-1); %?óAμ???èy???óU=-triu(A,1); %?óAμ?é?èy???óB=inv(D-L*w)*((1-w)*D+w*U);

f=w*inv((D-L*w))*b;

x=B*x0+f;

n=1; %μü′ú′?êy

while norm(x_a-x)>=eps

x0=x;

x =B*x0+f;

n=n+1;

if(n>=200)

disp('Warning: μü′ú′?êyì??à£??é?ü2?ê?á2£?');

return;

end

end

disp('Ax=bμ??a?a£o');

x

disp('μü′ú′?êy?a£o');

n

②控制台输入代码:

>> A=[4 -1 0;-1 4 -1;0 -1 4];

>> b=[1;4;-3];

>> x0=[0;0;0];

>> x_a=[0.5;1;-0.5];

>> w=1.03;

>> SOR_1(A,b,x0,x_a,w)

>> w=1;

>> SOR_1(A,b,x0,x_a,w)

>> w=1.1;

>> SOR_1(A,b,x0,x_a,w)

5.

①SOR方法(文件SOR_2.m)

function SOR_2(A,b,x0,w,eps)

if(w<=0 || w>=2)

error('2?êy·??§′í?ó');

return;

end

D=diag(diag(A)); %?óAμ????????ó

L=-tril(A,-1); %?óAμ???èy???ó

U=-triu(A,1); %?óAμ?é?èy???ó

B=inv(D-L*w)*((1-w)*D+w*U);

f=w*inv((D-L*w))*b;

x=B*x0+f;

n=1; %μü′ú′?êy

while norm(x-x0)>=eps

x0=x;

x =B*x0+f;

n=n+1;

if(n>=200)

disp('Warning: μü′ú′?êyì??à£??é?ü2?ê?á2£?');

return;

end

end

disp('Ax=bμ??a?a£o');

x

disp('μü′ú′?êy?a£o');

n

②控制台输入代码:

>> A=[5 2 1;-1 4 2;2 -3 10];

>> b=[-12;20;3];

>> x0=[0;0;0];

>> w=0.9;

>> eps=10e-4;

>> SOR_2(A,b,x0,w,eps)

6.此题为证明题,无程序代码。

7.

①雅克比迭代法(文件Jocabi.m)

function x=Jocabi(n)

A=hilb(n);

x_a=ones(n,1);

b=A*x_a;

eps=1e-4;

n=length(b);

N=50;

x=zeros(n,1);

y=zeros(n,1);

for k=1:N

sum=0;

for i=1:n

y(i)=(b(i)-A(i,1:n)*x(1:n)+A(i,i)*x(i))/A(i,i);

end

for i=1:n

sum=sum+(y(i)-x(i))^2;

end

if sqrt(sum)

break;

else

for i=1:n

x(i)=y(i);

end

end

end

② SOR方法(文件SOR_3.m)

function SOR_3(n,w)

%x_a?a??è·?a

if(w<=0 || w>=2)

error('2?êy·??§′í?ó');

return;

end

x0=zeros(n,1);

A=hilb(n);

x_a=ones(n,1);

b=A*x_a;

eps=1e-4;

D=diag(diag(A)); %?óAμ????????ó

L=-tril(A,-1); %?óAμ???èy???ó

U=-triu(A,1); %?óAμ?é?èy???ó

B=inv(D-L*w)*((1-w)*D+w*U);

f=w*inv((D-L*w))*b;

x=B*x0+f;

n=1; %μü′ú′?êy

while norm(x-x0)>=eps

x0=x;

x =B*x0+f;

n=n+1;

if(n>=2000)

disp('Warning: μü′ú′?êyì??à£??é?ü2?ê?á2£?');

return;

end

end

disp('Hx=bμ??a?a£o');

x

disp('μü′ú′?êy?a£o');

n

③控制台输入代码:

>> x=Jocabi(6)

>> x=Jocabi(8)

>> x=Jocabi(10)

>> SOR_3(6,1)

>> SOR_3(6,1.25)

>> SOR_3(6,1.5)

>> SOR_3(8,1)

>> SOR_3(8,1.25)

>> SOR_3(8,1.5)

>> SOR_3(10,1)

>> SOR_3(10,1.25) >> SOR_3(10,1.5)

五.实验结果比较与分析1.

2.

3.

4.

5.

9.证:

)()1()(k k x A I x ω-=++ωb ,(k=0,1,2…)

故迭代矩阵B=I-ωA ,其特征值μ=1-)(A ωλ. 由|μ|<1,|1-)(A ωλ|<1得 0<ω<

)

(2

A λ 故当0<ω<

β

2

时,更有0<ω<)(2A λ,从而有|μ|<1,)(B ρ<1,迭代格式收敛。

7.

①雅克比迭代法:

可以看到用雅克比迭代法求希尔伯特阵方程组的解是病态的,这是因为希尔伯特阵的谱半径大于1,并不收敛。

②SOR迭代法:

n=6 ,ω<104-时,

松弛因子ω迭代次数近似解

1 620 (1.0005 ,1.0045,0.9626,1.0441,1.0285,0.9583)

1.25 588 ( 0.9997,1.0134,0.9362,1.0706,1.0230,0.9555)

1.5 539 ( 0.9991,1.0211,0.9082,1.1146,0.9899,0.9656)

n=8 ,ω<104-时

松弛因子ω迭代次数近似解

1 426 (0.9970,1.0417,0.8967,1.0155,1.0654,1.0505,0.9991,

0.9309)

1.25 1157 (0.9971,1.0353,0.9174,1.0167,1.0408,1.0378,1.0022,

0.9508)

1.5 1701 (0.9980,1.0232,0.9484,1.0045,1.0260,1.0324,1.0037,

0.9623)

n=10 ,ω<104-时

松弛因子 迭代次数近似解

1 1216 (0.9977,1.0203,0.9797,0.9654,1.0010,1.0300,1.0367,1.0223,0.9924,0.9525)

1.25 1379 (0.9985,1.0103,1.0049,0.9503,1.0001,1.0257,1.0347,1.0221,0.9946,0.9570)

1.5 1520 (0.9993,1.0003,1.0354,0.9171,1.0187,1.0116,1.0405,1.0185,0.9982,0.9588)

六.学习心得

直接法可以求得线性方程组的精确解,但实际计算中会有误差,一般求得近

似解。适用于解低阶稠密矩阵方程组及某些大型稀疏矩阵方程组。

迭代法是逐步逼近求方程组的近似解,但存在收敛性及收敛速度问题,适用

于解大型稀疏矩阵方程组。

数值代数实验报告

1.谈谈你对该算法的理解:(简单谈一下你是如何理解该算法的?) 先对84阶矩阵进行LU分解,通过Gauss消元法 对下三角形方程组利用前代法解出y,在对上三角方程组 用回代法解出x…. 2.实验内容 function [ L,U ] = LUfac( A ) for k=1:n-1 A(k+1:n,k)=A(k+1:n,k)/A(k,k); A(k+1:n,k+1:n)=A(k+1:n,k+1:n)-A(k+1:n,k)*A(k,k+1:n); end L=tril(A,0); for i=1:n L(i,i)=1; end U=triu(A,0); End //进行LU分解 function [ b ] = TSL( L,b ) n=size(L,1); for j=1:n-1 b(j)=b(j)/L(j,j); b(j+1:n)=b(j+1:n)-b(j)*L(j+1:n,j); end b(n)=b(n)/L(n,n); end //利用前代法解出y function [ b ] = TSU( U,b ) n=size(U,1); for j=n:-1:2 b(j)=b(j)/U(j,j); b(1:j-1)=b(1:j-1)-b(j)*U(1:j-1,j); end b(1)=b(1)/U(1,1); end //利用回代法解出x

主函数程序 A=eye(84); A=6*A; for i=2:84 A(i,i-1)=8; A(i-1,i)=1; End //生成84阶的矩阵A b=ones(84,1); b=b*15; b(1)=7; b(84)=14; [L,U]=LUfac(A);//调用函数LUfac对矩阵A进行分解 y=TSL(L,b);//调用函数TSL求解y x=TSU(U,y); //调用函数TSU求解X 经过matlab…有 x’ ans = 1.0e+008 * Columns 1 through 7 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 Columns 8 through 14 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 Columns 15 through 21 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 Columns 22 through 28 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 Columns 29 through 35 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 Columns 36 through 42 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 Columns 43 through 49 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 Columns 50 through 56 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 Columns 57 through 63

东南大学数值分析上机题答案

数值分析上机题 第一章 17.(上机题)舍入误差与有效数 设∑=-= N j N j S 2 2 11 ,其精确值为)111-23(21+-N N 。 (1)编制按从大到小的顺序1 -1 ···1-311-21222N S N +++=,计算N S 的通用 程序; (2)编制按从小到大的顺序1 21 ···1)1(111 222-++--+ -=N N S N ,计算N S 的通用程序; (3)按两种顺序分别计算210S ,410S ,610S ,并指出有效位数(编制程序时用单精度); (4)通过本上机题,你明白了什么? 解: 程序: (1)从大到小的顺序计算1 -1 ···1-311-21222N S N +++= : function sn1=fromlarge(n) %从大到小计算sn1 format long ; sn1=single(0); for m=2:1:n sn1=sn1+1/(m^2-1); end end (2)从小到大计算1 21 ···1)1(111 2 22 -++--+-= N N S N function sn2=fromsmall(n) %从小到大计算sn2 format long ; sn2=single(0); for m=n:-1:2 sn2=sn2+1/(m^2-1); end end (3) 总的编程程序为: function p203()

clear all format long; n=input('please enter a number as the n:') sn=1/2*(3/2-1/n-1/(n+1));%精确值为sn fprintf('精确值为%f\n',sn); sn1=fromlarge(n); fprintf('从大到小计算的值为%f\n',sn1); sn2=fromsmall(n); fprintf('从小到大计算的值为%f\n',sn2); function sn1=fromlarge(n) %从大到小计算sn1 format long; sn1=single(0); for m=2:1:n sn1=sn1+1/(m^2-1); end end function sn2=fromsmall(n) %从小到大计算sn2 format long; sn2=single(0); for m=n:-1:2 sn2=sn2+1/(m^2-1); end end end 运行结果:

数据分析实验报告

数据分析实验报告 文稿归稿存档编号:[KKUY-KKIO69-OTM243-OLUI129-G00I-FDQS58-

第一次试验报告 习题1.3 1建立数据集,定义变量并输入数据并保存。 2数据的描述,包括求均值、方差、中位数等统计量。 分析—描述统计—频率,选择如下: 输出: 统计量 全国居民 农村居民 城镇居民 N 有效 22 22 22 缺失 均值 1116.82 747.86 2336.41 中值 727.50 530.50 1499.50 方差 1031026.918 399673.838 4536136.444 百分位数 25 304.25 239.75 596.25 50 727.50 530.50 1499.50 75 1893.50 1197.00 4136.75 3画直方图,茎叶图,QQ 图。(全国居民) 分析—描述统计—探索,选择如下: 输出: 全国居民 Stem-and-Leaf Plot Frequency Stem & Leaf 5.00 0 . 56788 数据分析实验报告 【最新资料,WORD 文档,可编辑修改】

2.00 1 . 03 1.00 1 . 7 1.00 2 . 3 3.00 2 . 689 1.00 3 . 1 Stem width: 1000 Each leaf: 1 case(s) 分析—描述统计—QQ图,选择如下: 输出: 习题1.1 4数据正态性的检验:K—S检验,W检验数据: 取显着性水平为0.05 分析—描述统计—探索,选择如下:(1)K—S检验

结果:p=0.735 大于0.05 接受原假设,即数据来自正太总体。 (2 )W 检验 结果:在Shapiro-Wilk 检验结果972.00 w ,p=0.174大于0.05 接受原假设,即数据来自正太总体。 习题1.5 5 多维正态数据的统计量 数据:

数值分析实验报告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 姓名:万轩 实验二插值法

数值代数上机实验报告

数值代数课程设计实验报告 姓名: 班级: 学号: 实验日期: 一、实验名称 代数的数值解法 二、实验环境 MATLAB7.0 实验一、平方根法与改进平方根法 一、实验要求: 用熟悉的计算机语言将不选主元和列主元Gasuss 消元法编写成通用的子程序,然后用编写的程序求解下列方程组 ?????????? ????????????=????????????????????????? ? ? ? ? ? ? ?? ?????? ???? ?--?1415151515768 168 168 168 1681612321 n n n n n x x x x x x 用所编的程序分别求解40、84、120阶方程组的解。 二、算法描述及实验步骤 GAuss 程序如下: (1)求A 的三角分解:LU A =; (2)求解b y =L 得y ; (3)求解y x =U 得x ; 列主元Gasuss 消元法程序如下: 1求A 的列主元分解:LU PA =; 2求解b y P L =得y ; 3求解y x =U 得x ;

三、调试过程及实验结果: %----------------方程系数---------------- >> A1=Sanduijiaozhen(8,6,1,40); >> A2=Sanduijiaozhen(8,6,1,84); >> A3=Sanduijiaozhen(8,6,1,120); >> b1(1)=7;b2(1)=7;b3(1)=7; >> for i=2:39 b1(i)=15; end >> b1(40)=14; >> for i=2:83 b2(i)=15; end >> b2(40)=14; >> for i=2:119 b1(i)=15; end >> b3(120)=14; %----------------方程解---------------- >> x11=GAuss(A1,b1') >> x12=GAuss Zhu(A1,b1') >> x21=GAuss(A2,b2') >> x22=GAuss Zhu(A3,b3') >> x31=GAuss(A3,b3') >> x32=GAuss Zhu(A3,b3') 运行结果:(n=40) GAuss消元法的解即为 x11 = 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 列主元GAuss消元法的解即为x12 =

数值分析MATLAB上机实验

数值分析实习报告 姓名:gestepoA 学号:201******* 班级:***班

序言 随着计算机技术的迅速发展,数值分析在工程技术领域中的应用越来越广泛,并且成为数学与计算机之间的桥梁。要解决工程问题,往往需要处理很多数学模型,不仅要研究各种数学问题的数值解法,同时也要分析所用的数值解法在理论上的合理性,如解法所产生的误差能否满足精度要求:解法是否稳定、是否收敛及熟练的速度等。而且还能减少大量的人工计算。 由于工程实际中所遇到的数学模型求解过程迭代次数很多,计算量很大,所以需要借助如MATLAB,C++,VB,JAVA的辅助软件来解决,得到一个满足误差限的解。本文所计算题目,均采用MATLAB进行编程,MATLAB被称为第四代计算机语言,利用其丰富的函数资源,使编程人员从繁琐的程序代码中解放出来MATLAB最突出的特点就是简洁,它用更直观的、符合人们思维习惯的代码。它具有以下优点: 1友好的工作平台和编程环境。MATLAB界面精致,人机交互性强,操作简单。 2简单易用的程序语言。MATLAB是一个高级的矩阵/阵列语言,包含控制语言、函数、数据结构,具有输入、输出和面向对象编程特点。用户可以在命令窗口中将输入语句与执行命令同步,也可以先编好一个较大的复杂的应用程序(M 文件)后再一起运行。 3强大的科学计算机数据处理能力。包含大量计算算法的集合,拥有600多个工程中要用到的数学运算函数。 4出色的图像处理功能,可以方便地输出二维图像,便于我们绘制函数图像。

目录 1 第一题 (4) 1.1 实验目的 (4) 1.2 实验原理和方法 (4) 1.3 实验结果 (5) 1.3.1 最佳平方逼近法 (5) 1.3.2 拉格朗日插值法 (7) 1.3.3 对比 (8) 2 第二题 (9) 2.1实验目的 (9) 2.2 实验原理和方法 (10) 2.3 实验结果 (10) 2.3.1 第一问 (10) 2.3.2 第二问 (11) 2.3.3 第三问 (11) 3 第三题 (12) 3.1实验目的 (12) 3.2 实验原理和方法 (12) 3.3 实验结果 (12) 4 MATLAB程序 (14)

数据库上机实验报告

数据库实验 (第三次) 题目1 实验内容: 1. 检索上海产的零件的工程名称; 2. 检索供应工程J1零件P1的供应商号SNO; 3. 检索供应工程J1零件为红色的供应商号SNO; 4. 检索没有使用天津生产的红色零件的工程号JNO; 5. 检索至少用了供应商S1所供应的全部零件的工程号JNO; 6. 检索购买了零件P1的工程项目号JNO及数量QTY,并要求对查询的结果按数 量QTY降序排列。

1 select jname from j where jno in (select jno from spj where sno in (select sno from s where city ='上海' ) ); 2 select sno from spj where jno ='j1'and pno ='p1' 3

selectdistinct sno from spj where pno in (select pno from p where color='红'and pno in (select pno from spj where jno ='j1' ) ); 4 selectdistinct jno from spj where pno notin (select pno from p where color ='红'and pno in (select pno from spj where sno in (select sno from s where city ='天津' ) ) )

5 select jno from spj where sno ='s1' 6 select jno,qty from spj where pno ='p1' orderby qty desc 四﹑思考题 1.如何提高数据查询和连接速度。 建立视图 2. 试比较连接查询和嵌套查询 有些嵌套查询是可以用连接来代替的,而且使用连接的方式,性能要比 嵌套查询高出很多 当查询涉及多个关系时,用嵌套查询逐步求解结构层次清楚,易于构造,具有结构化程序设计的优点。但是相比于连接运算,目前商用关系数据库管理系统对嵌套查询的优化做的还不够完善,所以在实际应用中,能够用连接运算表达的查询尽可能采用连接运算。

数值分析实验报告

数值分析实验报告 姓名:周茹 学号: 912113850115 专业:数学与应用数学 指导老师:李建良

线性方程组的数值实验 一、课题名字:求解双对角线性方程组 二、问题描述 考虑一种特殊的对角线元素不为零的双对角线性方程组(以n=7为例) ?????????? ?????? ? ???? ?d a d a d a d a d a d a d 766 55 44 3 32 211??????????????????????x x x x x x x 7654321=?????????? ? ???????????b b b b b b b 7654321 写出一般的n (奇数)阶方程组程序(不要用消元法,因为不用它可以十分方便的解出这个方程组) 。 三、摘要 本文提出解三对角矩阵的一种十分简便的方法——追赶法,该算法适用于任意三对角方程组的求解。 四、引言 对于一般给定的d Ax =,我们可以用高斯消去法求解。但是高斯消去法过程复杂繁琐。对于特殊的三对角矩阵,如果A 是不可约的弱对角占优矩阵,可以将A 分解为UL ,再运用追赶法求解。

五、计算公式(数学模型) 对于形如????? ?? ????? ??? ?---b a c b a c b a c b n n n n n 111 2 2 2 11... ... ...的三对角矩阵UL A =,容易验证U 、L 具有如下形式: ??????? ????? ??? ?=u a u a u a u n n U ...... 3 3 22 1 , ?? ????? ? ?? ??????=1 (1) 1132 1l l l L 比较UL A =两边元素,可以得到 ? ?? ??-== = l a b u u c l b u i i i i i i 111 i=2, 3, ... ,n 考虑三对角线系数矩阵的线性方程组 f Ax = 这里()T n x x x x ... 2 1 = ,()T n f f f f ... 2 1 = 令y Lx =,则有 f Uy = 于是有 ()?????-== --u y a f y u f y i i i i i 1 1 11 1 * i=2, 3, ... ,n 再根据y Lx =可得到

数学实验1

中国海洋大学本科生课程大纲 课程属性:公共基础/通识教育/学科基础/专业知识/工作技能,课程性质:必修、选修 一、课程介绍 1.课程描述: 数学实验是由于计算机技术和科学计算软件的迅猛发展应运而生的一门较新的数学课程,它改变了数学只靠纸和笔的传统形象,将实验的手段引入到数学的学习和研究中。 本课程为大学二年级数学院的学生开设。它不是讲授新的数学知识,而是让学生利用已有的数学知识去解决一些经简化的实际问题。大多数实验的一般过程是:对于给出的实际问题,建立数学模型、选择适当的数学方法、用科学计算软件MATLAB编程计算、对运算结果进行分析、给出结论。 本课程以MATLAB软件为主要的实验工具,采用以学生动手动脑为主,教师讲授和点评、小组讨论、报告为辅的教学方式。 通过本课程的学习,学生用数学解决实际问题的意识和能力可以得到强化和提高,更切实地体会到数学的用处,增加学习兴趣,提高创造力。 2.设计思路: 本课程旨在训练用数学解决实际问题的能力。实验内容的选取是基于学生具备MATLAB语言的初步编程能力、并学习了数学分析、高等代数、解析几何、运筹学基础(初步)、数学实验基础、常微分方程、数值分析或计算方法、概率论等数学课程的基础之上。课程共分七个基础实验和一个综合实验依次进行。七个基础实验是:MATLAB 基础知识复习、常微分方程(组)、数据建模——插值与拟合、古典密码学、图与网络 - 6 -

优化、动态规划、遗传算法。 基础实验涉及的数学内容较为单一、数学模型和求解方法较简单,是对“用数学”能力的基本训练。 综合实验以三人为一组进行,所涉及到的数学知识范围更广,建模和求解的难度更大。综合实验的题目可以小组自拟或在任课教师拟定的题目中选择。任课教师拟定的题目将于综合实验开始前一周给出。各小组在实验前要上交一份“开题报告”:写出问题的重述、模型建立和求解的思路、可能遇到的主要困难及解决方案。通过认真完成综合实验,“用数学”的能力可以有一个较大的提升。 3.课程与其他课程的关系: 先修课程:高等代数I、高等代数II、空间解析几何、数学分析I、数学分析II、数学实验基础;常微分方程;计算方法(或数值分析、数值代数); 并行课程:概率论等; 后置课程:数学模型;数学建模实践 二、课程目标 本课程的目标是为大二数学类专业学生提供用数学知识解决实际问题的系统训练。 到课程结束时,学生应能: (1)对简单的实际问题建立数学模型; (2)采用适当的数学方法,用MA TLAB软件求解模型,并根据计算结果对模型进行评价和改进; (3)具备初步的科研写作能力:学会如何将问题、模型、解决思路、求解方法、计算结果和结论简洁、清晰、严谨地呈现; (4)针对难度较高的实际问题通过小组成员的独立思考、相互合作与激励,共同解决。提高沟通交流能力,促进相互学习,加深对有关数学知识的理解,进一步提升用数学知识和MATLAB软件解决实际问题的能力。 三、学习要求 要完成所有的课程任务,学生必须: (1)按时上课,认真听讲,积极参与课堂讨论、随堂练习和测试; - 6 -

数值分析上机实验报告

数值分析上机实验报告

《数值分析》上机实验报告 1.用Newton 法求方程 X 7-X 4+14=0 在(0.1,1.9)中的近似根(初始近似值取为区间端点,迭代6次或误差小于0.00001)。 1.1 理论依据: 设函数在有限区间[a ,b]上二阶导数存在,且满足条件 {}α?上的惟一解在区间平方收敛于方程所生的迭代序列 迭代过程由则对任意初始近似值达到的一个中使是其中上不变号 在区间],[0)(3,2,1,0,) (') ()(],,[x |))(),((|,|,)(||)(|.4;0)(.3],[)(.20 )()(.110......b a x f x k x f x f x x x Newton b a b f a f mir b a c x f a b c f x f b a x f b f x f k k k k k k ==- ==∈≤-≠>+ 令 )9.1()9.1(0)8(4233642)(0)16(71127)(0)9.1(,0)1.0(,1428)(3 2 2 5 333647>?''<-=-=''<-=-='<>+-=f f x x x x x f x x x x x f f f x x x f 故以1.9为起点 ?? ?? ? ='- =+9.1)()(01x x f x f x x k k k k 如此一次一次的迭代,逼近x 的真实根。当前后两个的差<=ε时,就认为求出了近似的根。本程序用Newton 法求代数方程(最高次数不大于10)在(a,b )区间的根。

1.2 C语言程序原代码: #include #include main() {double x2,f,f1; double x1=1.9; //取初值为1.9 do {x2=x1; f=pow(x2,7)-28*pow(x2,4)+14; f1=7*pow(x2,6)-4*28*pow(x2,3); x1=x2-f/f1;} while(fabs(x1-x2)>=0.00001||x1<0.1); //限制循环次数printf("计算结果:x=%f\n",x1);} 1.3 运行结果: 1.4 MATLAB上机程序 function y=Newton(f,df,x0,eps,M) d=0; for k=1:M if feval(df,x0)==0 d=2;break else x1=x0-feval(f,x0)/feval(df,x0); end e=abs(x1-x0); x0=x1; if e<=eps&&abs(feval(f,x1))<=eps d=1;break end end

C上机实验报告实验四

实验四数组、指针与字符串 1.实验目的 1.学习使用数组 2.学习字符串数据的组织和处理 3.学习标准C++库的使用 4.掌握指针的使用方法 5.练习通过Debug观察指针的内容及其所指的对象的内容 6.联系通过动态内存分配实现动态数组,并体会指针在其中的作用 7.分别使用字符数组和标准C++库练习处理字符串的方法 2.实验要求 1.编写并测试3*3矩阵转置函数,使用数组保存3*3矩阵。 2.使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能。 3.编程实现两字符串的连接。要求使用字符数组保存字符串,不要使用系统函数。 4.使用string类定义字符串对象,重新实现上一小题。 5.定义一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。Display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性。实现并测试这个类。 6.定义包含5个元素的对象数组,每个元素都是Employee类型的对象。 7. (选做)修改实验4中的选做实验中的people(人员)类。具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号char id[16]。其中“出生日期”定义为一个“日期”类内嵌对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。在测试程序中定义people类的对象数组,录入数据并显示。 3.实验内容及实验步骤 1.编写矩阵转置函数,输入参数为3*3整形数组,使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入、输出。程序名:lab6_1.cpp。 2.改写矩阵转置函数,参数为整型指针,使用指针对数组元素进行操作,在main()函数中使用new操作符分配内存生成动态数组。通过Debug观察指针的内容及其所指的对象中的内容。程序名:lab6_2.cpp。 3.编程实现两字符串的连接。定义字符数组保存字符串,在程序中提示用户输入两个字符串,实现两个字符串的连接,最后用cout语句显示输出。程序名:lab6_3.cpp。用cin实现输入,注意,字符串的结束标志是ASCII码0,使用循环语句进行字符串间的字符拷贝。 4.使用string类定义字符串对象,编程实现两字符串的连接。在string类中已重载了运算符“+=”实现字符串的连接,可以使用这个功能。程序名:lab6_4.cpp。 5.在employee.h文件中定义Employee类。Employee类具有姓名、街道地址、城市和邮编等私有数据成员,在成员函数中,构造函数用来初始化所有数据成员;display()中使用cout显示

数值计算实验报告

(此文档为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);

偏微分方程数值解课程的思索

科技信息 SCIENCE &TECHNOLOGY INFORMATION 2012年第9期偏微分方程(PDE )是众多描述物理,化学和生物现象的数学模型的基础,其最新应用已经扩展到经济,金融预测,图像处理等很多领域。要通过PDE 模型研究这些问题,就需要求解PDE 方程,但是绝大多数微分方程特别是偏微分方程,很难得到其解析形式的解。我们希望能够借助于计算机采用数值方法求得偏微分方程的近似解,这就是《偏微分方程数值解》课程的主要内容。 《偏微分方程数值解》是信息与计算科学专业的一门专业课,它与《数值代数》,《数值逼近》一起构成信息与计算科学专业信息与计算方向的核心课程,在专业培养中占有非常重要的地位。随着计算机技术的飞速发展,偏微分方程数值解得到了前所未有的发展和应用,与此同时也暴露了《偏微分方程数值解》课程传统教学中的很多不足之处,这使得该门课程在教学上有很多地方需要调整。 笔者长年教授《偏微分方程数值解》课程,在该门课程的教学改革方面做了一些思索和尝试,主要包括改革教学方法,更新教学模式,加强介绍背景知识,融入数学建模思想,教学与科研相结合,教学与计算软件相结合,增设实验课,改革考核方式等。 1改革教学方法,更新教学模式 由于数学课程大多理论性较强,趣味性较弱,为了激发学生学习兴趣,在教学过程中,我们采用启发式、讨论式等多种教学方法,营造良好的课堂气氛,加强师生之间的交流,引导学生独立思考,强化科学思维的训练。在教学内容方面,不光教授公式推导,定理证明,同时注重算法思想的讲解和程序设计的讲解,同时安排一定课时的习题课,讲解典型习题和对每章进行总结。 由于《偏微分方程数值解》涉及较多的概念、公式和定理,大多数老师仍以传统的课堂教学为主,而少数年轻教师则喜欢用多媒体课件教学。传统的教学方法,虽然受到的批评最多,但也是用得最多,最能让大家普遍接受的一种方法,在算法推导、理论分析等方面,采用传统的板书讲解能更好地引导学生去感受和思考数学逻辑的过程以及创造性的思维过程,加深对数学理论的理解和认识,培养学生的逻辑和思维能力。而在讲述背景知识,算法的应用,算法的程序实现时候最好用多媒体课件进行演示。多媒体课件可以让学生更直观,更全面的理解算法的应用,另外使用多媒体课件还可以节省大段公式的板书时间,图示清楚、准确。但是如果全部使用多媒体课件上课,容易加快教学速度,淡化数学公式的推导以及定理的证明过程,不利于培养学生的数学思维能力。所以,我们认为需要将传统的教学方法和现代的教学手段结合起来,充分发挥各自的优势,在传统教学中穿插多媒体课件,根据教学内容选择合适的教学手段。 2加强知识背景的介绍,融入数学建模思想 《偏微分方程数值解》是理论知识与实际应用之间的桥梁,为学生使用计算机解决科学与工程中的实际问题打下良好的理论基础和应用基础。传统教学以分析,证明,推导为主,重理论,轻应用,缺少偏微分方程产生的实际背景的介绍和应用数值解的方法解决实际问题的实例。因此,我们在教授该课程的时候,注重与数学建模思想相结合,从实际问题出发,建立相应的偏微分方程模型,这样,学生就知道为什么要研究偏微分方程,偏微分方程能解决什么样的实际问题。 例如,我们考虑有衰减的扩散问题:有一个扩散源,某物质从此扩散源向四周扩散,沿x,y,z 三个方向的扩散系数分别为常数,衰减使质量的减少与浓度成正比,扩散前周围空间此物质的浓度为0,估计物质的分布。我们引导学生运用所学过的微积分的思想以及相应的物理知识,对这一问题进行建模,可以得到如下的模型: 鄣u =a 2鄣2 u 鄣x +b 2鄣2 u 鄣y +c 2鄣2 u 鄣z -k 2u 上述方程是常系数线性抛物型方程,它就是有衰减的扩散过程的数学模型。有了这样的铺垫,学生知道了扩散问题的数学模型就是抛物型方程,当然类似的环境污染,疾病流行等与扩散有关的实际问题可以用抛物型方程来描述,很自然的,接下来的问题就是如何求解上面的抛物型方程,学生的学习热情自然就提高了。 3教学与科研相结合 随着计算技术和计算机科学的发展,偏微分方程数值解法的内涵也在不断扩大,我们在讲授《偏微分方程数值解》课程中引进近年来最新的理论和最新的方法,这样可以开阔学生的视野,激发学生的学习情趣,锻炼学生的自学能力。例如我们除了介绍有限差分法,有限元法,有限体积法等经典的具有一般性的方法,还介绍了多重网格法。由于近些年来,人们将辛方法应用于哈密顿常微分方程系统以及推广应用于微分方程的兴趣日益增长,我们也简单介绍了这一主题,并且用这个思想去分析逼近波动方程的交错蛙跳格式。在讲授方法的同时,还注意介绍这些方法的发展历史,设计思想和理论依据,并给出了相当丰富的参考文献,让基础好的同学自己去挖掘感兴趣的问题。承担课题的老师,可以把自己课题中与此课程相关的小问题拿出来供有兴趣的同学琢磨,有助于锻炼学生的科研能力。 4教学与计算软件相结合 由Mathworks 公司推出的MATLAB 软件,现在已经发展成功能强大,适合科学和工程计算的软件,使用MATLAB 编程,语言简洁,数据处理方便,具有强大的数值计算功能和图形展示功能,因此,将MATLAB 融入偏微分方程数值解的教学,更能与时俱进,更有效地提高教学质量。 MATLAB 采用有限元的方法求解各种PDE ,它提供了两种方法解决PDE 问题,一是pdepe 函数,它可以求解一般的PDEs ,具有较大的通用性,但只支持命令行形式的调用。二是PDE 工具箱,可以求解特殊PDE 问题,但有较大的局限性。只能求解二阶PDE 问题,不能求解偏微分方程组。PDE 工具箱支持命令行形式求解,但需要记住大量命令及其调用格式。不过好在它提供了GUI 界面,可以把我们从复杂的编程中解脱出来,还有很好的动画演示功能,尤其适合刚入门的学生。 我们在授课过程中精选与生活,生产密切相关的应用实例,鼓励学生自己动手建立模型,应用数学软件和所学的知识求解模型。例如考虑一个带有矩形孔的金属板上的热传导问题。板的左边保持在100℃,板的右边热量从板向环境空气定常流动,其他边及内孔边界保持绝缘。初始t=t 0时板的温度为0。对于这样的一个实际问题,我们先应用所学的数学分析和数学建模知识,对原问题建立如下偏微分方程模型: 鄣u 鄣t -△u =0,u =100, 鄣u =-1,鄣u =0,u|t=t 0 =0△△△△△△△△△△△△△△ △. 不妨设界顶点坐标为(-0.5,-0.8),(0.5,-0.8),(0.5,0.8),(-0.5,0.8)。内边界顶点坐标为(-0.005,-0.4),(0.05,-0.4),(0.05,0.4),(-0.05,0.4)。对于这样的一个抛物型方程,我们设计其数值计算方法,然后分别用 偏微分方程数值解课程的思索 邹永魁 (吉林大学数学与科学学院吉林 长春 130012) 【摘要】探讨《偏微分方程数值解》课程教学改革的思考与体会,主要包括教学方法和教学模式的改革,加强背景知识的介绍,将科研前沿带入课堂,将MATLAB 融入教学以及考核方式的改革等。 【关键词】偏微分方程数值解;教学改革;MATLAB ;综合评价体系○高校讲坛○200

贵州大学数值分析上机实验

数值分析上机实验报告 课程名称:数值分析上机实验 学院:机械工程学院专业:机械制造 姓名:张法光学号:2012021691 年级:12级任课教师:代新敏老师 2012年12月30日

一.已知A 与b 12.38412 2.115237 -1.061074 1.112336 -0.1135840.718719 1.742382 3.067813 -2.031743 2.11523719.141823 -3.125432 -1.012345 2.189736 1.563849 -0.784165 1.112348 3.123124 -1.061074 -3.125A =43215.567914 3.123848 2.031454 1.836742-1.056781 0.336993 -1.010103 1.112336 -1.012345 3.12384827.108437 4.101011-3.741856 2.101023 -0.71828 -0.037585 -0.113584 2.189736 2.031454 4.10101119.8979180.431637- 3.111223 2.121314 1.784317 0.718719 1.563849 1.836742 -3.741856 0.4316379.789365-0.103458 -1.103456 0.238417 1.742382 -0.784165 -1.056781 2.101023-3.111223-0.1034581 4.7138465 3.123789 -2.213474 3.067813 1.112348 0.336993-0.71828 2.121314-1.103456 3.12378930.719334 4.446782 -2.031743 3.123124 -1.010103-0.037585 1.7843170.238417-2.213474 4.44678240.00001[ 2.1874369 33.992318 -2 5.173417 0.84671695 1.784317 -8 6.612343 1.1101230 4.719345 -5.6784392]T B ????? ? ?? ? ? ???? ? ? ???? ? ? ????? ?=(2)用超松弛法求解Bx=b (取松弛因子ω=1.4,x (0)=0,迭代9次)。 (3)用列主元素消去法求解 Bx=b 。 解:(3)、用列主元素消去法求解Bx=b (一)、理论依据: 其基本思想是选取绝对值尽量大的元素作为主元素,进行行与列的交换,再进行回代,求出方程的解。 将方阵A 和向量b 写成C=(A b )。将C 的第1列中第1行的元素与其下面的此列的元素逐一进行比较,找到最大的元素1j c ,将第j 行的元素与第1行的元素进行交换,然后通过行变换,将第1列中第2到第n 个元素都消成0。将变换后的矩阵(1)C 的第二列中第二行的元 素与其下面的此列的元素逐一进行比较,找到最大的元素(1) 2k c ,将第k 行的元素与第2行的 元素进行交换,然后通过行变换,将第2列中第3到第n 个元素都消成0。以此方法将矩阵的左下部分全都消成0。 (二)、计算程序: #include "math.h" #include "stdio.h" void main() { double u[9],x1[9],y[9],q[9],b1[9][10],x[9],a[9][9]={ {12.38412,2.115237,-1.061074,1.112336,-0.113584,0.718719,1.742382,3.067813,-2.031743 },

数值分析实验报告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 的帮助。

相关文档