《常州大学数值分析作业(共六章)》由会员分享,可在线阅读,更多相关《常州大学数值分析作业(共六章)(19页珍藏版)》请在金锄头文库上搜索。
1、第一章:clearf=(x)1/2-x2/24;f(0.012)ans = 0.50009.设,给出计算函数值的一个合适算法,并在字长m给定的,十进制计算机上给出数值计算结果。解:由 得 10. 字长为5的十进制计算机上计算和,并与的精确值1.0075376410479比较,说明差异存在理由,其中,。%编写m文件使用digit函数设置字长%function y=digit(x,m)k=max(size(x);y=x;for i=1:k if x(i)0 sign=-1; else sign=1; end x(i)=abs(x(i); p=0; if x(i)eps while x(i)=1 w
2、hile x(i)=1 x(i)=x(i)/10; p=p+1; end end y(i)=round(x(i)*10m)/10m; y(i)=sign*y(i)*10p;endreturnclearf=(x)digit(digit(exp(x)-1,5)/x,5);g=(x)digit(digit(1,5)+digit(x/2,5)+digit.(digit(x2,5)/6,5)+digit(digit(x3,5)/24,5),5);exc=1.0075376410479;f(0.015)g(0.015)err1=f(0.015)-excerr2=g(0.015)-excans = 1.00
3、75ans = 1.0075err1 = -3.7641e-05err2 = -3.7641e-05f=(x)digit(digit(exp(x)-1,9)/x,9);g=(x)digit(digit(1,9)+digit(x/2,9)+digit.(digit(x2,9)/6,9)+digit(digit(x3,9)/24,9),9);err1=f(0.015)-excerr2=g(0.015)-excerr1 = -1.0479e-09err2 = -1.0479e-09解:字长为5时的误差很大,这是因为设置的字长有限,就不可避免的使舍入误差不断积累。把字长改为9时,误差已经大幅度减小。这
4、说明,加大字长可以显著减小误差。11. 举例介绍数组矩阵常见运算。解:举例如下A*Bans = 30 30 30 30 70 70 70 70 110 110 110 110 150 150 150 150A.*Bans = 1 2 3 4 10 12 14 16 27 30 33 36 52 56 60 64clearA=1:4;5:8;9:12;13:16B=1,1,1,1;2,2,2,2;3,3,3,3;4,4,4,4AA = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16B = 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4ans = 1
5、5 9 13 2 6 10 14 3 7 11 15 4 8 12 16 A.2ans = 1 4 9 16 25 36 49 64 81 100 121 144169 196 225 256A2ans = 90 100 110 120 202 228 254 280 314 356 398 440 426 484 542 600A+Bans = 2 3 4 5 7 8 9 10 12 13 14 15 17 18 19 20 A-Bans = 0 1 2 3 3 4 5 6 6 7 8 9 9 10 11 12 12.对任意给定的实数a、b、c、试编写Matlab程序,求方程的根。解:利用教
6、材例11的方法: 当b0时,。cleara=input(输入a=);b=input(输入b=);c=input(输入c=);d=b2-4*a*cif b=0 x1=(-b-d0.5)/2*a x2=-2*c/(d0.5+b)else b0 x1=-2*c/(d0.5-b) x2=(-b+d0.5)/2*aend 当b0时,。输入a=1输入b=5输入c=2d = 17x1 = -4.5616x2 = -0.4384输入a=1输入b=2输入c=1d = 0x1 = -1x2 = -1输入a=2输入b=2输入c=1d = -4x1 = -2.0000 - 2.0000ix2 = -0.5000 +
7、0.5000i13. 利用及,给出一个计算的方法,根据此方法编写程序,给出的至少有10位有效数字的近似值。clearx=3(-0.5);y=atan(x) ; %精确值%s=0 ; %计算值%for k=1:2:100; s=s+(-1)(k+1)/2)*(xk)/k;err=y-s;m=abs(err)if m=1e-11 breakendendpi=6*s解:根据题中所给公式,容易得到:14. 分别利用下式给出计算ln2的近似方法,编写相应程序并比较算法运行情况。clearx=1;s=0;for k=1:100; s=s+(-1)(k+1)*(xk)/k;endy=s %计算值%g=log
8、(2) %真实值%err=y-g %绝对误差%y = 0.6882g = 0.6931err = -0.0050clearx=1/3;s=0;for k=1:2:100; s=s+(x)k)/k;endy=2*s %计算值%g=log(2) %真实值%err=y-g %绝对误差%y = 0.6931g = 0.6931err = -2.2204e-16解:由运行结果可知,方法二的绝对误差比方法一的误差要小得多。这是因为方法一给出的计算公式含有相近数相减项,损失了有效数字。而方法二给出的计算公式避免了相近数相减,具有较好的精度。第二章:function x,iternum,flag=jacobi
9、(A,b,x0,delta,max1)%检验输入参数,初始化if nargin2,error(more augments are needed);endif nargin3,x0=zeros(size(b);endif nargin4,delta=1e-13;endif nargin5,error(incorrect number of input);endn=length(b);x=0*b;flag=0;iternum=0;%用Jacobi迭代法解方程组for k=1:max1 iternum=iternum+1; for i=1:n if abs(A(i,i)eps error(A(i,i
10、) equal to zero,divided by zero); end x(i)=(b(i)-A(i,1:i-1,i+1:n)*x0(1:i-1,i+1:n)/A(i,i); end err=norm(x-x0); relerr=err/(norm(x)+eps); x0=x; if (errdelta)|(relerrdelta) flag=1; break; endendif flag=1 disp(The Jacobi method converges.) x=x;else disp(The Jacobi method does not converge with . ,num2st
11、r(max1), iterations)endreturn20.(1)用Jacobi迭代法解方程组AX=b.A=1 2 -2;1 1 1;2 2 1; b=1;1;1; x,iternum,flag=jacobi(A,b)输出结果为:The Jacobi method converges.ans = -3 3 1iternum =4flag = 120. (1)用Gauss-Seidel迭代法解方程组AX=b.function x,iternum,flag=gseid(A,b,x0,delta,max1)%检验输入参数,初始化if nargin2,error(more augments are needed);endif nargin3,x0=zeros(size(b);endif nargin4,delta=