matlab复习资料附答案(12页).doc
-matlab复习资料附答案-第 12 页一、简答1说明下述函数的功能size(A) 查询矩阵A的维数 length(x) 查询数组x长度(即行数或列数中的较大值)ones(m,n) 产生m行n列的元素全部为一的矩阵zeros(m,n) 生成m行n列的全零矩阵rand(m,n) 产生m行n列的随机矩阵flipud(A) 按上下方向翻转矩阵A中的元素fliplr(A) 按左右方向翻转矩阵A中的元素diag(A) 建立A的对角矩阵diag(x) 获取x的对角向量plot(x,y,str) 二维图形绘制legend(str1,str2) 为图形添加由str1、str2表示的图例linspace(a,b,n) 构造线性分布的向量 rem(m,n) 求m除以n的余数any(x) 测试向量中是否有真元素all(x) 测试向量中所有元素是否为真round(x) 取与真值最接近的整数fix(x) 向零方向取整数strcmp(str1,str2) 字符串比较 strcat(str1,str2) 字符串连接strrep(str1,str2, str3) 将str1中的子串str2换成str3inline(str) 生成以str为表达式的内联函数roots(p) 多项式求根polyval(p,x) 多项式求值polyfit(x,y,n) 数据的多项式拟合norm(x,p) 计算向量x(矩阵A)的p范数 (p=2默认)det(A) 求矩阵A的行列式 rank(A) 求矩阵A的秩inv(A) 矩阵A求逆sum(x) 对向量x中各元素求和min(x) 求向量x中最小元素 max(x) 求向量x中最大元素sort(x) 对向量x中各元素排序mean(x) 求向量x中各元素均值2说明下述常量的含义pi 圆周率 pi=3.141592653589793 inf 无穷大Inf(Infinity)nan 不确定数NaN(Not-a-Number)i(j) 虚数单位Imaginary unit33realmax 最大实数1.797693134862316e+308realmin 最小正实数2.225073858507201e-308intmax 最大整数2147483647intmin 最小整数-2147483648eps 浮点数精度2.220446049250313e-0163生成随机逻辑矩阵和;对矩阵和作与、或、非以及异或运算,并将结果分别赋给四个变量名;选择其中两个测试逻辑函数any和all。>> A=rand(3,4)>> B=rand(3,4)>> a=A&B>> b=A|B>> c=A>> d=xor(A,B)>> any(a)>> all(c)3注释下面代码并写出结果:>> A=1,0,3;-1,3,2;0,0,-5; >> B=6,2,4;3,0,7;2,0,1;>> A&B 对矩阵和作与运算 >> A|B 对矩阵和作或运算 >> A 对矩阵和作非运算 >> xor(A,B) 对矩阵和作异或运算 >> any(A) 测试A中是否有真元素 >> all(A) 测试A中所有元素是否为真 >> A>1 判断A中各元素是否大于1,成立在对应位置返回“1”,否则返回“0”>> max(A,1) 输出A中的的最大值,若小于等于1在对应位置返回“1”>> min(A) 返回一个行向量,向量第i元素是矩阵A中的第i列的最小值结果:>>A&B ans = 1 0 1 1 0 1 0 0 1>>A|Bans = 1 1 1 1 1 1 1 0 1>>Aans = 0 1 0 0 0 0 1 1 0>>xor(A,B)ans = 0 1 0 0 1 0 1 0 0>> any(A)ans = 1 1 1>> all(A)ans = 0 0 1>> A>1ans = 0 0 1 0 1 1 0 0 0>> max(A,1)ans = 1 1 3 1 3 2 1 1 1>> min(A)ans = -1 0 -54. 输入向量,按从大到小的顺序排序。>> x=1,5,-9,6,0;>> y=sort(x);>> x=fliplr(y)5. 生成一个三阶方阵,写一段代码求其对角矩阵。>> A=rand(3,3);>> D=diag(diag(A)6 利用符号计算,。>> syms x>> y=x*sin(x);>> int(y,x)7. 利用多项式函数和eig求3阶Pascal矩阵的特征值,并比较二者的结果。>> A=pascal(3);>> C=poly(A);>> r=roots(C)>> B=eig(A)比较:得到的矩阵的特征值的数值相同,顺序不同8. 说明字符串比较函数strcmp和strncmp的差别,并设计一个例子。strcmp : 比较两个字符串是否相同strncmp : 比较两个字符串的前n个字符是否相同>> str1='hello'>> str2='heltu'>> a=strcmp(str1,str2)>> b=strncmp(str1,str2,3)9 求数组中所有绝对值大于3的元素的个数。>> A=-4 -2 0 2 4;-3 -1 1 3 5; >> B=abs(A)>3; >>sum(sum(B);9找出数组中所有绝对值大于3的元素。 >> A=-4 -2 0 2 4;-3 -1 1 3 5;>> A(find(A>3|A<-3)10 生成字符串e=(e的数值)。>> sprintf('e=%f',exp(1)二、绘图1.用inline定义函数;并用plot绘制其在上的图像。>> x=-pi:0.1:pi;>> y=inline('x.*exp(-x).*sin(x)')>> y=y(x);>> plot(x,y)2. 将绘图窗口分成一行两列四个子窗口,第一个窗口用mesh绘制旋转抛物面,第二个窗口用plot3绘制等速螺线。>> subplot(1,2,1);>> x,y=meshgrid(-8:1:8);>> z=sqrt(x.2+y.2); >> mesh(z);>> subplot(1,2,2);>> t=0:0.01:27;>> x=cos(t);>> y=sin(t);>> z=2*t;>> plot3(x,y,z)2将绘图窗口分成两行两列四个子窗口,第一个窗口用mesh绘制,第二个窗口用surf绘制,第三个窗口用plot3绘制,第四个窗口用ezplot绘制。>> subplot(2,2,1);>> x,y=meshgrid(-8:1:8);>> z=sqrt(x.2+y.2); >> mesh(z);>> subplot(2,2,2);>> surf(x,y,z)>> subplot(2,2,3);>> z=sqrt(2*(x.2+y.2);>> plot3(x,y,z)>> subplot(2,2,4);>> axis(-2 2 -2 2);>> ezplot('x2+y2=1')3 利用plot在同一个绘图窗口中在内绘制和多项式函数的图形。>> x=-2*pi:0.1:2*pi;>> y=x.*sin(x);>> p=2*x.2+3*x+4;>> plot(x,y,:);>> hold on>> plot(x,p);3用plot在内绘制的图形;利用hold命令保持绘图窗口;在相同的范围内绘制的图形。>> x=-2*pi:0.1:2*pi;>> y1=x.*sin(x);>> y2=exp(x);>> plot(x,y1,:);>> hold on>> axis(-8 8 -6 6);>>plot(x,y2);三、程序1. 利用Newton迭代求解非线性方程。Newton迭代公式,其中待求解方程为。方法一(老师讲的)>>editfunction y=fun(x)y=exp(x)-x/5;>>editfunction y=dfun(x)y=exp(x)-1/5;>>editfunction x= newtn(fun,dfun,x0)for i=1:1000 x=x0-fun(x0)/dfun(x0); if abs(fun(x)<1.0e-6 break end x0=x;end>>x,k=newtn(fun,dfun,-1)>>a,b roots(fun,dfun,-1)方法二(王伟)>>editfunction x=Newt(p)x0=0;x1=polyval(p,x0);q=polyder(p);for i=1:50 x=x1-polyval(p,x1)/polyval(q,x1); if abs(x-x1)<1.0e-6 break end x1=x;end>> p=1 5 3>> Newt(p)>> roots(p)2 编写一个函数式文件计算,其中为输入变量。 function s=Jc(n)n=input('请输入n的值:') s=1;k=1; while k<=n s=s*k; k=k+1; end2如何编写一个函数文件,实现 n!,并计算1!+2!+20!function r = AddJc(n)n=input('请输入n的值:')%阶乘求和k=1;r=0;while k<=n r = r + Jc(k) k=k+1;end function s=Jc(m) s=1;k=1; while k<=m s=s*k; k=k+1; end3. 使用随机投点法计算定积分,以投点个数为输入参数。<< edit function I=myint(n)m=0;for i=1:n x=rand; y=3*rand; if y<exp(x2) m=m+1; endendI=3*m/n;>> I=myint(500)四、应用问题1>>editfunction z=mfun(x)z=3*x(1)2+3*x(2)2-x(1)3); >>edit function z,c=ed(x) c=; z=x(1)2+x(2)2-16;>> x,fval,exitflag=fmincon(mfun,2,1,ed)>>editfunction z=fun(x) z=exp(2*x(1)*(x(1)+x(2)2+2*x(2);>> x,z=fminsearch(fun,-1,-1)将得到的极小值取负就可以得到极大值>> y=dsolve('Dy=y+sin(t)','y(0)=0','t')>>editfunction dy=dd(t,x)dy=x(1)+x(2)+sin(t); x(1)-x(2)+cos(t);>> X,Y=ode45(dd,0,3,0,0)5. 用电压=10伏的电池给电容器充电,电容器上时刻的电压为其中是电容器的初始电压,是充电常数,试由下面一组,数据确定和。(秒)0.51234579(伏)6.366.487.268.228.668.999.439.63>> t=0.5 1 2 3 4 5 7 9; >> v=6.36 6.48 7.26 8.22 8.66 8.99 9.43 9.63;>>V=10 >> y=log(V-v) >> p=polyfit(t,y,1) >>v0=v-exp(p(2)>>m=-1/p(1)6变量和满足函数关系,通过实验测的数据:2345710143330283026302500233022602200写出函数拟合的数学模型以及Matlab代码。>> t=2 3 4 5 7 10 14; >> y=3330 2830 2630 2500 2330 2260 2200;>>A=ones(size(t),exp(-t/4),exp(-t/1.5),exp(-t/0.8) >>a=Ay第一次实验报告1.计算;保存;清除工作空间中的变量;将保存的读取到工作空间;清空命令窗口。>> s=(2*sin(pi/5+2)-0.4)/(cos(6)+4)+4>> save data s>> clear>> load data>> clc2. 用plot命令绘制函数的图像(注意定义域)。加标题,x轴y轴标注,在点处用text命令加标注。>> x=linspace(-pi,pi,100);>>f=inline('(x.2.*sinh(x)./(log(x.2)+1)');>>y=f(x);>>plot(x,y);xlabel('x轴');ylabel('y轴');title('画图');text(2,f(2),'text');8.比较4个字符串比较函数。>> str1='hello'>> str2='hELLO'>> a=strcmp(str1,str2)>> b=strcmpi(str1,str2)>> c=strncmp(str1,str2,2)>> c=strncmpi(str1,str2,2)9. 求多项式函数的根,求以得到的根向量为根的多项式;求的导函数系数向量和以5为常数项的原函数系数向量;在同一绘图窗口中用plot绘制,的图像,并加图例。>> p=2 3 0 4;>> q1=polyder(p);>> q2=2 3 0 5;>> x=-3:0.1:3;>> plot(x,sum(x'.3 x'.2 x' ones(size(x')*p',2),'-',x,sum( x'.2 x' ones(size(x')*q1',2),':',x,sum(x'.3 x'.2 x' ones(size(x')*q2',2),'-')>> legend('p(x)','q1(x)','q2(x)',2)第二次实验报告1. 利用Gauss-Seidel迭代求解线性代数方程组。Gauss-Seidel迭代公式,其中是系数矩阵的下三角矩阵(含主对角线),是系数矩阵的上三角矩阵(不含主对角线)。>>editfunction x=GS(A,b)D=diag(diag(A); %以A的对角线为元素的对角阵L=tril(A); %含对角元素的下三角阵U=triu(A)-D; %不含对角元素的上三角阵 x0=zeros(length(b),1); %初始矩阵for k=1:50 x=-inv(L)*U*x0+inv(L)*b; %迭代 if A*x-b<1.0e-6 break end x0=x; end>>A=rand(3)-diag(diag(rand(3)+10*eye(3) >> b=1;5;6;>> x=GS(A,b)>> x=Ab第三次试验报告 1.求解无约束优化问题 ,取初值(-1,1)。>>editfunction y=minfun(x)y=exp(x(1)*(4*x(1)2+2*x(2)2+4*x(1)*x(2)+2*x(2)+1);>> x,fval,exitflag=fminsearch(minfun,-1,1)2. 求函数在上的最大值。>>editfunction y=mfun(x)y=-(2*x(1)2+12*x(1)*x(2)+x(2)2); >>edit function y,c=ed(x) c=; y=x(1)2+4*x(2)2-25;>> x,fval,exitflag=fmincon(mfun,2,1,ed)3. 求解非线性方程组。 >>editfunction y=twofun(x)y=x(1)2-x(2)-1;(x(1)-2)2-(x(2)-0.5)2-1;>> x,Y,exitflag=fsolve(twofun,1,0)4. 变量和满足函数关系,通过下面的数据确定参数,和。>>editfunction y=minfit(x,t)y=x(1)*x(2)/(x(2)-x(3)*(exp(-x(3)*t)-exp(-x(2)*t);>>t=0.0830.1670.250.500.751.01.5 2.253.04.06.08.010.012.0;>> y=10.921.127.336.435.538.434.8 24.223.615.78.28.32.21.8;>> a=lsqcurvefit(minfit,40,0.4,4,t,y)5求下述微分方程的数值解>>editfunction dy=od(t,x)dy=t*x(2)+exp(t); x(2)-x(1);>> X,Y=ode45(od,0,3,0,0)6.令X=y Y=y=X则y=Y则Y=X*Y-sinX+cost>>edit function dy=od(t,x)dy=x(2); x(1)*x(2)-sin(x(1)+cos(t);>> X,Y=ode45(od,0,1,0,1);