计算方法上机作业集合
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一次&第二次上机作业
上机作业:
1.在Matlab上执行:>> 5.1-5-0.1和>> 1.5-1-0.5
给出执行结果,并简要分析一下产生现象的原因。
解:执行结果如下:
在Matlab中,小数值很难用二进制进行描述。由于计算精度的影响,相近两数相减会出现误差。
2.(课本181页第一题)
解:(1)n=0时,积分得I0=ln6-ln5,编写如下图代码
从以上代码显示的结果可以看出,I 20的近似值为0.7465
(2)I I =∫I I 5+I 10dx,可得∫I I 610dx ≤∫I I 5+I 10dx ≤∫I I 5
10dx,得 16(I +1)≤I I ≤15(I +1),则有1126≤I 20≤1105
, 取I 20=1105
,以此逆序估算I 0。代码段及结果如下图所示
(3)从I20估计的过程更为可靠。首先根据积分得表达式是可知,被积函数随着n的增大,其所围面积应当是逐步减小的,即积分值应是随着n的递增二单调减小的,(1)中输出的值不满足这一条件,(2)满足。设I I表示I I的近似值,I I-I I=(−5)I(I0−I0)(根据递推公式可以导出此式),可以看出,随着n的增大,误差也在增大,所以顺序估计时,算法不稳定性逐渐增大,逆序估计情况则刚好相反,误差不断减小,算法逐渐趋于稳定。
2.(课本181页第二题)
(1)上机代码如图所示
求得近似根为0.09058 (2)上机代码如图所示
得近似根为0.09064;
(3)牛顿法上机代码如下
计算所得近似解为0.09091
第三次上机作业上机作业181页第四题
线性方程组为
[1.13483.8326
0.53011.7875
1.16513.4017
2.53301.5435
3.4129
4.9317
1.23714.9998
8.76431.3142
10.67210.0147
][
I1
I2
I3
I4
]=[
9.5342
6.3941
18.4231
16.9237
]
(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
end
if 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);
end
end %顺序消元形成上三角矩阵
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 %回代求解
else
disp('此方程组有无数组解');
end
end
上机运行结果为
>>
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 =
1.0000
1.0000
1.0000
1.0000
>>
(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
end
if dif==0
if RA==n
disp('该方程组有唯一解');