东南大学数值分析上机作业word版保证正确文档格式.docx
《东南大学数值分析上机作业word版保证正确文档格式.docx》由会员分享,可在线阅读,更多相关《东南大学数值分析上机作业word版保证正确文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
disp('
'
)
fprintf('
ThevalueofSnusingdifferentalgorithms(N=%d)\n'
N);
====================================================='
AccurateCalculation%f\n'
AccurateValue);
CaculatefromlargetosmallSn1%f\n'
Sn1);
CaculatefromsmalltolargeSn2%f\n'
Sn2);
求解结果:
100
ThevalueofSnusingdifferentalgorithms(N=100)
=====================================================
AccurateCalculation0.740049
CaculatefromlargetosmallSn10.740049
CaculatefromsmalltolargeSn20.740050
10000
ThevalueofSnusingdifferentalgorithms(N=10000)
AccurateCalculation0.749900
CaculatefromlargetosmallSn10.749852
CaculatefromsmalltolargeSn20.749900
1000000
ThevalueofSnusingdifferentalgorithms(N=1000000)
AccurateCalculation0.749999
CaculatefromsmalltolargeSn20.749999
=====================================================
结果分析:
有效位数
n
顺序
102
104
106
从大到小
6
3
从小到大
5
从程序的输出误差结果可以看出,按照不同的顺序相加造成的误差限是不同的,按照从大到小相加的顺序就是一个病态问题,而按照从小到大顺序相加的误差很小,并且在从大到小顺序相加的误差随着n的增大而增大。
因此,采取从小到大的顺序累加得到的结果更加精确。
第二章
20.牛顿迭代法
(1)给定初值
及容许误差
,编制牛顿法解方程f(x)=0的通用程序。
(2)给定方程
易知其有三个根
①由牛顿方法的局部收敛性可知存在
当
时,Newton迭代序列收敛于根x2*。
试确定尽可能大的
②试取若干初始值,观察当
时Newton序列的收敛性以及收敛于哪一个根。
(3)通过本上机题,你明白了什么?
Matlab编写程序:
2.2编写相应的matlab程序
2.2.1定义f(x)函数
functionF=fu(x)
F=x^3/3-x;
End
2.2.2定义f(x)的导函数
functionF=dfu(x)
F=x*x-1;
2.2.3求根的通用程序
x0=input('
Pleaseinputaninitialvaluex0:
ep=input('
Pleaseinputanacceptederror:
flag=1;
whileflag==1
x1=x0-fu(x0)/dfu(x0);
ifabs(x1-x0)<
=ep
flag=0;
end
x0=x1;
Oneoftheapproximaterootsis:
%f\n'
x0);
2.2.4求sigma的通用程序
eps=input('
Pleaseinputthesearchingaccuracy:
Pleaseinputanacceptederror:
k=0;
x0=0;
whileflag==1;
sigma=k*eps;
x0=sigma;
k=k+1;
m=0;
flag1=1;
whileflag1==1&
&
m<
=10^3
ep
flag1=0;
m=m+1;
ifflag1==1||abs(x0)>
最大的sigma值为:
sigma);
2.3运行结果
2.3.1寻找最大的sigma值
主要是在0的基础上,不断的增加步长,带入Newton公式,验证该值是否收敛于0,不断的循环,最后得到最小的不收敛于0的sigma值,此时也为最大满足收敛于0的最大的sigma值。
改变不同的步长,分别得到不同的sigma值,取其中的最小值,即为满足条件的最大的sigma值。
程序相应的运行结果如下:
>
chapter2_2
10^-6
0.774597
10^-4
0.774600
10^-2
0.780000
2.3.2运行chapter2_1程序
(1)当初值x0属于
内时,程序运行结果如下,
chaper2_1
-10000
-1.732051
-100
-10
-1.1
可以得出不论取何值,Newton迭代式收敛,方程的近似解都收敛于
(2)当初值x0属于
,程序运行结果如下,
-0.9
1.732051
-0.85
-0.774598
可以得出不论取何值,在此区间上Newton迭代式不收敛。
(3)当初值x0属于
-0.76
0.000000
-0.5
-0.1
-0.01
-0.000000
0.01
0.1
0.5
0.76
可以得出在此区间内,不论取何值,Newton迭代式收敛,方程的近似解都收敛于0。
(4)当初值x0属于
内时,运行程序结果如下,
0.774598
0.8
0.9
0.95
(5)当初值x0属于区间
运行程序结果如下,
1.1
10
可以得出,不管x0取何值,Newton迭代式都收敛,且收敛于根
对于多根方程,迭代序列收敛于某一个特定区间,且在一个区间上,可能收敛于不同值。
第三章
39.列主元Gauss消去法
列主元Gauss消去法对于某电路的分析,归结为求解线性方程组
其中
(1)编制解n阶线性方程组
的列主元高斯消去法的通用程序;
(2)用所编程序线性方程组
,并打印出解向量,保留5位有效数;
上机程序
通用高斯列主元消去法
n=input('
PleaseinputtheorderofmatrixA:
n='
%输入线性方程组阶数n
b=zeros(1,n);
A=input('
InputmatrixA(suchasa2ordermatrix:
[12;
3,4]):
b(1,:
)=input('
Inputthecolumnvectorb:
%输入行向量b
b=b'
;
C=[A,b];
%得到增广矩阵
%%列主元消去得上三角矩阵
fori=1:
n-1
[maximum,index]=max(abs(C(i:
n,i)));
%%执行此语句后,index为该列最大值的行数值
index=index+i-1;
T=C(index,:
C(index,:
)=C(i,:
C(i,:
)=T;
fork=i+1:
n%%列主元消去
ifC(k,i)~=0
C(k,:
)=C(k,:
)-C(k,i)/C(i,i)*C(i,:
%%回代求解%%
x=zeros(n,1);
x(n)=C(n,n+1)/C(n,n);
fori=n-1:
-1:
1
x(i)=(C(i,n+1)-C(i,i+1:
n)*x(i+1:
n,1))/C(i,i);
A=C(1:
n,1:
n);
Theupperteianguularmatrixis:
fork=1:
n
fprintf('
%f'
A(k,:
));
\n'
Solutionoftheequations:
%.5g\n'
x);
%以5位有效数字输出结果
运行程序结果如下所示:
n=9
[31-13000-10000;
-1335-90-110000;
0-931-1000000;
00-1079-30000-9;
000-3057-70-50;
0000-747-3000;
00000-304100;
0000-50027-2;
000-9000-229]
[-1527-230-2012-7710]
方程的解为:
-0.28923
0.34544
-0.71281
-0.22061
-0.4304
0.15431
-0.057823
0.20105
0.29023
由上述结果得:
通过本题的编程计算,我更加了解了列主元高斯消去法的基本原理,也学会了MATLAB中的矩阵处理模块。
第四章
一、题目
(1)编制求第一型3次样条插值函数的通用程序;
(2)已知汽车曲线型值点的数据如下:
2
4
7
8
9
2.51
3.30
4.04
4.70
5.22
5.54
5.78
5.40
5.57
5.70
5.80
端点条件为
=0.8,
=0.2。
用所编制程序求车门的3次样条插值函数S(x),并打印出S(i+0.5)(i=0,1,…9)。
二、通用程序
x=[0;
1;
2;
3;
4;
5;
6;
7;
8;
9;
10];
y=[2.51;
3.3;
4.04;
4.7;
5.22;
5.54;
5.78;
5.4;
5.57;
5.7;
5.8];
dy=[0.8;
0.2];
h=zeros(8,1);
u=zeros(9,1);
nameda=zeros(9,1);
d=zeros(11,1);
mm=zeros(11,1);
m=zeros(11,11);
h(i)=x(i+1)-x(i);
u(i)=h(i)/(h(i)+h(i+1));
nameda(i)=1-u(i);
d
(1)=6*((y
(2)-y
(1))/h
(1)-dy
(1))/h
(1);
d(11)=6*(-(y(11)-y(10))/h(10)+dy
(2))/h(10);
fori=2:
d(i)=6*((y(i+1)-y(i))/h(i)-(y(i)-y(i-1))/h(i-1))/(x(i+1)-x(i-1));
m(i,i-1)=u(i-1);
m(i,i)=2;
m(i,i+1)=nameda(i-1);
m(1,1)=2;
m(1,2)=1;
m(11,10)=1;
m(11,11)=2;
mm=inv(m)*d;
fx=zeros(1,10);
forj=1:
t=input('
请输入0到10之间的一个整数:
t=t+0.5;
i=fix(t);
fx(j)=y(i+1)+((y(i+2)-y(i+1))/h(i+1)-h(i+1)*(1/3*mm(i+1)+1/6*mm(i+2)))*(t-x(i+1))+0.5*mm(i+1)*(t-x(i+1))^2+1/(6*h(i+1))*(mm(i+2)-mm(i+1))*(t-x(i+1))^3;
disp(fx);
sx=zeros(901,1);
forj=0:
0.01:
i=fix(j);
sx(k)=y(i+1)+((y(i+2)-y(i+1))/h(i+1)-h(i+1)*(1/3*mm(i+1)+1/6*mm(i+2)))*(j-x(i+1))+0.5*mm(i+1)*(j-x(i+1))^2+1/(6*h(i+1))*(mm(i+2)-mm(i+1))*(j-x(i+1))^3;
三、求解结果
函数的输出结果如下截图:
其分别对应着i从0取到9。
从以上的两个曲线可以看出,拟合曲线与y-x的曲线基本一致,三次样条函数较好的拟合原函数,通过本次的编程,加强了我对三次样条插值的理解。
第六章
1、RK4方法的通用程序
2、AB4方法的通用程序
3、A