数值分析上机题参考答案

合集下载

数值分析上机实习题

数值分析上机实习题

2019-2020 第1学期数值分析上机实习题总目标:会算,要有优化意识。

(以下程序要求以附件1例题代码格式给出)1. 对给定的线性方程组Ax b =进行迭代求解。

(1)给出Jacobi 迭代的通用程序。

(2)给出Gauss-Seidel 迭代的通用程序。

调用条件:系数矩阵A ,右端项b ,初值0x ,精度要求ε。

输出结果:方程组的近似解。

给定线性方程组211122241125x --⎛⎫⎛⎫ ⎪ ⎪= ⎪ ⎪ ⎪ ⎪---⎝⎭⎝⎭,和122711122215x -⎛⎫⎛⎫ ⎪ ⎪= ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭,取初值0x 为0, 分别利用Jacobi 迭代和G-S 迭代进行求解,观察并解释其中的数学现象。

2. 利用紧凑格式(即直接分解法或逐框运算法)对给定的矩阵A 进行Doolittle 分解,并用其求线性方程组的解。

调用条件:矩阵A 。

输出结果:单位下三角矩阵L 和上三角矩阵U 。

给定矩阵1112A ⎛⎫= ⎪⎝⎭,利用以下算法:1)将A 作Doolittle 分解11A LU =,2)令211A U L =,并对2A 作Doolittle 分解222A L U =,3)重复2)的过程令11n n n A U L --=,并对n A 作Doolittle 分解n n n A L U =,2,3,4,n =, 观察n L ,n U ,n A 的变化趋势,思考其中的数学现象。

3. 给定函数21(),12511f x x x -≤+≤=,取164,8,n =,用等距节点21,i i n x =-+ 0,1,,1i n =+对原函数进行多项式插值和五次多项式拟合,试画出插值和拟合曲线,并给出数学解释。

4. 给出迭代法求非线性方程()0f x =的根的程序。

调用条件:迭代函数()x ϕ,初值0x输出结果:根的近似值k x 和迭代次数k给定方程32()10f x x x =--=,用迭代格式1k x +=0 1.5x =附近的根,要使计算结果具有四位有效数字,利用估计式*1||1||k k k L x x x x L -≤---,或估计式*10||1||kk L x x x x L-≤--来判断需要的迭代次数,分别需要迭代多少次?两者是否有冲突?5. 利用数值求积算法计算()ba f x dx ⎰。

数值分析上机实习题及答案.docx

数值分析上机实习题及答案.docx

方詡文金兴:爭[数值分析]2017-2018第二学期上机实习题1:编程计算亍丄,其中C= 4. 4942x10307,给出并观察计算结心C"果,若有问题,分析之。

解:mat lab 编程如下:E) funct ion diy i ti formatlong g;n 二input C 输入ii 值= c= 4.4942E307; sum 二0; s 二 0;E3 for i = l:n s = l/ (c*i);>> diyiti 输入n 值:10 104.6356e-308 >> diyiti输入ri 值:1001004.6356e-308 >> diyiti 输入n 值:1000 10004.6356e-308 >> diyiti揄入n 值* 1000001000004・ 6356e-308 >> diyiti输入n 值;1000000001000000004.6356e-308图二:运行结果Mat lab 中,forma t long g 对双精度,显示15位定点或浮点格式,由上图 可知,当输入较小的n 值5分别取10, 100, 1000, 100000, 100000000)的时候, 结果后面的指数中总是含有e-308,这和题目中的C 值很相似,我认为是由于分 母中的C 值相对于n 值过大,出现了 “大数吃小数”的现彖,这是不符合算法原 则的。

2:利用牛顿法求方程-1^ = 2于区间241的根,考虑不同初值下牛顿法的收敛情况。

