数值分析上机题答案
数值分析上机题答案
【篇一:数值分析上机试题对应参考答案】
么是近似值x* 有效数字?
若近似值x*的误差限是某一位的半个单位,该位到x*的第一位非零数字共有n位,就说x*有n位有效数字。它可表示为
2、数值计算应该避免采用不稳定的算法,防止有效数字的损失. 因此,在进行数值运算算法设计过程中主要注意什么?
(1)简化计算过程,减少运算次数;
(2)避免两个相近的数相减;
(3)避免除数的绝对值远小于被除数的绝对值;
(4)防止大数“吃掉”小数的现象;
(5)使用数值稳定的算法,设法控制误差的传播。
3、写出“n 阶阵a 具有n 个不相等的特征值”的等价条件(至少写3 个)
(1)|a|不为零
(2)n阶矩阵a的列或行向量组线性无关
(3)矩阵a为满秩矩阵
(4)n阶矩阵a与n阶可逆矩阵b等价
4、迭代法的基本思想是什么?
就是用某种极限过程去逐步逼近线性方程组精确解得方法。其基本思想为:先任取一组近似解初值x0,然后按照某种迭代原则,由x0计算新的近似解x1,以此类推,可计算出x2,x3,…xk,。。。,如果{x}收敛,则取为原方程组的解。
5、病态线性方程组的主要判断方法有哪些?
(1)系数矩阵的某两行(列)几乎近似相关
(2)系数矩阵的行列式的值很小
(3)用主元消去法解线性方程组时出现小主元
(4)近似解x*已使残差向量r=b-ax*的范数很小,但该近似解仍不符合问题要求。
6、lagrange 插值的前提条件是什么?并写出二次lagrange 插值的基函数。
1,j?i?(x)? 前提条件是:l i ,j?0,1,2?,n.?ij0,j?i?
二次lagrange 插值的基函数: (x?x)(x?x)12??lx0(xx)(xx) 0?10?2 (x?x)(x?x)02?? lx1(xx)(xx)1?01?2
(x?x)(x?x)01?? lx2(x?x)(x?x)2021
7、什么是数值积分的代数精度?
如果某一个求积公式对于次数不超过m的多项式均能准确地成立,但对于m+1次多项式就不准确成立,则称该求积公式具有m次代数精度(或代数精确度)。
一般来说列主元法能保证算法的稳定,所谓算法的稳定是指在运算过程中计算误差(对消去法这种直接法来说主要指由于计算机字长有限带来的舍入误差)能得到控制;全主元是较列主元更稳定的算法,但是它的计算量要比列主元算法大得多,列主元算法每做一次消元仅与同列的元素做比较,比较的次数与线性方程组的阶n是同阶的量,而全主元每做一次要与系数矩阵所有元素进行比较,计算量是与n2同阶的量。
9、求矩阵特征值的 qr 方法的算法步骤是什么?
对于给定的n阶实对称矩阵a与迭代次数m;
(1)令a1=a,对于k=1,2,?,m;
(2)迭代计算下一个矩阵:ak=qkrk(对ak作qr分解),
(3)ak=rq(交换乘法次序),令k=k+1,ak+1=qktakqk
(4)返回到2,直到k=m,输出a的主对角元素。
10、什么是高斯型求积公式与高斯点?
一般可设求积公式=in(?),为具有 n个节点的插值求积公式,且具有2n+1次
最高代数精度,则称其求积点x0,x1,…,xn称为高斯点具有,相应的公式称为高斯
型求积公式。
11、什么是插值计算的龙格现象?
增加插值节点,提高插值多项式的次数,可以使插值函数在更多的点与所逼近的函数取相同的值,但会使插值函数在两端发生激烈的振荡,这就是插值计算的龙格现象。
12、龙格—库塔方法的基本思想是什么?
基本思想是,在每一步内多预报几个点的斜率值,将其加权平均作为平均斜率,从而构造出更高的计算格式。具体做法是,用函数
f(x,y)在若干点上的函数值的线性组合来构造近似公式,构造时让近似公式在(xi,yi)处的泰勒展开式
与解y(x)在xi处的泰勒展开式的前面几项重合,从而使近似公式达到所需要的
阶数,这样既避免求偏导数,又提高了计算方法的精度。
二、计算题
1、随机生成4*4的矩阵,做列主元的三角分解,并验证等式
pa=lu 。解: a=rand(4) %随机生成的四位矩阵
a =
0.8147 0.6324 0.9575 0.9572
0.9058 0.0975 0.9649 0.4854
0.1270 0.2785 0.1576 0.8003
0.9134 0.5469 0.9706 0.1419 [l,u,p]=lu(a)
l =
1.0000000
0.9917 1.000000
0.8920-0.3250 1.00000 0.1390-0.4552 0.2567 1.0000
u =
0.9134 0.5469 0.9706 0.1419
0-0.4448 0.0024 0.3447
00 0.0925 0.9426
000 0.6955
p =
0 0 0 1
0 1 0 0
1 0 0 0
0 0 1 0
p*a %验证pa=lu
ans =
0.9134 0.5469 0.9706 0.1419
0.9058 0.0975 0.9649 0.4854
0.8147 0.6324 0.9575 0.9572
0.1270 0.2785 0.1576 0.8003
l*u
ans =
0.9134 0.5469 0.9706 0.1419
0.9058 0.0975 0.9649 0.4854
0.8147 0.6324 0.9575 0.9572
0.1270 0.2785 0.1576 0.8003
2、用lagrange 插值和newton 插值拟合[0, 2*pi]上的sin 函数,并画图比较。
解:
建立拉格朗日函插值函数
function [yt,l] = laginterp1(x,y,xt)
%拉格朗日差值
%x,y:差值条件
%xt:用拉格朗日插值函数要计算的自变量,可以是多个
%yt:用拉格朗日插值函数计算出xt对应的函数值数组
%l:拉格朗日插值多项式表达式
syms t;
n=length(x);
ny=length(y);
if n~=ny
error(差值节点x与函数值y不一致);
end
l = 0.0;
for k = 1:n
lk =1;
for j = 1:n
if j~=k
lk = lk*(t-x(j))/(x(k)-x(j));
end
end;
l = l + y(k)*lk;
end
simplify(l); %简化拉格朗日插值多项式表达式 l=collect(l); % 将拉格朗日插值多项式展开 yt = subs(l,t,xt); %计算插值点处的函数值
建立牛顿函数:
function [yt,n] = newtinterp(x,y,xt)
%已知数据点的牛顿插值
%x,y:差值条件
%xt:要计算的插值点,可以是多个
%yt:用牛顿插值函数算出xt对应的函数值数组
%l:牛顿插值多项式表达式
syms t;
n=length(x);
ny=length(y);
if n~=ny
error(差值节点x与函数值y不一致);
end
a=zeros(1,n);
n = y(1);
w = 1;
for k=1:n-1
yy=zeros(1,n); % 记录差商 for j=k+1:n
yy(j) = (y(j)-y(k))/(x(j)-x(k)); end
a(k) = yy(k+1);
w = w*(t-x(k));
n = n + a(k)*w;
y = yy;
end
yt = subs(n,t,xt);
simplify(n);
n = collect(n); % 将插值多项式展开 n = vpa(n, 6); % 系数转化为
6位精度
命令:
x=0:pi/10:2*pi;
y=sin(x);
z=0:pi/20:2*pi;
y1=laginterp1(x,y,z);%拉格朗日拟合法 y2=newtinterp(x,y,z); %
牛顿拟合法
figure;
plot(z,sin(z),--r,z,y1,-b,z,y2,-.k) %绘制函数图象 hold on
plot(x,y,+)
xlabel(x)
ylabel(y)
【篇二:数值分析考试卷及详细答案解答】
1.f
?2,5,?3,4?表示多少个机器数(c ).
a 64
b 129c257 d 256
2. 以下误差公式不正确的是( d)
a.??x1*?x2*????x1*????x2*?b.??x1*?x2*????x1*????x2*? c.??x1*?x2*??x2*??x1*??x1??x2*?
d.??x1*/x2*????x1*????x2*?
3.
设a?1?6, 从算法设计原则上定性判断如下在数学上等价的表达式,
哪一个在数值计算上将给出a较好的近似值?(d )
a
1(2?1)
6
b 99?702
c (3?22) d
3
1(3?22)
3
4. 一个30阶线性方程组, 若用crammer法则来求解, 则有多少次
乘法? ( a )
5. 用一把有毫米的刻度的米尺来测量桌子的长度, 读出的长度
1235mm, 桌子的精确长度记为( d )
二、填空
1.构造数值算法的基本思想是。
2.十进制12
3.3转换成二进制为1111011.01001。
3.二进制110010.1001转换成十进制为。
.转换成十进制为 4. 二进制0101
5
。 7
5.已知近似数x*有两位有效数字,则其相对误差限
6.
ln2=0.69314718…,精确到10?3的近似值是0.693。
*7.x???3.1415926?,则x1?3.1416,x*2?3.141的有效数位分别
为
8.设
x*?2.001,y*??0.8030是由精确值x和y经四舍五入得到的近似值,则
x*?y*的误差限-3。
9.设
x?2.3149541?,取5位有效数字,则所得的近似值x*?。
p?x?的计算量较小的一个算
10.设有多项式函数p?x??2x3?10x2?7x?8,给出计算法
((2x+10)x-7)x+8 。
三、计算
1.指出下列经四舍五入得的有效数字位数,及其绝对误差限和相对
误差限。
2.000 4 -0.002 00
1
故x=2.000 4有5位有效数字. a1=2,相对误差
限?r??101?5?0.000025
2?a1
―
x2=-0.002 00,绝对误差限0.000 005,因为m=-2,n=3,x2=-0.002 00有3位有效数
1
字. a1=2,相对误差限?r=?101?3=0.002 5
2?2
*?1000和它的两个近似值为x1?999.9和x*2?1000.1分别计算它们
的有效数位及绝对误差限,根据结果判断以下结论是否正确:对准确值x的两个近似值x1,x2,则有效数位n大的则其绝对误差限就越小?
2.对准确值x
1
?10m?n,n越大,通常绝对误差限越小,但绝对误差限也与m有2
*
关,因此上述结论并不总是正确。如准确值 x?1000,它的两个近似值为 x1?999.9和
******
x2?1000.1,x1,x2 的绝对误差限均为x?x1?x?x2?0.1,但x1有3位有效数字,
解答:?(x)?x?x*?而x2则有4位有效数字。 3.如要求?
*
10
的近似值的相对误差小于?0.1%,则?至少要取几位有效数字? ?(?10)10(?*)9?(?)?(?)
??10?10??r(?)?0.1% 解:?r(?)?*10*10*
(?)(?)?
10
从而?r(?)?10
?4
,又?r(?)?
1
?101?n,a1?3,即要求2a1
?r(?)?
解:
1
?101?n?10?4,从而解出n?5 2a1
4.设x?0,已知近似值x*的相对误差为a,估计lnx*的绝对误差。 1
?(lnx*)*?(x*)?(x*)1a*
?r(lnx*)?????(x*)?lnx?r*****
lnxlnxxlnxlnx
*
从而?(lnx*)??r(lnx*)?lnx?a
姓名班级学号一、选择题
1.通过点(x0,y0), (x1,y1), (x2,y2)所作的插值多项式是( c )
(a) 二次的 (b) 一次的 (c) 不超过二次的(d) 大于二次的
3.通过四个互异节点的插值多项式p(x),只要满足( c ),则p(x)是不超过一次多项式。
(a) 初始值y0=0(b) 所有一阶差商为0(c) 所有二阶差商为0 (d) 所有三阶差商为0 3.通过点(x0,y0),(x1,y1)的lagrange插值基函数
l0?x?,l1?x?满足(a,c) ?a?l0?x0??1,
l1?x1??1 ?b?l0?x0??1,l1?x1??0
l1?x0??0?d?l0?x0??0,l1?x1??0
,yk?,k?1,2,?,n。这n个点的拟合直线y?a0?a1x,则a0,a1
?c?l0?x0??1,
4.已知n对观察数据?xk
是使(c)最小的解。(a)
(c)
?y
k?1nk?1
n
k
?a0?a1xk (b)??yk?a0?a1xk?
k?1n
n
??y
k
?a0?a1xk? (b)??yk?a0?a1xk2?
2
k?1
5.设p?x?是在区间上的[a,b]上的y?f?x?分段线性插值函数,以下条件中不是p?x?必须满足的条件是(c)
(a)p?x?在[a,b]上连续,(b)p?xk??yk,(c)p?x?在[a,b]上可导,
(d)p?x?在各子区间上是线性函数
二、填空
`1.设一阶差商
f[x1,x2]?f(x2)?f(x1)?1?4??3,f[x2,x3]?f(x3)?f(x2)?6?1?5, 则
x3?x24?22x2?x12?1二阶差商f[x1,x2,x3]?
2.设f(x)?3x?5,xk?kh,k?0,1,? ,则f[xn,xn?1,xn?2]? 和
f[xn,xn?1,xn?2,xn?3]? 。
3.设f(x)?ax?bx?c(a?0), 取5个不同节点作f(x)的拉格朗日插值多项式p(x),则
32
p(x)是次多项式。
那么由这些数据构造的牛顿插值多项式的最高次幂的系数是
5.区间[a,b]上的三次样条插值函数s?x?在[a,b]上具有直到阶的连续导数。
三、计算与证明
1.已知函数y=f(x) 的观察数据为
试构造f(x)的拉格朗日多项式pn (x),并计算f(-1)。解:先构造基函数
x(x??)(x??)x(x??)(x??) (x??)(x??)(x??)(x??)(x??)(x??)
l?(x)???l?(x)??
(????)(????)(????)
??
(??(??))(???)(???)
??
l?(x)?
(x?2)x(x?4)(x?2)x(x?4) (x??)x(x??)x(x??)(x??) l3(x)????
(5?2)(5?0)(5?4)35(???)(???)(???)??
所求三次多项式为p3(x)=
?yl
k?0
3
kk
(x)
x(x??)(x??)(x??)x(x??)
+
????
=???x(x??)(x??)+(x??)(x??)(x??)-(??)?
????
??????= x?x?x?? ??????
p3(-1)=?
??????
?????
???????
2.已知函数y?f(x)的数据如下表。计算它的各阶差商和n3(x)的形式,解:先构造差商表如下:n
-2 -56 -1 -16 40
0-214-13 1-20 -72 34 3 1 20
(x) = –56 + 40(x + 2) –13(x + 2)(x + 1) + 2(x + 2)(x + 1) x3
2
a?x?b
3.设f(x)?c[a,b],试证:maxf(x)?[证:由于f(x)的线性插值
x?bx?a1
f(a)?f(b)]?(b?a)2maxf(x)
a?x?ba?bb?a8
f(b)?f(a)x?bx?a
(x?a)?f(a)?f(b)?l1(x)(直线的点斜式)
b?aa?bb?a
f(b)?f(a)
(x?a)]于是 maxf(x)?[f(a)?
a?x?bb?a
f(a)?
f(?)
(x?a)(x?b)(a???b)?maxf(x)?l1(x)?max
a?x?ba?x?b2!
1
max(x?a)(x?b)maxf(x)
a?x?b2a?x?b
12
?(b?a)maxf(x)
a?x?b8
4.要给出y?cosx等距节点函数表,如用线性插值计算y的近似值,使其截断误差限为1
,则函数表的步长应取多大??10?5
2
?
5.给定数据表
试用三次多项式以最小二乘法拟合所给数据.
6.已知
f?x??ln?x?2?,?1?x?1,求f
?x?的二次最佳平方逼近,其中取权为1,并
求平方误差。
1?1?x??x,解:由于勒让得多项式在[-1,1]上正交,所以
设?0?x??1,?2?x???3x2?1?
2
??x??a??2? x??a0?0?x1??1?x?a2
而??0,?0??2,??1,?1??
22
,??2,?2?? 35
?y,?0??1.29584,?y,?1??0.352082,?y,?2???0.0374965
得,a0
?0.647918,a1?0.528122,a2?-0.0937412
2
所以??x??0.647918?0.528122x-0.0468706(3x
-1)
其平方误差为
??y???x??dx=0.0524489
?1
1
2
姓名班级学号一、选择题
【篇三:东南大学数值分析上机题(上)】
名:
学号:
专业:
2013年10月27日
第一章
舍入误差与有效数设sn??
j?2n
311?。,其精确值为1?????
j?12?2nn?1?
2
1
111
,计算sn的通用程序。 ???222
2?13?1n?1
11,计算s的通用程序。(2)编制按从小到大的顺序sn?1???n n2?1(n?1)2?122?1(1)编制按从大到小的顺序sn?
(3)按两种顺序分别计算s102,s104,s106,并指出有效位数。(编制程序时用单精度)(4)通过本上机题,你明白了什么?解:(1)
#includestdio.h void main() { float n,i,s; printf(please input
n=); scanf(%f,n); for(i=2,s=0;i=n;s+=1/(i*i-1),i++);
printf(s=%f\n,s); }
(2)
#includestdio.h void main() { float n,i,s; printf(please input
n=); scanf(%f,n); for(i=n,s=0;i=2;s+=1/(i*i-1),i--);
printf(s=%f\n,s); }
(3)按从大到小顺序:按从小到大顺序:
s102=0.740049 有效位数6位 s104=0.749852 有效位数3位
s106=0.749852 有效位数3位 s102=0.740050 有效位数5位
s104=0.749900 有效位数6位 s106=0.749999 有效位数6位
(4)通过上述实验数据可以看出此次算法使用从小到大的顺序进行得到的数据相对而言更精确,可以得到这样的启示:在计算数值时,要先分析不同算法对结果的影响,避免大数吃小数的现象,找出能得到更精确的结果的算法。
第二章
(上机题)newton迭代法
(1)给定初值x0及容许误差?,编制newton法解方程f(x)?0根的通用程序。
??
(2)给定方程f(x)?x/3?x?
0,易知其有三个根x1?,x2?
0,x3?
3
?
1.由newton方法的局部收敛性可知存在??0,当x0?(??,?)时,newton迭代序列收敛于根x2。试确定尽可能大的?。
2.试取若干初始值,观察当x0?(??,?1),(?1,??),(??,?),(?,1),(1,?)时newton序列是否收敛以及收敛于哪一个根。(3)通过本上机题,你明白了什么?解:
(1)#includeiostream.h #includemath.h
#define eps 0.000001float f(float x) { float f; f=x*x*x/3-x; return(f); }
float df(float x) { float df; df=x*x-1;return (df); }
void main(void) { float x0,x1,a;
?
int k=0; cout请输入初值x0:; cinx0; do {a=-
f(x0)/df(x0);x1=x0+a;k++;x0=x1; } while(fabs(a)eps);
coutk\tx0; }
(2)1 #includeiostream.h #includemath.h
void delay(int n) {for(n=10000;n0;n--);} #define eps 0.01
float f(float x) { float f; f=x*x*x/3-x;return(f); }
float df(float x){ float df; df=x*x-1;return (df); }
int judgement(float z) { int count=5; float x0,x1,type,type1;
x0=z; while(count--0) { x1=x0-f(x0)/df(x0);type=fabs(x1);
type1=fabs(x1-x0);
coutcount=count\ttype=type\ttype1=type1\n;if(fabs(x1-x0)eps) return 1;x0=x1;
delay(30000); } return 0; }
void main(void) { float delta=0; int flag=1; while(flag==1) {cout方程的根为:\n;delta+=eps;flag=judgement(delta); } cout
输出方程根收敛的区间值:\n; coutdelta-eps; //输出收敛的区间值 }
取esp=0.1,即步长为0.1时,由程序算出?max=0.78。所以当
x0?(-?,?)时,迭代序列收敛于根x2。(2)2#includestdio.h
#includemath.h #define eps 0.01 float f(float x) { float f;
f=x*x*x/3-x; return f; }
float df(float x) { float df; df=x*x-1; return df; }
float ddf(float x) { float ddf; ddf=2*x; return ddf; }
main()
*