MATLAB作业1 参考答案
1 、编写一个矩阵相加函数mat_add() ,使其具体的调用格式为
A=mat_add(A1 ,A2 ,A3 ,…) , 要求该函数能接受任意多个矩阵进行加法运算。(注:varargin 变量的应用)
【求解】可以编写下面的函数,用varargin 变量来表示可变输入变量 function A=mat_add(varargin) A=0;
for i=1:length(varargin), A=A+varargin{i}; end
如果想得到合适的错误显示,则可以试用try, catch 结构。 function A=mat_add(varargin) try
A=0;
for i=1:length(varargin), A=A+varargin{i}; end catch, error(lasterr); end
2、 请绘制出sin(xy) 的三维图和等高线。 【求解】给出下面命令即可得出的图形。 >> [x,y]=meshgrid(-pi:.1:pi);
surf(x,y,sin(x.*y)), figure; contour(x,y,sin(x.*y),30)
3、 试求出如下极限。limx?0y?01?cos(x2?y2)(x?y)e22x2?y2
【求解】极限问题可以由下面语句直接求解。
>> fc=(1-cos(x^2+y^2))*exp(x^2+y^2)/(x^2+y^2); limit(limit(fc,x,0),y,0)
ans = 0
4、 试求出下面函数的导数。atany?ln(x2?y2) x 【求解】为隐函数,故需要用隐函数求导公式得出导数。 >> syms x,y; f=atan(y/x)-log(x^2+y^2); f1=simple(-diff(f,x)/diff(f,y)) f1 =
(y+2*x)/(x-2*y)
5、 假设f(x,y)??xy0x?2f?2f?2f。 edt,试求?2?y?x2?x?y?y2?t2 【求解】由下面的命令可以得出所需结果。
>> syms x y t
f=int(exp(-t^2),t,0,x*y);
x/y*diff(f,x,2)-2*diff(diff(f,x),y)+diff(f,y,2) simple(ans) ans =
-2*exp(-x^2*y^2)*(-x^2*y^2+1+x^3*y)
6、 假设f(x)?e?5xtsin(3x??/3),试求出积分函数R(t)??0f(x)f(t?x)dx。
【求解】定义了x 的函数,则可以由subs() 函数定义出t +x 的函数,这样由下面的语句可以直接得出R 函数。
>> syms x t; f=exp(-5*x)*sin(3*x+sym(pi)/3);
R=int(f*subs(f,x,t+x),x,0,t); simple(R) ans =
1/1360*(15*exp(t)^10*3^(1/2)*cos(3*t)-25*cos(9*t)+
25*exp(t)^10*3^(1/2)*sin(3*t)-68*cos(3*t)-15*3^(1/2)*cos(9*t)- 25*3^(1/2)*sin(9*t)-15*exp(t)^10*sin(3*t)+15*sin(9*t)+ 93*exp(t)^10*cos(3*t))/exp(t)^15
7、试求出下面函数的Taylor幂级数展开。
e?5xsin(3x??/3)分别关于x?0、x?a的幂级数展开。
【求解】 该函数的前4 项展开
>> syms x a; f=exp(-5*x)*sin(3*x+sym(pi)/3);taylor(f,x,4,a)
8、试求出下面的极限。 limn(n??111???222n??n?2?n?3??1)。 2n?n? 【求解】 可以由下面的语句直接求解。
>> syms k n
limit(n*symsum(1/(n^2+k*pi),k,1,n),n,inf)
9、试对下面数值描述的函数求取各阶(<5)数值微分,并用梯形法求取定积分。 xi yi 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 0 2.208 3.206 3.444 3.241 2.816 2.311 1.81 1.36 0.982 0.679 0.447 0.277 【求解】可以由下面的语句得出函数的各阶导数,得出的曲线。 >> x=[0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,1.1,1.2];
y=[0,2.208,3.206,3.444,3.241,2.816,2.311,1.81, 1.36,0.982,0.679,0.447,0.277]; [dy1,dx1]=diff_ctr(y,x(2)-x(1),1); [dy2,dx2]=diff_ctr(y,x(2)-x(1),2);