解:牛顿法公式为:利用mat lab 编程function di2ti21 3i=l ;2 2.85208156699784 xO 二input ('输入初值x0:‘ );A 二[i x0];3 2.55030468822809 t=x0+ (x0-log (xO) -2) /(1-1/xO) ; %迭代函数4 1.91547247100476 三 while (abs (t _x0)>0.01)i=i+l; 5 0.37867158538991 xO 二 t; 6 0.774964959780275 A = [A;i xO];t =x0+(x0-log(xO)-2)/(1-1/xO): 7 4.11574081641933 cnd| 8 5.04162436446126 disp (A);96.81782826645596当输入初值二3的时候并不能收敛。

数值分析上机答案computer中科院

数值分析上机答案computer中科院

源程序如下:function[x_jac,x_gauss,x_sor,A,b]=diedai(n,w,e,N,Ain,bin) if nargin<3e=1e-5;N=1000;endif nargin<4N=1000;endif nargin<2error('²ÎÊý²»¹»');endA=hilb(n);b=A*ones(n,1);if nargin>4if nargin==5error('ÇëÊäÈëb');elseA=Ain;b=bin;endend%%Ñſ˱ȵü´údiedai_n=0;x=zeros(n,2);while max(abs(b-A*x(:,2)))>ediedai_n=diedai_n+1;if diedai_n>Ndisp('Ñſ˱ȵü´úδ´ïµ½¾«¶È');break;endx(:,1)=x(:,2);for i=1:nif i>1x(i,2)=(b(i)-A(i,1:(i-1))*x(1:(i-1),1)-A(i,(i+1):n)*x((i+ 1):n,1))/A(i,i);elsex(i,2)=(b(i)-A(i,(i+1):n)*x((i+1):n,1))/A(i,i);endendendx_jac.x=x(:,2);x_jac.n=diedai_n-1;x_jac.error=max(abs(b-A*x(:,2)));%%¸ß˹µü´údiedai_n=0;x=zeros(n,2);while max(abs(b-A*x(:,2)))>ex(:,1)=x(:,2);diedai_n=diedai_n+1;if diedai_n>Ndisp('¸ß˹¡ªÈüµÂ¶ûµü´úδ´ïµ½¾«¶È');break;endfor i=1:nif i>1x(i,2)=(b(i)-A(i,1:(i-1))*x(1:(i-1),2)-A(i,(i+1):n)*x((i+ 1):n,1))/A(i,i);elsex(i,2)=(b(i)-A(i,(i+1):n)*x((i+1):n,1))/A(i,i); endendendx_gauss.x=x(:,2);x_gauss.n=diedai_n-1;x_gauss.error=max(abs(b-A*x(:,2)));%%SORµü´údiedai_n=0;x=zeros(n,2);while max(abs(b-A*x(:,2)))>ex(:,1)=x(:,2);diedai_n=diedai_n+1;if diedai_n>Ndisp('SORµü´úδ´ïµ½¾«¶È');break;endfor i=1:nif i>1x(i,2)=x(i,1)+w*(b(i)-A(i,1:(i-1))*x(1:(i-1),2)-A(i,i:n)* x(i:n,1))/A(i,i);elsex(i,2)=x(i,1)+w*(b(i)-A(i,i:n)*x(i:n,1))/A(i,i);endendendx_sor.x=x(:,2);x_sor.n=diedai_n-1;x_sor.error=max(abs(b-A*x(:,2)));end运行结果:由于SOR的松弛因子取1时与高斯-赛德尔迭代相同,故在矩阵n取8,10时省去了SOR迭代松弛因子取1的步骤。

东南大学出版社第二版《数值分析》上机作业答案(前三章)

东南大学出版社第二版《数值分析》上机作业答案(前三章)

for (i=k+1;i<N;i++) // { lik=a[i][k]/a[k][k]; //实施消去过程,得到上三角系数增广矩阵 for (j=k;j<M;j++) // { a[i][j]=a[i][j]‐lik*a[k][j]; // } } } cout<<"经列主元高斯消去法得到的数组为:"<<endl; // for (b=0;b<N;b++) // { cout<<endl; //输出经过列主元消去法处理过的系数增广矩阵 for (c=0;c<M;c++) { cout<<setw(7)<<a[b][c]; // } } cout<<endl; double x[N]; // double s; int f,g; x[N‐1]=a[N‐1][M‐1]/a[N‐1][N‐1]; // for (f=N‐2;f>=0;f‐‐) // { s=0; for (g=f+1;g<N;g++) //由上三角形的系数增广矩阵求出方程组的解 { s=s+a[f][g]*x[g]; // } x[f]=(a[f][N]‐s)/a[f][f]; // } cout<<"方程组的解为:"<<endl; for (b=0;b<N;b++) //输出方程组的解 {
1
当 n=10000 时,s3=0.7499 Press any key to continue (分析 S1 的 6 位数字中,有效位数为 4 位; S2 的所有数字都是有效数字。 ) 当 n=1000000 时,s1=‐14.2546 当 n=1000000 时,s2=‐14.2551 当 n=1000000 时,s3=0.749999 Press any key to continue (分析: S1 的 6 位数字中,没有有效数字; S2 的 6 位数字中,没有有效数字。 ) 由运行结果可知,当精度比较低时,按从大数开始累加到小数的计算结果的精度低于按从小数 累加到大数的计算结果的精度。 至于当 n=1000000 时,S1 和 S2 得出了负数结果,可能是由于循环次数过多,导致数据溢出, 从而得出错误结果。 习题 2 20.程序如下: //给定误差限为:0.5e‐6 //经过试算得当 delta 最大取道 0.7745966 时,迭代得到的根都收敛于 0 #include <iostream.h> #include <math.h> void main () { double x,u; int count=0; u=10.0; cout<<"请输入 x 的初值"<<endl; cin>>x; for (count=0;abs(u)>5;count++) { x=x‐(x*x*x‐3*x)/(3*(x*x‐1)); u=10000000*x; if(count>5000) { cout<<"迭代结果不收敛于 0!"<<endl; break; } } cout<<"x="<<x<<endl<<endl;

数值分析上机实验题参考

数值分析上机实验题参考

数值分析论文数值积分 一、问题提出选用复合梯形公式,复合Simpson 公式,Romberg 算法,计算I = dx x ⎰-4102sin 4 ()5343916.1≈II =dx x x ⎰1sin ()9460831.0,1)0(≈=I fI = dx xe x⎰+1024 I =()dx x x ⎰++1211ln 二、要求编制数值积分算法的程序;分别用两种算法计算同一个积分,并比较其结果;分别取不同步长()/ a b h -=n ,试比较计算结果(如n = 10, 20等); ﹡给定精度要求ε,试用变步长算法,确定最佳步长﹡。

三、目的和意义深刻认识数值积分法的意义; 明确数值积分精度与步长的关系;根据定积分的计算方法,可以考虑二重积分的计算问题引言一、数值求积的基本思想实际问题当中常常需要计算积分,有些数值方法。

如微分方程和积分方程的求解,也都和积分计算相联系。

依据人们熟悉的微积分基本原理,对于积分I=⎰a b f(x)dx,只要找到被积函数f(x)和原函数F(x),便有下列牛顿-莱布尼茨公式:I=⎰a b f(x)dx=F(b)-F(a).但实际使用这种求积方法往往有困难,因为大量的被积函数,诸如x xsin,2xe-等,其原函数不能用初等函数表达,故不能用上述公式计算。

另外,当f(x)是由测量或数值计算给出的一张数据表时,牛顿-莱布尼茨公式也不能直接运用,因此有必要研究积分的数值计算问题。

二、数值积分代数精度数值求积方法是近似方法,为要保证精度,我们自然希望求积公式能对“尽可能多”的函数准确成立,就提出了所谓代数精度的概念。

如果某个求积公式对次数不超过m的多项式均能准确成立,但对m+1次多项式就不能准确成立,则称该求积公式具有m次代数精度。

三、复合求积公式为了提高精度,通常可以把积分区间分成若干子区间(通常是等分),再在每个子区间用低阶求积公式,即复化求积法,比如复化梯形公式与复化辛普森公式。

东南大学数值分析上机题答案

东南大学数值分析上机题答案

数值分析上机题第一章17.(上机题)舍入误差与有效数 设∑=-=Nj N j S 2211,其精确值为)111-23(21+-N N 。

(1)编制按从大到小的顺序1-1···1-311-21222N S N +++=,计算N S 的通用程序;(2)编制按从小到大的顺序121···1)1(111222-++--+-=N N S N ,计算NS 的通用程序;(3)按两种顺序分别计算210S ,410S ,610S ,并指出有效位数(编制程序时用单精度); (4)通过本上机题,你明白了什么?解: 程序:(1)从大到小的顺序计算1-1···1-311-21222N S N +++=:function sn1=fromlarge(n) %从大到小计算sn1format long ; sn1=single(0); for m=2:1:nsn1=sn1+1/(m^2-1); end end(2)从小到大计算121···1)1(111222-++--+-=N N S N function sn2=fromsmall(n) %从小到大计算sn2format long ; sn2=single(0); for m=n:-1:2sn2=sn2+1/(m^2-1); end end(3)总的编程程序为: function p203()clear allformat long;n=input('please enter a number as the n:') sn=1/2*(3/2-1/n-1/(n+1));%精确值为snfprintf('精确值为%f\n',sn);sn1=fromlarge(n);fprintf('从大到小计算的值为%f\n',sn1);sn2=fromsmall(n);fprintf('从小到大计算的值为%f\n',sn2);function sn1=fromlarge(n) %从大到小计算sn1 format long;sn1=single(0);for m=2:1:nsn1=sn1+1/(m^2-1);endendfunction sn2=fromsmall(n) %从小到大计算sn2 format long;sn2=single(0);for m=n:-1:2sn2=sn2+1/(m^2-1);endendend运行结果:从而可以得到N值真值顺序值有效位数2 100.740050 从大到小0.740049 5从小到大0.740050 64 100.749900 从大到小0.749852 3从小到大0.749900 66 100.749999 从大到小0.749852 3从小到大0.749999 6(4)感想:通过本上机题,我明白了,从小到大计算数值的精确位数比较高而且与真值较为接近,而从大到小计算数值的精确位数比较低。

数值分析上机题 舍入误差与有效数

数值分析上机题  舍入误差与有效数
7位
(5)通过上述分析可以看出:按从小到大的顺序计算所得的结果与真值接近,而按从大到小的顺序计算所得的结果与真值的误差较大,且有效位数较前者少。
原因:这是由于机器数在进行加法运算时,首先比较两数的阶码,将阶码较小的尾数向右移位,每移一位阶码加一,直至其阶码与另一数的阶码一致为止,且将移位后的尾数多于计算机字长的部分进行四舍五入,之后对尾数进行加减运算,最后将尾数写成规格化的形式,当从大到小的顺序进行计算式,由于越到后面数字越小,就会产生大数吃小数的情况,从而产生误差的累积,最后使计算结果的不准确。
解:(1)从大到小的matlab程序:
functions=myfun1(N)
formatlong;
k=2;
s=single(0);
fork=2:1:N
a=1/(k*k-1);
s=a+s;
end
end
(2)从小到大的matlab程序
functions=myfun2(N)
formatlong;
s=single(0);
fori=N:-1:2
a=1/(i*i-1);
s=a+s;
end
真值
有效位数
0.7400495
0.7400495
0.7400495
大小
7位
小大
7位
0.7498521
0.7499000
0.7499000
大小
4位
小大
7位
0.7498521
0.7499990
0.749999
大小
4位
小大
舍入误差与有效数
东南大学机械工程学院
设SN= ,其精确值为 )。
(1)编制按从大到小的顺序SN= + + +……+ ,计算SN通用的程序;

