《矩阵与数值分析》
上机实验作业。
学院(系。专业。
姓名。学号。
任课老师:金光日。
上课班级: 4班。
完成日期:2013-12-19
一、1 从小到大计算的程序:
function si=sl(n)
format long
j=2;si=0;
while (j si=si+10e6/(j^2-1);
j=j+1;
endn时的输出结果。
有输出结果可以看出,输出的有效数字的个数是16位。
从大到小的程序。
n时的输出结果。
结果对比:由表可知:从小到大计算时数值比较稳定,由大到小计算时出现大数吃小数的现象。
二、1)jacobi迭代程序。
clcclear
n=10;b=randperm((n-1)^2)';
t01=zeros(n-1);
to2=zeros(n-2);
a1=diag(ones(n-1));
a2=diag(ones(n-2));
t1=diag(a2,1);
t2=diag(2*a1);
t3=diag(a2,-1);
t=t1+t2+t3;
i=eye(n-1);
a=cell((n-1));
for i=1:(n-1)
for j=1:(n-1)
a=zeros(n-1);
endend
for i=1:(n-1)
a=(t+2*i);
endfor i=2:(n-1)
a=(-i);
a=(-i);enda;
a=cell2mat(a);
d=diag(diag(a));
l=d-tril(a);
u=d-triu(a);
bj=inv(d)*(l+u);
f=inv(d)*b;
xo=zeros((n-1)^2,1);
x=bj*xo+f;
m=1;while norm((x-xo),2)>=1e-10
xo=x;x=bj*xo+f;
m=m+1;endm
n时的迭代结果:
2)g-s迭代程序:
clcclear
n=10;b=randperm((n-1)^2)';
t01=zeros(n-1);
to2=zeros(n-2);
a1=diag(ones(n-1));
a2=diag(ones(n-2));
t1=diag(a2,1);
t2=diag(2*a1);
t3=diag(a2,-1);
t=t1+t2+t3;
i=eye(n-1);
a=cell((n-1));
for i=1:(n-1)
for j=1:(n-1)
a=zeros(n-1);
endend
for i=1:(n-1)
a=(t+2*i);
endfor i=2:(n-1)
a=(-i);
a=(-i);enda;
a=cell2mat(a);
d=diag(diag(a));
l=d-tril(a);
u=d-triu(a);
dl=inv(d-l);
bg=dl*u;
f=dl*b;
xo=zeros((n-1)^2,1);
x=bg*xo+f;
m=1;while norm((x-xo),2)>=10^(-10)
xo=x;x=bg*xo+f;
m=m+1;endm
n的迭代结果:
迭代次数对比:
由以上结果可以看出g-s迭代法比jacobi迭代法的收敛速度快,大概是jacobi迭代速度的两倍。
2. gauss列主元消去程序:
function d=zy(d,m,n)
for i=n:3
for j=i+1:4
if abs(d(i,m))temp=d(i,:)
d(i,:)d(j,:)
d(j,:)temp;
endend
endfunction d=xq(d,j,n,m)
for i=n:3
d(i+1,:)d(i+1,:)d(i+1,m)/d(j,j))*d(n,:)
endfunction [v]=gsxq(a,b)
d=[a,b];
d=zy(d,1,1);
d=xq(d,1,1,1);
d=zy(d,2,2);
d=xq(d,2,2,2);
d=zy(d,3,3);
d=xq(d,3,3,3);
x4=d(4,5)/d(4,4);
x3=(d(3,5)-d(3,4)*x4)/d(3,3);
x2=(d(2,5)-d(2,3)*x3-d(2,4)*x4)/d(2,2);
x1=(d(1,5)-d(1,2)*x2-d(1,3)*x3-d(1,4)*x4)/d(1,1);
v=[x1;x2;x3;x4];
end输出结果:
qr分解程序:
function x=qrf(a,b)
h=a;q=zeros(max(size(a)),max(size(a)*(max(size(a)-1)))
g=max(size(a));
for i=1:max(size(a))-1
z=eye(size(a));
w=a(:,1)-norm(a(:,1))*z(:,1);
q(1:max(size(a)),1+(i-1)*g:(i-1)*g+max(size(a)))z-(2/(w'*w))*w*w';
a=q(1:max(size(a)),1+(i-1)*g:(i-1)*g+max(size(a)))a;
a=a(2:max(size(a)),2:max(size(a)))
endfor i=1:g-2
q(1:g,1:g)=[eye(i,i),zeros(i,g-i);zeros(g-i,i),q(1:g-i,i*g+1:i*g+g-i)]*q(1:g,1:g);
endd=q(1:g,1:g)*[h,b];
x=zeros(1,g);
a1=d(:,1:g);
a2=d(:,g+1);
x(g)=a2(g)/a1(g,g);
for k = g-1:-1:1
x(k)=a2(k);
for p=g:-1:k+1
x(k) =x(k)-a1(k,p)*x(p);
endx(k)=x(k)/a1(k,k);
end输出结果:
由结果可知:用gauss列主元消去法、qr方法求解方程组得到解是基本相同的。在实际应用中,gauss列主元消去法用于求解良态方程组、qr分解方法则用于“病态”方程组的求解。
三、1.newton迭代法程序:
syms x
f=exp(x)+2*x^2+2*sin(x)-log(x)-16;
a=1; k=1;
while 1
y=subs(x-f/diff(f),x,a);
z=a;a=y;
if abs(y-z)<1e-10
break;
endk=k+1;endk
aexp(a)+2*a^2+2*sin(a)-log(a)-16
输出结果:2. newton迭代法程序:
function new(x1)
eps=1e-10;
syms x
f=x^4-3*x^3-3*x^2+11*x-6;
df1=diff(f);
df2=diff(df1);
df3=diff(df2);
df4=diff(df3);
k=0;m=1;
while 1
x2=subs(x-f/diff(f),x,x1);
if abs(x2-x1) break;
endk=k+1;
x1=x2;
enddisp('x是方程的根,x=')
disp(x2)
while 1
ff=subs(df1,x2);
if ff<0.001
m=1;else
breakend
ff=subs(df2,x2);
if ff<0.01
m=2;else
breakend
ff=subs(df3,x2);
if ff<0.01
m=3;else
breakend
ff=subs(df4,x2);
if ff<0.01
m=4;else
breakend
enddisp('m是重根,m=')
disp(m)
end输出结果:
由以上结果可知:该方程有四个根分别为:-2,3,1,1
四、function i = igauss(f,a,b,n,ak,xk)
if(n<5 &&nargin ==4)
ak = 0;
xk = 0;
elsexk1=((b-a)/2)*xk+((a+b)/2);
i=((b-a)/2)*sum(ak.*subs(sym(f),findsym(f),xk1));
endta = b-a)/2;
tb = a+b)/2;
switch n
case 0 i=2*ta*subs(sym(f),findsym(sym(f)),tb);
矩阵上机作业
矩阵与数值分析 课程数值实验报告。1.方程在x 3.0附近有根,试写出其三种不同的等价形式以构成两种不同的迭代格式,再用这两种迭代求根,并绘制误差下降曲线,观察这两种迭代是否收敛及收敛的快慢。newton迭代法。function x juz1 x1,tol,max xo x1 t i 1 while...
矩阵实习作业
矩阵与数值分析大作业。课程名称 矩阵与数值分析 任课教师 xxx 副教授 姓名xxx学号xxxx 班级 xxxxx 学院 电信与电气工程学部 交作业时间 2011年 12月21日。2011级工科硕士研究生。矩阵与数值分析 课程数值实验题目。一 对于数列,有如下两种生成方式给出利用上述两种递推公式生成...
矩阵论测验作业
一 是非题 请在正确命题前的括号内打 否则打 1.设是的实矩阵,为维向量,则 2.设阶方阵满足,则的特征值只能是1 3.欧氏空间上的任意两种向量范数都是等价的 4.设为矩阵,为阶可逆方阵,则。二 填空题。设。则且与都正交的所有向量为。三 设阶方阵满足。试证明 四 给定的两个基。和。若定义线性变换为 ...