计算方法上机作业集合

发布 2022-07-08 08:01:28 阅读 2589

第一次&第二次上机作业。

上机作业: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 ...