数值分析韩旭里答案

数值分析韩旭里答案

数值分析韩旭里答案【篇一:数值分析上机题目】>1631110xxxx 材料科学与工程学院一.第2章插值法l2.7 给定数据表2-15.用newton插值公式计算3次插值多项式n3(x).表2-15x f(x)1 1.251.52.500 1.002 5.50a. matlab代码如下,two.m,%第二章,p45,练习题2第七题 clear(); x=[1,1.5,0,2];y(:,1)=[1.25,2.50,1.00,5.50];%已知点集合x和y syms t w; w(1)=1; %计算基函数序列w和差商表y,以及函数序列的权数diag(y),计算的牛顿三次多项式表述为t的函数 for j=2:length(x) fori=j:length(x)y(i,j)=(y(i,j-1)-y(i-1,j-1))/(x(i)-x(i-j+1)); i=i+1; endw(j)=prod(t-x(1:j-1)); j=j+1; enddisp(三次牛顿插值多项式为); disp(collect(w*diag(y)));plot(x,y(:,1),*); hold on;fplot(collect(w*diag(y)),[-0.5,2.5]);legend({已知点集,三次牛顿插值多项式函数},location,northwest,fontsize,14); xlabel(x,fontsize,16);ylabel(y,fontsize,16); hold off;b. 计算结果如下:二.第3章函数逼近与数据拟合a. matlab代码,three.m,%第三章函数逼近与数据拟合,p68练习题,第2题 clear(); syms x;%所使用的非线性基函数序列,用符号表示 y=abs(x);%被逼近函数f=[1,x^2,x^4];%求解法方程的系数矩阵a*gn=b,其中a和b均为行向量gn=ones(length(f),length(f)); for i=1:length(f) for j=1:length(f) gn(i,j)=int(f(i)*f(j),-1,1);j=j+1; endb(i)=int(f(i)*y,-1,1); i=i+1; enda=b/gn;%最佳平方逼近的系数行向量 disp(逼近函数表达式);disp(vpa(f*a));disp(最佳函数逼近得平方误差); disp(vpa(int(y^2,-1,1)-a*b));fplot(y,[-1,1]); hold on; fplot(a*f,[-1,1]);legend({被逼近函数,逼近函数},location,north,orientation,horizontal,fontsize,16,fontweight,b old);xlabel(x,fontsize,20,fontweight,bold);ylabel(y,fontsize,20,fontweight,bold); hold off;b. 运行结果如下:三.第4章数值积分与数值微分例4.9用romberg求积法计算定积分 01sin?(??)??a. matlab代码,four.m%romberg求积公式,外推原理 clear(); clear(); format long; a=0; b=1;t(1,1)=(b-a)/2*(f(a)+f(b));t(2,1)=1/2*t(1,1)+(b-a)/2*f((a+b)/2); t(1,2)=(4*t(2,1)-t(1,1))/(4-1);col=2;while abs(t(1,col)-t(1,col-1))0.5*10^-6%t(1,col)对应的计算的是多少步的值,col→coln关系col=col+1;%此时求得是第n+1次均分后的结果,使用的是第n次的结果,注意在矩阵 %计算的第n斜列是第n-1次均分的结果 for j=1:colif j==1h=(b-a)/2^(col-2);%使用n+1之前的第n次结果【篇二:数值分析a教学】>一、课程基本信息二、课程目的和任务“数值分析”是理工科院校计算数学、力学、物理、计算机软件等专业的学生必须掌握的一门重要的基础课程。

