数值分析上机题参考答案

合集下载

数值分析上机实习题

数值分析上机实习题

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教学】>一、课程基本信息二、课程目的和任务“数值分析”是理工科院校计算数学、力学、物理、计算机软件等专业的学生必须掌握的一门重要的基础课程。

  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:";
相关文档
最新文档