第一次&第二次上机作业。
上机作业:1.在matlab上执行:>>5.1-5-0.1和》 1.5-1-0.5
给出执行结果,并简要分析一下产生现象的原因。
解:执行结果如下:
在matlab中,小数值很难用二进制进行描述。由于计算精度的影响,相近两数相减会出现误差。
2.(课本181页第一题)
解:(1)n=0时,积分得=ln6-ln5,编写如下图**。
从以上**显示的结果可以看出,的近似值为0.012712966517465
2)=dx,可得dxdxdx,得,则有,取,以此逆序估算。**段及结果如下图所示。
结果是从逆序输出至,所以得到的近似值为0.088392216030227。
3)从估计的过程更为可靠。首先根据积分得表达式是可知,被积函数随着n的增大,其所围面积应当是逐步减小的,即积分值应是随着n的递增二单调减小的,(1)中输出的值不满足这一条件,(2)满足。设表示的近似值, -根据递推公式可以导出此式),可以看出,随着n的增大,误差也在增大,所以顺序估计时,算法不稳定性逐渐增大,逆序估计情况则刚好相反,误差不断减小,算法逐渐趋于稳定。
2.(课本181页第二题)
1)上机**如图所示。
求得近似根为0.09058
2)上机**如图所示。
得近似根为0.09064;
3)牛顿法上机**如下。
计算所得近似解为0.09091
第三次上机作业。
上机作业181页第四题。
线性方程组为。
1) 顺序消元法。
a=[1.1348,3.8326,1.
1651,3.4017;0.5301,1.
7875,2.5330,1.5435;3.
4129,4.9317,8.7643,1.
3142;1.2371,4.9998,10.
6721,0.0147];
b=[9.5342;6.3941;18.4231;16.9237];
上机**(函数部分)如下。
function [b] =gaus( a,b )%用b返回方程组的解。
b=[a,b];
n=length(b);
ra=rank(a);
rb=rank(b);
dif=rb-ra;
if dif>0
disp('此方程组无解');
return
endif ra==rb
if ra==n
format long;
disp('此方程组有唯一解');
for p=1:n-1
for k=p+1:n
m=b(k,p)/b(p,p);
b(k,p:n+1)=b(k,p:n+1)-m*b(p,p:n+1);
endend %顺序消元形成上三角矩阵。
b=b(1:n,n+1);
a=b(1:n,1:n);
b(n)=b(n)/a(n,n);
for q=n-1:-1:1
b(q)=(b(q)-sum(a(q,q+1:n)*b(q+1:n)))a(q,q);
end %回代求解。
elsedisp('此方程组有无数组解');
endend
上机运行结果为。
> a=[1.1348,3.8326,1.
1651,3.4017;0.5301,1.
7875,2.5330,1.5435;3.
4129,4.9317,8.7643,1.
3142;1.2371,4.9998,10.
6721,0.0147];
b=[9.5342;6.3941;18.4231;16.9237];
> x=gaus(a,b)
此方程组有唯一解。x =
2) 列主元消元法。
a=[1.1348,3.8326,1.
1651,3.4017;0.5301,1.
7875,2.5330,1.5435;3.
4129,4.9317,8.7643,1.
3142;1.2371,4.9998,10.
6721,0.0147];
b=[9.5342;6.3941;18.4231;16.9237];
函数部分**如下。
function [b] =liezhu(a,b )%用b返回方程组的解。
b=[a,b];
ra=rank(a);
rb=rank(b);
n=length(b);
dif=rb-ra;
format long;
if dif>0
disp('该方程组无解');
return
endif dif==0
if ra==n
disp('该方程组有唯一解');
c=zeros(1,n);
for i=1:n-1
max=abs(a(i,i));
m=i;for j=i+1:n
if maxmax=abs(a(j,i));
m=j;end
end %求出每一次消元时绝对值最大的一行的行号。
if m~=i
for k=i:n
c(k)=a(i,k);
a(i,k)=a(m,k);
a(m,k)=c(k);
endd1=b(i);
b(i)=b(m);
b(m)=d1;%函数值跟随方程一起换位置。
end for k=i+1:n
for j=i+1:n
a(k,j)=a(k,j)-a(i,j)*a(k,i)/a(i,i);
endb(k)=b(k)-b(i)*a(k,i)/a(i,i);
a(k,i)=0;
endend %完成消元操作,形成上三角矩阵。
b(n)=b(n)/a(n,n);
for i=n-1:-1:1
sum=0;
for j=i+1:n
sum=sum+a(i,j)*b(j);
endb(i)=(b(i)-sum)/a(i,i) ;回代求解其他未知数。
endend
elsedisp('此方程组有无数组解');
endend上机运行,结果为。
> a=[1.1348,3.8326,1.
1651,3.4017;0.5301,1.
7875,2.5330,1.5435;3.
4129,4.9317,8.7643,1.
3142;1.2371,4.9998,10.
6721,0.0147];
b=[9.5342;6.3941;18.4231;16.9237];
x=liezhu(a,b)
该方程组有唯一解。x =
根据两种方法运算结果,顺序消元法得到结果比列主元消元法得到的结果精度更高。
注:matlab使用的是2015b版本,不知道是保留小数位数太少,还是程序原因,顺序消元输出结果总是等于准确解,请老师指正)
第四次上机作业。
7.分析用下列迭代法解线性方程组。
的收敛性,并求出使0.0001的近似解及相应的迭代次数。
1) 雅可比迭代法。
解:上机编写的函数如下。
function jacobi(x,b)
雅可比迭代法。
d=diag(diag(x));得到对角线元素组成的矩阵。
b=inv(d)*(d-x);
f=inv(d)*b;
b(:,0;
x1=b*b+f;
num=1;
while(norm(x1-b)>0.0001)%判断当前的解是否达到精度要求。
b=x1;x1=b*b+f;
num=num+1;
end; fprintf('求得的解为:');
disp(x1);
fprintf('迭代次数:%d次',num);
end上机运行,结果如下。
> a=[4,-1,0,-1,0,0;-1,4,-1,0,-1,0;0,-1,4,-1,0,-1;-1,0,-1,4,-1,0;0,-1,0,-1,4,-1;0,0,-1,0,-1,4];
> b=[0;5;-2;5;-2;6];
> jacobi(a,b)
求得的解为:
迭代次数:28次。
满足要求的解如输出结果所示,总共迭代了28次。
2) 高斯-赛德尔迭代法。
上机程序如下所示。
function gauss_seidel( a,b )
高斯赛德尔迭代法。
d=diag(diag(a));
l=d-tril(a);
u=d-triu(a);
b=inv(d-l)*u;
f=inv(d-l)*b;
b(:,0;
x0=b*b+f;
num=1;
while(norm(x0-b)>0.0001)
计算方法上机作业
计算方法上机报告。姓名 学号 班级 上课班级 1 算法思想。2 算法结构。3 matlab源程序。clear 清除工作空间变量。clc 清除命令窗口命令。m input 请输入有效数字的位数m输入有效数字的位数。s 0for n 0 50 t 1 16 n 4 8 n 1 2 8 n 4 1 8 n...
计算方法上机作业
表2 新算法迭代结果1 初值 0,精度ep 初始选择因子p 修正因子 0.1,最大迭代次数n 0,局部修正次数m分别取1,2,3次,f 49881192646492934000000000000.000000 表3 新算法迭代法结果2 初值 0,精度ep 初始选择因子p 修正因子 0.05,最大迭代...
计算方法上机作业
计算方法第四次上机报告。2.用欧拉方法解初值。y 10x 1 y 0 x 1 y 0 0 取步长h 0.1,保留5位有效数字,并与准确解相比较。分析 该题目考察欧拉方法解初值问题。程序如下 function heun a,b,y0,n h b a n x a h b y y0 ones 1,n 1 ...