数值分析答案Ch1-Ch2

数值分析答案Ch1-Ch2

第一二章习题提示第一章误差1.计算球体积要使相对误差限为1%,问度量半径R 时允许的相对误差是多少?答案:V =43πR 3,εr (V )=ε(V )V =4πR 2ε(R )43πR 3=3εr (R )。

球体积要使相对误差限为1%,R 时允许的相对误差是1300=0.003333。

2.考虑正弦函数sin x 的求值,特别是数据传递误差,即自变量x 发生扰动h 时函数值的误差。

(1)估计sin x 的绝对误差。

(2)估计sin x 的相对误差。

(3)估计这个问题的条件数。

(4)自变量x 为何值时,这个问题高度敏感?答案:(1)cos xh 。

(2)cot xh 。

(3)相对条件数x cot x 。

(4)x =kπ,k =0时,这个问题高度敏感。

注:误差估计与近似值取法有关,要舍去高阶无穷小。

如:sin (x +h )≈sin x +cos xh ,则误差为−12sin xh 2等。

3.设Y 0=28,按递推公式Y n =Y n −1−1100√783,(n =1,2,...)计算到Y 100。

若取√783≈27.982(保留5位有效数字),试问计算Y 100将有多大误差。

答案:Y 100=Y 0−√783,ε(Y 100)=ε(27.982)(假设Y 0无误差)。

Y 100的误差限为12×10−3。

4.正方形的边长大约为100cm ,问测量时允许多大的误差才能使其面积误差不超过1cm 2。

答案:测量边长的误差应不超过0￿005cm 。

上机题1.编程观察无穷级数∞∑n =11n的求和计算。

(1)采用IEEE 单精度浮点数,观察当n 为何值时求和结果不再变化,将它与理论分析的结论进行比较(注:在MATLAB 中可用single 命令将变量转成单精度浮点数)。

(2)用IEEE 双精度浮点数计算(1)中前n 项的和,评估IEEE 单精度浮点数计算结果的误差。

答案:format longs =single(0);u =single(1);t =0;k =1;while u ~=su =s;s =s +1/k;t =t +1/k;k =k+1;endk -1s -t这里单精度浮点数的和为s =15.404,双精度浮点数的和为t =15.133。

数值分析上机试题对应参考答案

数值分析上机试题对应参考答案

一、 问答题1、什么是近似值x * 有效数字?若近似值x*的误差限是某一位的半个单位,该位到x*的第一位非零数字共有n 位,就说x*有n 位有效数字。

