1、 first(10000):A =0.749900004999506N1 =13B =0.7499000049995N2 =323 first(1000000)A =0.749999000000522B =0.7499990000005分析:在做加法运算时,按照从小到大计算的顺序得到的结果要比按从大到小计算得到的结果有效数字位数更多。二、解线性方程组 1分别Jacobi迭代法和Gauss-Seidel迭代法求解线性方程组。迭代法计算停止的条件为:。(1)Jacobi迭代法程序代码:clc;clear;A=-2 1 0 0;1 -2 1 0;0 1 -2 1;0 0 1 -2;b=-1 0 0
2、0;N=100;n = size(A,1);D = diag(diag(A);L = tril(-A,-1);U = triu(-A,1);Tj = inv(D)*(L+U);cj = inv(D)*b;tol = 1e-06;k = 1;format longx = zeros(n,1);while k = N x(:,k+1) = Tj*x(:,k) + cj; disp(k); disp(x = );disp(x(:,k+1); if norm(x(:,k+1)-x(:,k) tolThe procedure was successful)Condition |x(k+1) - x(k)
3、| tol was met after k iterations k = k+1;结果输出The procedure was successful tol was met after k iterations 60x = 0.79999879906731 0.59999842795870 0.39999805685009 0.199*505(2)Gauss-Seidel迭代法程序代码:Tg = inv(D-L)*U;cg = inv(D-L)*b;,k+1) = Tg*x(:,k) + cg; 31 0.79999921397935 0.59999897108561 0.39999916759
4、077 0.199*539GS法应用了上一步计算出来的较精确的值,所以可以用较少的迭代步数满足误差要求。2. 用Gauss列主元消去法、QR方法求解如下方程组:(1)Gauss列主元消去法程序代码:A=1 2 1 2;2 5 3 -2;-2 -2 3 5;1 3 2 3;b=4 7 -1 0N=length(A);x=zeros(N,1);y=zeros(N,1);c=0;d=0;A(:,N+1)=b;for k=1:N-1 for i=k:4 if cabs(A(i,k) d=i;c=abs(A(i,k); end y=A(k,: A(k,:)=A(d,: A(d,:)=y; for i=k
5、+1:N c=A(i,k); for j=1:N+1 A(i,j)=A(i,j)-A(k,j)*c/A(k,k);end b=A(:,N+1); x(N)=b(N)/A(N,N); for k=N-1:1 x(k)=(b(k)-A(k,k+1:N)*x(k+1:N)/A(k,k); ans = 18.00000000000000 -9.57142857142857 6.00000000000000 -0.42857142857143(2)QR方法:程序代码Q,R=qr(A)y=Q*b;x=RyQ = -0.31622776601684 -0.04116934847963 -0.75164602
6、800283 0.57735026918962 -0.63245553203368 -0.49403218175557 -0.150*056 -0.57735026918963 0.63245553203368 -0.74104827263336 -0.22549380840085 -0.00000000000000 -0.31622776601684 -0.45286283327594 0.60131682240226 0.57735026918963R = -3.16227766016838 -6.00832755431992 -0.94868329805051 2.84604989415
7、154 0 -2.42899156029822 -4.65213637819829 -4.158*272 0 0 -0.67648142520255 -0.52615221960200.0414*x = 17.99999999999989 -9.57142857142851 5.99999999999997Gauss列主元消去法和QR方法结果是一致的。三、非线性方程的迭代解法1用Newton迭代法求方程的根,计算停止的条件为:;Newton法程序代码:syms xf=inline(exp(x)+2(-x)+2*cos(x)-6df=inline(exp(x)-2(-x)*log(2)-2*si
8、n(x)x0=-3;delta=1e-06;while 1 x1=x0-feval(f,x0)/feval(df,x0); err=abs(x1-x0); x0=x1; y=feval(f,x0); if (erreps n=n+1; h=(b-a)/n; I1=I2; I2=0; for i=0:n-1 x=a+h*i; x1=x+h; I2=I2+(h/2)*(subs(sym(f),findsym(sym(f),x)+. subs(sym(f),findsym(sym(f),x1);I=I2step=nI = 1.38654458753674step =53该算法运算精度高,但是计算时间
9、长、计算量大。(2)Romberg公式TOL=1e-05;A=zeros(20,20);A(1,1)=(b-a)*(feval(f,a)+feval(f,b)/2;A(2,1)= A(1,1)/2+h*feval(f,a+h);A(2,2)=(4*A(2,1)-A(1,1)/3;errest =abs(A(2,2)-A(1,1)/2);i=2;while(errestTOL) h =h/2; sum=0.0;2:2(i-1)-1 sum=sum+feval(f,a+j*h); end; A(i,1)=A(i-1,1)/2+h*sum; for j=2:i power=4(j-1); A(i,j
10、)=(power*A(i,j-1)-A(i-1,j-1)/(power-1); errest=abs(A(i,i)-A(i-1,i-1)/2(i-1);end;if (nargout =0) s=sprintf(tt approximate value of integral: t %.12f n,A(i,i);%s tt error estimate: ttttt %.4e n,s,errest);%s tt number of function evaluations: t %d n,. s,2(i-1)+1); disp(s)else approx=A(i,i); approximate
11、 value of integral: 1.386297441871 error estimate: 8.7527e-006 number of function evaluations: 17应用加速法可以使之前不收敛的式子收敛,有效的加快了收敛速度。五、插值与逼近 1给定上的函数,请做如下的插值逼近:构造等距节点分别取的Lagrange插值多项式;构造分段线性取取Chebyshev多项式的零点:作插值节点构造的插值多项式和上述的插值多项式均要求画出曲线图形(用不同的线型或颜色表示不同的曲线)。function Lagrangeclose all;for i=1:3; if i=1 N=5;
12、 elseif i=2 N=8; else N=10;1/(1+25*x2)x1=zeros(1,N+1);a=-1;b=1;N+1 x1(i)=a+(i-1)*(b-a)/N; y1(i)=feval(f,x1(i);ff=0; for i=1:f=1;i-1 f=f*(x-x1(j)/(x1(i)-x1(j); for j=i+1: ff=f*y1(i)+ff; f=1;ff=collect(ff,x);ff=vpa(ff,4); y=ff; p=ezplot(y,a,b); grid YLIM(-0.1 0.6); if N=5 set(p,Color,blackLineStyle- l
13、agrange_5=y elseif N=8r lagrange_8=yb lagrange_10=y hold on; xlabel(xylabel(y title(y=p(x)hold on;Lag_Cheb();x=-1:0.01:1;y=1./(1+25*x.2);acu=plot(x,y);grid on;hold onset(acu,m-legend(N=5N=8N=10Cheb,N=10 %function Lag_Cheb()N=10; x1(i)=cos(2*i-1)*pi/(2*N); yy=ff;yy=ff;lagrange_chebshev_10=yycheb=ezpl
14、ot(yy,a,b); grid onYLIM(-0.1 0.6);set(cheb,glagrange_5 =.5673+1.202*x4-1.731*x2lagrange_8 =1.+53.69*x8-102.8*x6+61.37*x4-13.20*x2lagrange_10 =1.-220.9*x10+494.9*x8-381.4*x6+123.4*x4-16.86*x2lagrange_chebshev_10 =.7413-5.359*x10-.4e-2*x9+18.96*x8-.1321*x7-25.78*x6+.10*x5+16.81*x4+.5e-2*x3-5.336*x2+.5
15、288e-3*x(1)拉格朗日插值法随着插值节点增多而更加接近真实曲线,但是还是会在区间-1,-0.4及0.4,1上,由于高次振荡产生容格现象。(2)分段插值法则优于前者,因为分段插值在每个小区间上都可以最大限度的满足边界条件。(3)利用契比雪夫迭代法可以更接近真实曲线。2已知函数值56789102.513.304.044.705.225.545.785.405.575.705.80和边界条件:求三次样条插值函数并画出其图形程序实现代码:function Spline3_1(x,y,df0,dfn)format shortx=0 1 2 3 4 5 6 7 8 9 10;y=2.51 3.30
16、 4.04 4.70 5.22 5.54 5.78 5.40 5.57 5.70 5.80;plot(x,y,g*MarkerSize,15);df0=1;dfn=0;n=length(x);h=zeros(n-1,1);lan=zeros(n-2,1);mu=zeros(n-2,1);g=zeros(n-2,1);m=zeros(n,1);m(1)=df0;m(n)=dfn;n-1 h(i)=x(i+1)-x(i);n-2 mu(i)=h(i)/(h(i+1)+h(i); lan(i)=h(i+1)/(h(i+1)+h(i); g(i)=3*(mu(i)*(y(i+2)-y(i+1)/h(i
17、+1)+lan(i)*(y(i+1)-y(i)/h(i);A=zeros(n-2,n-2);A(1,1)=2;A(1,2)=mu(1);A(n-2,n-2)=lan(n-2);A(i,i)=2;A(i,i-1)=mu(i);A(i-1,i)=lan(i);g(1)=g(1)-lan(1)*df0;g(n-2)=g(n-2)-mu(n-2)*dfn;b=Ag; m(i)=b(i-1);syms z xx=x(i):x(i+1); sx1=y(i)*(xx-x(i+1).2.*(h(i)+2*(xx-x(i)/h(i)3; sx2=y(i+1)*(xx-x(i).2.*(h(i)-2*(xx-x(i+1)/h(i)3; sx3=m(i)*(xx-x(i+1).2.*(xx-x(i)/h(i)2; sx4=m(i+1)*(xx-x(i).2.*(xx-x(i+1)/h(i)2; sx=sx1+sx2+sx3+sx4; z1=y(i)*(z-x(i+1).2.*(h(i)+2*(z-x(i)/h(i)3; z2=y(i+1)*(z-x(i).2.*(h(i)-2
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1