上海电力大学
数值计算方法
上机实习报告
学 院: 自动化工程学院
专 业: 电气系统检测与控制
课程名称: 数值计算方法
学生姓名: 尹申 学号: 18104049
指导老师: 黄建雄
20 19 年 5 月 25 日
上海电力大学自动化工程学院
实验一
1. 设
,
(1) 由递推公式
,从
,
出发,计算 ;
(2)
,
, 用
,计算 ;
(3) 分析结果的可靠性及产生此现象的原因(重点分析原因)。
解答过程:
(1)创建一个名为 shangji_01_1 的 m 脚本,输入代码如下:
clc
clear;
I=0.1822;
for n=1:20
I=-5*I+1/n;
fprintf('%12.8f\n',I)
end
fprintf('\n 当I0=0.1822时,I20的
值为:%12.8f\n\n',I)
显示结果为:
I=0.1823;
for n=1:20
I=-5*I+1/n;
fprintf('%12.8f\n',I)
end
fprintf('\n 当I0=0.1823时,I20的
值为:%12.8f\n',I)
即当
即当
时,实验结果约为-1.1593e+10;
时,实验结果约为-2.0558e+09。·
1
+=105dxxxInnnIInn151+−=−0=0.1822I0=0.1823I20I20=0I20=10000InIInn515111+−=−−0I0=0.1822I0=0.1823I
上海电力大学自动化工程学院
(2)创建名为 shangji_01_2 的 m 脚本文件,输入代码如下:
clear all;
clc;
I=0;
for n=20:-1:1;
I=(1/5)*(-I+1/n);
fprintf('%12.8f\n',I)
end
fprintf('\n 当I20=0时,I0的值
为:%12.8f\n\n',I)
显示结果如下:
I=10000;
for n=20:-1:1;
I=(1/5)*(-I+1/n);
fprintf('%12.8f\n',I)
end
fprintf('\n 当I20=10000时,I0的值
为:%12.8f\n',I)
(3)分析结果的可靠性及产生此现象的原因(重点分析原因)。
在(1)中计算值与真值之间的误差为:
即每迭代一步,误差都会被放大为原来的五倍,随着迭代次数的增多,误差增大得越来越快。
在(2)中计算值与真值之间的误差为:
每迭代一步,误差缩小为原来的 5 倍,随着迭代次数的逐渐增多,迭代结果越来越接近精确
值。
2
()*002211*1*11*5...5551515IIeeIInInIIIennnnnnnnnn−====−=+−−+−=−=−−−−−−()****111515151515151nnnnnnnnnIIIInInIIIe−=−=+−−+−=−=−−−nneeee5151512210====
上海电力大学自动化工程学院
实验二
2. 求方程
的近似根,要求
,并比较计算量。
(1) 在[0,1]上用二分法;
(2) 取初值
,并用迭代
;
(3) 加速迭代的结果;
(4) 取初值
,并用牛顿迭代法;
(5) 分析绝对误差。
解答过程:(1)用二分法:
clc
clear
close all
%二分法
a=0;b=1;i=1;
f=@(x)( exp(x)+10*x-2);%@是定义函
数句柄的运算符,相当于建立了一个
函数文件
c=(a+b)/2;%取区间中点
while abs(c-a)>0.0005
if f(a)*f(c)<0
b=c;
运行结果如下图所示:
c=(a+b)/2;
elseif f(c)*f(b)<0
a=c;
c=(b+a)/2;
end
i=i+1;
end
fprintf('二分法运算次数
为%d\n',i)
fprintf('二分法计算结果
为%.15f\n',c)
(2)用不动点迭代法:将方程
写成等价方程
的形式,再用
进行迭代,当迭代误差
时停止迭代,得到近似解。
3
0210=−+xex41105−+−kkxx00=x1021xkex−=+00=x0210=−+xex102xex−=1021kxkex−=+41105−+−kkxx
上海电力大学自动化工程学院
clc
clear
close all
%不动点迭代
x=0;%x的初值为0
for k=1:1:50 %规定迭代次数的上限
g1=x; %g1=x(n-1)
x=(2-exp(x))/10;
运行结果如下图所示:
g2=x; %g2=x(n)
if abs(g2-g1)<0.0005;
fprintf('迭代次数为%i\n',k)
fprintf('迭代结果为%.15f\n',g2)
break;
end
end
(3)用加速迭代法:设有不动点迭代
,则 Aitken 加速的迭代方程为
当迭代误差
时停止迭代,得到近似解。
clc
clear
close all
%加速迭代
k=0;
x=0;
while 1
k=k+1;
y=(2-exp(x))/10;
z=(2-exp(y))/10;
运行结果如下图所示:
g1=x;
x=x-(y-x)^2/(z-2*y+x);% 加速
g2=x;
if(abs(g2-g1) <0.0005)
% 如果满足精度要求跳出while循环
fprintf('迭代次数%d\n',k);
fprintf('迭代结果%.15f\n',x);
break;
end
end
(4)用牛顿迭代算法:记要求解的非线性方程为
,则牛顿迭代法的迭
4
1021kxkex−=+2+1(),(),1,2,3...(),2kkkkkkkkkkkyxzykyxxxxyx===−=−−+()41105−+−kkxx0210)(=−+=xexfx
代方程为:
上海电力大学自动化工程学院
当迭代误差
时停止迭代,得到近似解。
代码如下所示:
clc
clear
close all
%牛顿迭代算法
f=@(x)( exp(x)+10*x-2);
f_diff= @(x)(exp(x)+10);
n=0;
x=0;
while 1
n=n+1;
运行结果如下图所示:
g1=x;
x=x-f(x)/f_diff(x);
g2=x;
if(abs(g2-g1) < 0.0005)
fprintf('迭代次数为:%d\n',n);
fprintf('迭代结果为:%.15f\n',x);
break;
end
end
(5)分析绝对误差:
在命令行窗口中利用如下代码求出方程的精确解:
迭代方式
二分法迭代
不动点迭代
atiken 加速迭代
牛顿迭代
各方法绝对误差分析:
迭代结果
迭代次数
绝对误差
11
4
2
2
0.090332031250000
1.930700573e-4
0.090512616674365
1.248463289e-5
0.090483753435776
4.134787148e-5
0.090525108583390
7.276135e-9
二分法仅仅是根据端点函数值符号性质来判断根的大致位置(压缩常数 L=0.5),
因此收敛速度慢而且误差也相对较大;不动点迭代法是线性阶收敛,由迭代方程
可知,其压缩常数
,且压缩常数较小,因
5
)(')(1kkkkxfxfxx−=+41105−+−kkxx1021xkex−=+12718.010)('max]1,0[==exLx
上海电力大学自动化工程学院
此收敛速度较快;Atiken 加速迭代法为平方阶收敛,且艾特肯迭代加速法用到了相邻三
项 , 和 用于迭代,迭代函数二阶连续可导,自然收敛速度比不动点迭代要
快得多;采用牛顿迭代法需运算 2 次,其迭代序列收敛速度是不低于二阶的(对于求单
根是二阶收敛,即本题所出现的情况;而对于求重根的问题就只有线性收敛),所以对
于本题中的牛顿法,收敛速度也是非常快的。
6
1kx+kx1−kx
上海电力大学自动化工程学院
实验三
3.钢水包使用次数多以后,钢包的容积增大,数据如下:
2
3
4
5
6
7
8
9
6.42 8.2 9.58 9.5
9.7
10
9.93 9.99
x
y
10
11
12
13
14
15
16
10.49 10.59 10.60 10.8 10.6 10.9 10.76
试从中找出使用次数和容积之间的关系,计算均方差。(用
拟合)
解答过程:
(1)将拟合曲线进行简单变换
;
(2)令
,若要拟合曲线,则要求
最小,也
即满足以下等式:
由
由上式可得法方程组:
(3)根据法方程组编写程序计算 a,b,c 的值:
①创建名为 shangji_03 的 m 脚本文件,代码如下:
clc
clear
close all
x=[2 3 4 5 6 7 8 9 10 11 12 13 14
15 16];%表中x的值
y=[6.42 8.2 9.58 9.5 9.7 10 9.93
9.99 10.49 ...
10.59 10.6 10.8 10.6 10.9
10.76];%表中y的值
C=zeros(3);
D=zeros(3,1);
for k=1:15
C(1,1)=C(1,1)-x(k)*x(k);
C(1,2)=C(1,2)-x(k);
7
axbycx+=+()yxcaxb+=+()1521,,[y(xc)(axb)]kkkkabc==+−+()cba,,000abc===()()()()()()()()()=+−+=+−+−=+−+−===020202151151151iiiiiiiiiiiiiibaxcxyybaxcxybaxcxyx()()()()()()()()()()()()−−−=−−−−−−============15121511512151215115115115115115115115121kkkkkkkkkkkkkkkkkkkkkkkkkkkkyxyxyxcbayyyxyxyxxx