它可表示为X=±10m ×(a 1+a 2×10-1+…+a n ×10-(n-1),其中a i (i=1,2,…,n)是0到9中的一个数字,a 1≠0,m 为整数,且︱x -x *︱≠21×10m-n+12、数值计算应该避免采用不稳定的算法,防止有效数字的损失. 因此,在进行 数值运算算法设计过程中主要注意什么? (1)简化计算过程,减少运算次数; (2)避免两个相近的数相减;(3)避免除数的绝对值远小于被除数的绝对值; (4)防止大数“吃掉”小数的现象;(5)使用数值稳定的算法,设法控制误差的传播。

3、写出“n 阶阵A 具有n 个不相等的特征值”的等价条件(至少写3 个)(1)|A|不为零(2)n 阶矩阵A 的列或行向量组线性无关 (3)矩阵A 为满秩矩阵(4)n 阶矩阵A 与n 阶可逆矩阵B 等价4、迭代法的基本思想是什么?就是用某种极限过程去逐步逼近线性方程组精确解得方法。

其基本思想为:先任取一组近似解初值X 0,然后按照某种迭代原则,由X 0计算新的近似解X 1,以此类推,可计算出X 2,X 3,…X K ,。

,如果{X }收敛,则取为原方程组的解。

5、病态线性方程组的主要判断方法有哪些?(1)系数矩阵的某两行(列)几乎近似相关 (2)系数矩阵的行列式的值很小(3)用主元消去法解线性方程组时出现小主元(4)近似解x*已使残差向量r=b-Ax*的范数很小,但该近似解仍不符合问题要求。

6、Lagrange 插值的前提条件是什么?并写出二次Lagrange 插值的基函数。

前提条件是:⎩⎨⎧≠==i j i j x j,,(01)l i .2,1,0,n j i , = 二次Lagrange 插值的基函数:()))(())((2010210x x x x x x x x x l ----=()))(())((2101201x x x x x x x x x l ----= ()))(())((1202102x x x x x x x x x l ----=7、什么是数值积分的代数精度?如果某一个求积公式对于次数不超过m 的多项式均能准确地成立,但对于m+1次多项式就不准确成立,则称该求积公式具有m 次代数精度(或代数精确度)。

数值分析上机题答案

数值分析上机题答案

数值分析上机题姓名:武均 学号:142648习题117.(上机题)舍入误差与有效数 设2211NN j S j ==-∑,其精确值为1311221N N ⎛⎫-- ⎪+⎝⎭。

(1)编制按从大到小的顺序22211121311N S N =+++---,计算N S 的通用程序。

(2)编制按从小到大的顺序2221111(1)121N S N N =+++----,计算NS 的通用程序。

(3)按两种顺序分别计算210S ,410S ,610S ,并指出有效位数。

(编制程序时用单精度) (4)通过本上机题你明白了什么? 按从大到小的顺序计算N S 的通用程序为: #include<iostream.h>float sum(float N) { float j,s,sum=0; for(j=2;j<=N;j++) { s=1/(j*j-1); sum+=s; } return sum; } 按从小到大的顺序计算N S 的通用程序为: #include<iostream.h> float sum(float N) {float j,s,sum=0; for(j=N;j>=2;j--) {s=1/(j*j-1); sum+=s; }return sum; }从大到小的顺序的值从小到大的顺序的值精确值 有效位数 从大到小 从小到大210S 0.740049 0.74005 0.740049 6 5 410S0.749852 0.7499 0.7499 4 4 610S0.7498520.7499990.74999936通过本上机题,看出按两种不同的顺序计算的结果是不相同的,按从大到小的顺序计算的值与精确值有较大的误差,而按从小到大的顺序计算的值与精确值吻合。

从大到小的顺序计算得到的结果的有效位数少。

计算机在进行数值计算时会出现“大数吃小数”的现象,导致计算结果的精度有所降低,我们在计算机中进行同号数的加法时,采用绝对值较小者先加的算法,其结果的相对误差较小。

数值分析上机题答案

数值分析上机题答案

20.(上机题)舍入误差与有效数 设∑=-=N j N j S 2211,其精确值为)11123(21+--N N 。

(1)编制按从小到大的顺序11131121222-+⋅⋅⋅+-+-=N S N ,计算N S 的通用程序。

(2)编制按从大到小的顺序1211)1(111222-+⋅⋅⋅+--+-=N N S N ,计算N S 的通用程序。

(3)按两种顺序分别计算642101010,,S S S ,并指出有效位数。

(编制程序时用单精度)(4)通过本上机题,你明白了什么?c++代码:#include <iostream.h>#include <fstream.h>void main(){float S1,S2,S=0.0,N,j;fstream myfile; //定义文件myfile.open("chap0.txt",ios::in|ios::out);for (int i=0;i<3;i++){do //读入三组数据{cout<<"请输入N 值:";cin>>N;cout<<endl;myfile<<"当N = "<<N<<" 时"<<endl<<endl;}while (N<2);S=(float) ((1.5-(1.0/N)-(1.0/(N+1)))/2);myfile<<"精确值S=:"<<S<<endl<<endl;S1=0.0;S2=0.0;for (j=2;j<=N;j++) S1=S1+(float) (1.0/(j*j-1.0));for (j=N;j>=2;j--) S2=S2+(float) (1.0/(j*j-1.0));myfile<<"按从大到小的顺序求和结果S1=:"<<S1<<endl<<endl;myfile<<"按从小到大的顺序求和结果S2=:"<<S2<<endl<<endl;}myfile.close();}输出结果:当N = 100 时精确值S=:0.740049按从大到小的顺序求和结果S1=:0.740049 有效位数6按从小到大的顺序求和结果S2=:0.74005 有效位数5当N = 10000 时精确值S=:0.7499按从大到小的顺序求和结果S1=:0.749852 有效位数 4按从小到大的顺序求和结果S2=:0.7499 有效位数 4当N = 1000000 时精确值S=:0.749999按从大到小的顺序求和结果S1=:0.749852 有效位数 4按从小到大的顺序求和结果S2=:0.749999 有效位数 6体会:通过本题,我认识到了舍入误差对计算结果的影响,所以必须选择合适的计算方法,尽量减少这种误差的影响。

数值分析上机作业1-1解析

数值分析上机作业1-1解析

数值计算方法上机题目11、实验1. 病态问题实验目的:算法有“优”与“劣”之分,问题也有“好”和“坏”之别。

所谓坏问题就是问题本身的解对数据变化的比较敏感,反之属于好问题。

希望读者通过本实验对此有一个初步的体会。

数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。

病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。

问题提出:考虑一个高次的代数多项式∏=-=---=201)()20)...(2)(1()(k k x x x x x p (E1-1)显然该多项式的全部根为l ,2,…,20,共计20个,且每个根都是单重的(也称为简单的)。

现考虑该多项式方程的一个扰动0)(19=+xx p ε (E1-2)其中ε是一个非常小的数。

这相当于是对(E1-1)中19x 的系数作一个小的扰动。

我们希望比较(E1-1)和(E1-2)根的差别,从而分析方程(E1-1)的解对扰动的敏感性。

实验内容:为了实现方便,我们先介绍两个 Matlab 函数:“roots ”和“poly ”,输入函数u =roots (a )其中若变量a 存储1+n 维的向量,则该函数的输出u 为一个n 维的向量。

设a 的元素依次为121,...,,+n a a a ,则输出u 的各分量是多项式方程0...1121=++++-n n n n a x a x a x a的全部根,而函数b=poly(v)的输出b 是一个n +1维变量,它是以n 维变量v 的各分量为根的多项式的系数。

可见“roots ”和“Poly ”是两个互逆的运算函数.ve=zeros(1,21); ve(2)=ess;roots(poly(1:20))+ve)上述简单的Matlab 程序便得到(E1-2)的全部根,程序中的“ess ”即是(E1-2)中的ε。

实验要求:(1)选择充分小的ess ,反复进行上述实验,记录结果的变化并分析它们。

数值分析上机题目详解

数值分析上机题目详解

第一章一、题目设∑=-=NN j S 2j 211,其精确值为)11123(21+--N N 。

1) 编制按从大到小的顺序11131121222-+⋯⋯+-+-=N S N ,计算S N 的通用程序。

