MATLAB 编程题库 1.下面的数据表近似地满足函数21cxbax y ++=,请适当变换成为线性最小二乘问题,编程求最好的系数c b a ,,,并在同一个图上画出所有数据和函数图像.625.0718.0801.0823.0802.0687.0606.0356.0995.0628.0544.0008.0213.0362.0586.0931.0ii y x ----解:x=[-0.931 -0.586 -0.362 -0.213 0.008 0.544 0.628 0.995]'; y=[0.356 0.606 0.687 0.802 0.823 0.801 0.718 0.625]'; A=[x ones(8,1) -x.^2.*y]; z=A\y;a=z(1); b=z(2); c=z(3); xh=-1:0.1:1;yh=(a.*xh+b)./(1+c.*xh.^2); plot(x,y,'r+',xh,yh,'b*')2.若在Matlab工作目录下已经有如下两个函数文件,写一个割线法程序,求出这两个函数10 的近似根,并写出调用方式:精度为10解:>> edit gexianfa.mfunction [x iter]=gexianfa(f,x0,x1,tol)iter=0;while(norm(x1-x0)>tol)iter=iter+1;x=x1-feval(f,x1).*(x1-x0)./(feval(f,x1)-feval(f,x0));x0=x1;x1=x;end>> edit f.mfunction v=f(x)v=x.*log(x)-1;>> edit g.mfunction z=g(y)z=y.^5+y-1;>> [x1 iter1]=gexianfa('f',1,3,1e-10)x1 =1.7632iter1 =6>> [x2 iter2]=gexianfa('g',0,1,1e-10)x2 =0.7549iter2 =83.使用GS 迭代求解下述线性代数方程组:123123123521242103103x x x x x x x x x解:>> edit gsdiedai.mfunction [x iter]=gsdiedai(A,x0,b,tol) D=diag(diag(A)); L=D-tril(A); U=D-triu(A); iter=0; x=x0;while((norm(b-A*x)./norm(b))>tol) iter=iter+1; x0=x;x=(D-L)\(U*x0+b); end>> A=[5 2 1;-1 4 2;1 -3 10]; >> b=[-12 10 3]'; >>tol=1e-4; >>x0=[0 0 0]';>> [x iter]=gsdiedai(A,x0,b,tol); >>x x =-3.0910 1.2372 0.9802 >>iter iter = 64.用四阶Range-kutta 方法求解下述常微分方程初值问题(取步长h=0.01),(1)2xdyy e xy dxy解:>> edit ksf2.mfunction v=ksf2(x,y) v=y+exp(x)+x.*y;>> a=1;b=2;h=0.01; >> n=(b-a)./h; >> x=[1:0.01:2]; >>y(1)=2;>>fori=2:(n+1)k1=h*ksf2(x(i-1),y(i-1));k2=h*ksf2(x(i-1)+0.5*h,y(i-1)+0.5*k1); k3=h*ksf2(x(i-1)+0.5*h,y(i-1)+0.5*k2); k4=h*ksf2(x(i-1)+h,y(i-1)+k3); y(i)=y(i-1)+(k1+2*k2+2*k3+k4)./6; end >>y调用函数方法>> edit Rangekutta.mfunction [x y]=Rangekutta(f,a,b,h,y0) x=[a:h:b]; n=(b-a)/h; y(1)=y0; fori=2:(n+1)k1=h*(feval(f,x(i-1),y(i-1)));k2=h*(feval(f,x(i-1)+0.5*h,y(i-1)+0.5*k1)); k3=h*(feval(f,x(i-1)+0.5*h,y(i-1)+0.5*k2)); k4=h*(feval(f,x(i-1)+h,y(i-1)+k3)); y(i)=y(i-1)+(k1+2*k2+2*k3+k4)./6; end>> [x y]=Rangekutta('ksf2',1,2,0.01,2); >>y5.取0.2h =,请编写Matlab 程序,分别用欧拉方法、改进欧拉方法在12x ≤≤上求解初值问题。
3,(1)0.4dy yx dx x y解:>> edit Euler.mfunction [x y]=Euler(f,a,b,h,y0) x=[a:h:b]; n=(b-a)./h; y(1)=y0; fori=2:(n+1)y(i)=y(i-1)+h*feval(f,x(i-1),y(i-1)); end>> edit gaijinEuler.mfunction[x y]=gaijinEuler(f,a,b,h,y0) x=[a:h:b]; n=(b-a)./h; y(1)=y0; fori=2:(n+1)y1=y(i-1)+h*feval(f,x(i-1),y(i-1)); y2=y(i-1)+h*feval(f,x(i),y1); y(i)=(y1+y2)./2; end>> edit ksf3.mfunction v=ksf3(x,y) v=x.^3-y./x;>>[x y]=Euler('ksf3',1,2,0.2,0.4) x =1.0000 1.2000 1.4000 1.6000 1.80002.0000 y =0.4000 0.5200 0.7789 1.2165 1.8836 2.8407>> [x y]=gaijinEuler('ksf3',1,2,0.2,0.4) x =1.0000 1.2000 1.4000 1.6000 1.80002.0000 y =0.4000 0.5895 0.9278 1.4615 2.2464 3.34666.请编写复合梯形积分公式的Matlab程序,计算下面积分的近似值,区间等分20n=。
编写辛普森积分公式的Matlab程序,计算下面积分的近似值,区间等分10n=。
12 011dxx 、11sin xdxx解:>> edit tixingjifen.mfunction s=tixingjifen(f,a,b,n)x=linspace(a,b,(n+1));y=zeros(1,length(x));y=feval(f,x)h=(b-a)./n;s=0.5*h*(y(1)+2*sum(y(2:n))+y(n+1));end>> edit simpson.mfunction I=simpson(f,a,b,n)h=(b-a)/n;x=linspace(a,b,2*n+1);y=feval(f,x);I=(h/6)*(y(1)+2*sum(y(3:2:2*n-1))+4*sum(y(2:2:2*n))+y(2*n+1));>> edit ksf4.mfunction v=ksf4(x)v=1./(x.^2+1);>>tixingjifen('ksf4',0,1,20)ans =0.7853>>simpson('ksf4',0,1,10)ans =0.7854>> edit ksf5.mfunction v=ksf5(x)if(x==0)v=1;elsev=sin(x)./x;end(第二个函数‘ksf5’调用求积函数时,总显示有错误:“NaN”,还没调试好。
见谅!)7.用Jacobi 迭代方法对下面方程组求解,取初始向量(0)(3,2,1)T x=-。
123244233334422x x x -⎡⎤⎛⎫⎛⎫ ⎪ ⎪⎢⎥=- ⎪ ⎪⎢⎥ ⎪ ⎪⎢⎥-⎣⎦⎝⎭⎝⎭解:>>edit Jacobi.mfunction[x iter]=Jacobi(A,x0,b,tol) D=diag(diag(A)); L=D-tril(A); U=D-triu(A); x=x0; iter=0;while(norm(A*x-b)/norm(b)>tol) iter=iter+1; x0=x;x=D\((L+U)*x0+b); end>> A=[2 4 -4;3 3 3;4 4 2]; >> b=[2 -3 -2]'; >>x0=[3 2 -1]';>> [x,iter]=Jacobi(A,x0,b,1e-4) x = 1 -1 -1 iter =38.用牛顿法求解方程cos 20x x +=在02x =附近的根。
解:>> edit Newton.mfunction [x iter]=Newton(f,g,x0,tol) iter=0; done=0 while ~donex=x0-feval(f,x0)/feval(g,x0); done=norm(x-x0)<=tol; iter=iter+1;if ~done,x0=x; end end>> edit ksf6.m function v=ksf6(x) v=x*cos(x)+2;>> edit ksg6.m function z=ksg(y) z=y.^5+y-1;>> [x iter]=Newton('ksf6','ksg6',2,1e-4) x =2.4988 iter = 39.分别用改进乘幂法、反幂法计算矩阵A 的按模最大特征值及其对应的特征向量、按模最小特征值及其对应的特征向量。