2) 编制按从小到大的顺序1211)1(111222-+⋯⋯+--+-=N N S N ,计算S N 的通用程序。

3) 按两种顺序分别计算64210,10,10S S S ,并指出有效位数。

(编制程序时用单精度) 4) 通过本次上机题,你明白了什么?二、通用程序N=input('Please Input an N (N>1):'); AccurateValue=single((0-1/(N+1)-1/N+3/2)/2); Sn1=single(0);for a=2:N; Sn1=Sn1+1/(a^2-1); endSn2=single(0);for a=2:N; Sn2=Sn2+1/((N-a+2)^2-1); endfprintf('The value of Sn (N=%d)\n',N);fprintf('Accurate Calculation %f\n',AccurateValue); fprintf('Caculate from large to small %f\n',Sn1); fprintf('Caculate from small to large %f\n',Sn2); disp('____________________________________________________')三、结果从结果可以看出有效位数是6位。

感想:可以得出,算法对误差的传播有一定的影响,在计算时选一种好的算法可以使结果更为精确。

从以上的结果可以看到从大到小的顺序导致大数吃小数的现象,容易产生较大的误差,求和运算从小数到大数所得到的结果才比较准确。

数值分析实验(参考答案)

数值分析实验(参考答案)

数值分析上机实验学生姓名: 学号: 教师:实验1:1. 实验项目的性质和任务通过上机实验,使学生对病态问题、线性方程组求解和函数的数值逼近方法有一个初步理解。

2.教学内容和要求 1)对高阶多多项式201()(1)(2)(20)()k p x x x x x k ==---=-∏编程求下面方程的解 19()0p x x ε+=并绘图演示方程的解与扰动量ε的关系。

Matlab 程序:x=1:20;y=zeros(1,20); ve=zeros(1,21); plot(x,y,'o') hold on ; pause; for x=1:5ve(2)=10^(-x);e=roots(poly(1:20)+ve);plot(e,'*') hold on pause; end0510152025303540-20-15-10-5051015202)对2~20n =,生成对应的Hilbert 矩阵,计算矩阵的条件数;通过先确定解获得常向量b 的方法,确定方程组 n H x b =最后,用矩阵分解方法求解方程组,并分析计算结果。

Matlab 程序:for n=2:20; H=hilb(n); ca=cond(H,2) x=(1:n)'; b=H*x; [L,U]=lu(H); y=L\b;x1=U\yplot(x,x,'o',x1,x1,'*') hold on pause; end-500-400-300-200-100100200300400500-500-400-300-200-10001002003004005003)对函数 21()[1,1]125f x x x=∈-+的Chebyshev 点 (21)cos()1,2,...,12(1)kk x k n n π-==++编程进行Lagrange 插值,并分析插值结果。

Matlab 程序:function y=lagrangen(x0,y0,x) n=length(x0);m=length(x); for i=1:m z=x(i);s=0;for k=1:nL=1;for j=1:nif j~=kL=L*(z-x0(j))/(x0(k)-x0(j));endends=s+L*y0(k);endy(i)=s;endy;for n=5:20x=-1:0.01:1; y=1./(1+25*x.^2);plot(x,y,'r')hold onk=n+1:-1:1;x0=cos((2*k-1)*pi./(2*(n+1))),y0=1./(1+25*x0.^2);x=-1:0.01:1; y1=lagrangen(x0,y0,x);plot(x0,y0,'o',x,y1), pausehold off end-1-0.8-0.6-0.4-0.200.20.40.60.81-0.200.20.40.60.811.2-1-0.8-0.6-0.4-0.200.20.40.60.81-1-0.8-0.6-0.4-0.200.20.40.60.81。

数值分析上机题答案

数值分析上机题答案

数值分析上机题答案【篇一:数值分析上机试题对应参考答案】么是近似值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)20217、什么是数值积分的代数精度?如果某一个求积公式对于次数不超过m的多项式均能准确地成立,但对于m+1次多项式就不准确成立,则称该求积公式具有m次代数精度(或代数精确度)。

数值分析上机题

数值分析上机题

上机题1舍入误差与有效数: 设2211N N j S j ==-∑,其精确值为1311()221N N --+。

(1) 编制按从大到小的顺序222111+2131N 1N S =++---…,计算N S 的通用程序; (2) 编制按从小到大的顺序222111+N 1N-1121N S =++---…(),计算N S 的通用程序; (3) 按两种顺序分别计算246101010S ,S ,S ,并指出有效位数(编制程序时用单精度);(4) 通过本上机题你明白了什么?Matlab 代码:Sb=single(0); %定义数据类型为单精度Ss=single(0);y=single(0);Y=single(0);N=single(2);a=1000000;while(1) %从大到小相加Y=1/(N^2-1);Sb=Sb+Y;if(N>=a)break;endN=N+1;endfprintf('Sb[%d]=%10.9f\n',N,Sb)n=single(a);while(1) %从小到大相加y=1/(n^2-1);Ss=Ss+y;if(n<=2)break;endn=n-1;endfprintf('Ss[%d]=%10.9f\n',a,Ss)St=(3/2-1/a-1/(1+a))/2; %准确值fprintf('St[%d]=%10.9f\a',a,St)分别计算246101010S ,S ,S 值为:Sb[100]=0.740049481Ss[100]=0.740049541St[100]=0.740049505从大到小S 计算有效位数为6位,从小到大为7位;Sb[10000]=0.749852121Ss[10000]=0.749899983St[10000]=0.749900005从大到小S 计算有效位数为3位,从小到大为3位;Sb[1000000]=0.749852121Ss[1000000]=0.749999046St[1000000]=0.749999000从大到小S 计算有效位数为3位,从小到大为7位;心得:按从小到大计算的有效数字要多与按从大到小计算所得。

数值分析上机答案

数值分析上机答案

第六章 2、证明:对于矩阵A 进行分解有:000300002000020001210002000A L D U=++-⎛⎫⎛⎫⎛⎫ ⎪ ⎪ ⎪=++ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪-⎝⎭⎝⎭⎝⎭那么:对于Jacobi 迭代其迭代矩阵为:11()20033000021020001020022101102J B D L U --=+⎛⎫- ⎪-⎛⎫⎛⎫ ⎪ ⎪ ⎪⎪=+= ⎪ ⎪⎪ ⎪ ⎪- ⎪⎝⎭⎝⎭⎪- ⎪⎝⎭对于Gauss-Seidel 迭代其迭代矩阵为:11()20033000021020001002212000110012g s J B B D L U---==-⎛⎫- ⎪-⎛⎫⎛⎫ ⎪ ⎪ ⎪ ⎪=+= ⎪ ⎪ ⎪ ⎪ ⎪- ⎪⎝⎭⎝⎭ ⎪ ⎪⎝⎭(1)对于B J 我们求()J B ρ有:223111det(I )0()212112J B λλλλλλ-=-=--所以12,30,λλ==则有:()1J B ρ=< ,所以Jacobi 迭代收敛。

对于Gauss-Seidel 迭代,求其()g s B ρ-有:11()112g s g sB B ρ--∞<=< 所以Gauss-seidel 迭代收敛。

(2)并且有11()()12g s J B B ρρ-=<= 所以Gauss-Seidel 迭代收敛速度更快。

3、解:求取系数矩阵并进行分解有:4101143,50143A b -⎛⎫⎛⎫ ⎪ ⎪=--= ⎪ ⎪ ⎪ ⎪--⎝⎭⎝⎭那么SOR 迭代公式为:取初始值为(0,0,0)有:(0)1(1)()(1)()1(0,0,0)()/1,2,3T i n k k k k ii i ij i ij i ii j j i x x x b a x a x a i ω-++==⎧=⎪⎪=+--⎨⎪⎪=⎩∑∑ 那么有:对于ω=1.03有:3(1)(0)(0)111113(1)(0)(1)(0)22221122222(1)(0)(1)(0)33333333311.03()/40.25751.03()/ 1.353806251.03()/0.423894890625j j j j j j j j j x x b a x x x b a x a x a x x b a x a x a ===⎧=+-=⎪⎪⎪⎪=+--=⎨⎪⎪=+--=-⎪⎪⎩∑∑∑ 那么*(1)0.35380625x x ∞-=,条件不满足,继续迭代有:6次。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(3)通过本上机题,你明白了什么?
解:(1)编制的通用程序:
#include<iostream.h>
#include<math.h>
#define eps 0.000001 /给定容许误差
float f(float x) //定义函数f(x)
{
float f;
f=x*x*x/3-x; //f(x)的表达式;
}
当步长为0.001时,程序计算出的δ的为δ=0.774,即在区间(-0.774,0.774)内迭代序列收敛于0。
对于不同得初始值收敛于不同的根, 在(-∞,-1)内收敛于 ,在(-0.774,0.774)内收敛于 ,在(1,+∞)内收敛于 ,但在内(0.774,1)和(-1,0.774)均可能收敛于 和 。 , , 分别为方程的精确解。
数值分析上机题
姓名:陈作添学号:040816
习题1
20.(上机题)舍入误差与有效数
设 ,其精确值为 。
(1)编制按从大到小的顺序 ,计算 的通用程序。
(2)编制按从小到大的顺序 ,计算 的通用程序。
(3)按两种顺序分别计算 , , ,并指出有效位数。(编制程序时用单精度)
(4)通过本上机题,你明白了什么?
for(i=1;i<=n;i++)
(3)本编程之中,你提高了哪些编程能力?
程序为:
#include<iostream.h>
#include<math.h>
void main(void)
{
int i,j,n,k,q;
float ቤተ መጻሕፍቲ ባይዱ[10][11],s[10],s1[10];
cout<<"请输入n的值:";
cin>>n;
cout<<"输入数组a:"<<endl;
void delay(int n) //定义延时函数
{for(n=10000;n>0;n--);}
#define eps 0.000001
float f(float x) //定义函数f(x)
{
float f;
f=x*x*x/3-x; //f(x)的表达式;
return(f);
}
float df(float x) //定义函数df(x),计算f(x)的导函数
cin>>x0;
do
{
a=-f(x0)/df(x0);
x1=x0+a;
k++;
x0=x1;
}
while(fabs(a)>eps);
cout<<k<<'\t'<<x0;
//输出迭代的次数和根值
}
(2)计算迭代序列收敛于根 的尽可能大的 的函数为:
#include<iostream.h>
#include<math.h>
type1=fabs(x1-x0); //调试值用
cout<<"count="<<count<<'\t'<<"type="<<type<<'\t'<<"type1="<<type1<<'\n';
if(fabs(x1-x0)<eps)
return 1;
x0=x1;
delay(30000); //调试值用
0.7499
0.7499
4
4
0.749852
0.749999
0.749999
3
6
通过本上机题,看出按两种不同的顺序计算的结果是不相同的,按从大到小的顺序计算的值与精确值有较大的误差,而按从小到大的顺序计算的值与精确值吻合。从大到小的顺序计算得到的结果的有效位数少。计算机在进行数值计算时会出现“大数吃小数”的现象,导致计算结果的精度有所降低,我们在计算机中进行同号数的加法时,采用绝对值较小者先加的算法,其结果的相对误差较小。
}
return 0;
}
void main(void)
{
float delta=0;
int flag=1;
while(flag==1)
{
cout<<"方程的根为:"<<'\n';
delta+=eps;
flag=judgement(delta);
}
cout<<"输出方程根收敛的区间值:\n";
cout<<delta-eps; //输出收敛的区间值
分析:对于不同的初值,迭代序列会收敛于不同的根,所以在某个区间内求根对于初值的选取有很大的关系。产生上述结果的原因是区间不满足大范围收敛的条件。
习题3
35.(上机题)列主元三角分解法对于某电路的分析,归结为求解线性方程组RI=V。
(1)编制解n阶线性方程组Ax=b的列主元三角分解法的通用程序;
(2)用所编制的程序解线性方程组RI=V,并打印出解向量,保留五位有效数;
{
float df;
df=x*x-1; //f(x)导函数的表达式;
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);
按从大到小的顺序计算 的通用程序为:
#include<iostream.h>
float sum(float N)
{
float j,s,sum=0;
for(j=2;j<=N;j++)
{
s=1/(j*j-1);
sum+=s;
}
return sum;
}
按从小到大的顺序计算 的通用程序为:
#include<iostream.h>
float sum(float N)
{
float j,s,sum=0;
for(j=N;j>=2;j--)
{
s=1/(j*j-1);
sum+=s;
}
return sum;
}
从大到小的顺序的值
从小到大的顺序的值
精确值
有效位数
从大到小
从小到大
0.740049
0.74005
0.740049
6
5
0.749852
习题2
20.(上机题)Newton迭代法
(1)给定初值 及容许误差 ,编制Newton法解方程 根的通用程序。
(2)给定方程 ,易知其有三个根 , , 。
1.由Newton方法的局部收敛性可知存在 ,当 时,Newton迭代序列收敛于根 。试确定尽可能大的 。
2.试取若干初始值,观察当 , , , , 时Newton序列是否收敛以及收敛于哪一个根。
return(f);
}
float df(float x) //定义函数df(x),计算f(x)的导函数
{
float df;
df=x*x-1; //f(x)导函数的表达式;
return (df);
}
void main(void)
{
float x0,x1,a;
int k=0;
cout<<"请输入初值x0:";
相关文档
最新文档