matlab操作题答案.docx
《matlab操作题答案.docx》由会员分享,可在线阅读,更多相关《matlab操作题答案.docx(70页珍藏版)》请在冰豆网上搜索。
![matlab操作题答案.docx](https://file1.bdocx.com/fileroot1/2023-2/7/6c7c9a64-4987-4356-a673-6e0e33714f10/6c7c9a64-4987-4356-a673-6e0e33714f101.gif)
matlab操作题答案
P.28ex2.1数值变量的运算
>>formatshorte
>>clear
>>muw0=1.785e-3;
>>a=0.03368;
>>b=0.000221;
>>t=0:
20:
80;
>>muw=muw0./(1+a*t+b*t.^2)
muw=
1.7850e-0031.0131e-0036.6092e-0044.6772e-0043.4940e-004
p.31ex2.2数值驻足和字符串转换
>>a=[1:
5];
>>b=num2str(a);
>>a
a=
12345
>>b
b=
12345
>>b*2
ans=
986464100646410264641046464106
P.44ex2.9比较用左除和右除分别求解恰定方程(线性方程组如果方程数等于未知数个数,叫做恰定方程组,如果方程多于未知数,叫做超定方程组,反之称为欠定。
换个角度说,系数矩阵如果是方阵,就是恰定方程组)的解
见课本
P.48ex2.14计算矩阵的指数并比较不同函数的结果
>>b=magic(3);
>>expm(b)
ans=
1.0e+006*
1.08981.08961.0897
1.08961.08971.0897
1.08961.08971.0897
>>expmdemo2(b)
ans=
1.0e+006*
1.08981.08961.0897
1.08961.08971.0897
1.08961.08971.0897
>>expm1(b)
ans=
1.0e+003*
2.98000.00170.4024
0.01910.14741.0956
0.05368.10210.0064
>>expmdemo3(b)
ans=
1.0e+006*
1.08981.08961.0897
1.08961.08971.0897
1.08961.08971.0897
P50ex2.18计算矩阵的特征值条件数
>>a=rand(3)
a=
0.96490.95720.1419
0.15760.48540.4218
0.97060.80030.9157
>>[V,D,s]=condeig(a)
V=
0.49130.66960.6696
0.3158-0.4476+0.2831i-0.4476-0.2831i
0.8117-0.2332-0.4655i-0.2332+0.4655i
D=
1.814600
00.2757+0.3061i0
000.2757-0.3061i
s=
1.1792
1.2366
1.2366
P62ex2.29矩阵的抽取、三角抽取
>>a=pascal(4)
a=
1111
1234
13610
141020
>>diag(a,-2)
ans=
1
4
>>v=diag(diag(a))
v=
1000
0200
0060
00020
%diag简单来说就是抽取矩阵各对角线上的元素,如上是抽取主对角线以下第二条对角线之元素,其另一功能是建立对角矩阵
>>tril(a)
ans=
1000
1200
1360
141020
>>triu(a)
ans=
1111
0234
00610
00020
%triu&tril用法与diag非常类似,用途是提取下、上三角矩阵
P62ex2.30建立多项式之伴随矩阵
这道题有点凌乱了…….求解释
P64ex2.31数组的幂运算
>>a=[21-3-1;3107;-124-2;10-15];
>>a^3
ans=
32-28-10134
99-12-151239
-149938
51-17-98139
>>a.^3
ans=
81-27-1
2710343
-1864-8
10-1125
P66ex2.32数组之逻辑运算
>>a=[1:
3;4:
6;7:
9];
>>b=[010;101;001];
>>x=5;y=ones(3)*5;
>>x<=a
ans=
000
011
111
%此处小于等于,对a中元素和x注意比较,大者为假为0,不大者为1
>>ab=a&b
ab=
010
101
001
%此处为与运算,就是同真才为真(同为非零数)
>>~b
ans=
101
010
110
%逻辑非运算,即全都非,真变假假变真;还有逻辑或运算,看下面即懂:
>>a|b
ans=
111
111
111
%总结多项式运算的函数:
poly:
Polynomialwithspecifiedroots特征多项式的生成p=poly(a)a为n阶特征矩阵,所得一般为n阶特征多项式;poly2sym数值2符号;polyval求多项式的值;roots求多项式的根;conv多项式的乘法(向量之卷积)conv(p,d);polyder多项式微分;polyfit多项式拟合。
P71ex2.41多项式拟合,用5阶多项式对正弦函数进行最小二乘拟合
>>x=0:
pi/20:
pi/2;
>>y=sin(x);
>>a=polyfit(x,y,5);
>>x1=0:
pi/30:
pi*2;
>>y1=sin(x1);
>>y2=a
(1)*x1.^5+a
(2)*x1.^4+a(3)*x1.^2+a(4)*x1.^2+a(5)*x1+a(6);
>>plot(x1,y1,'b-',x1,y1,'r*')
>>legend('原曲线','拟合曲线')
>>axis([0,7,-1.2,4])
>>axis([0,7,-1.2,1.5])%调整坐标轴显示范围
2.符号运算命名和基本运算法则
P79符号矩阵的运算
>>A=sym('[a,b;c,d]')
A=
[a,b]
[c,d]
>>symsabcd
>>B=[a,b;c,d]
B=
[a,b]
[c,d]
>>B-A
ans=
[0,0]
[0,0]
>>A/B
ans=
[1,0]
[0,1]
>>A^2
ans=
[a^2+b*c,a*b+b*d]
[a*c+c*d,d^2+b*c]
>>A.^2
ans=
[a^2,b^2]
[c^2,d^2]
>>det(A)
ans=
a*d-b*c
%行列式
>>inv(A)
ans=
[d/(a*d-b*c),-b/(a*d-b*c)]
[-c/(a*d-b*c),a/(a*d-b*c)]
%逆
>>rank(A)
ans=
2
%秩
%SUMMARY矩阵的分解:
奇异值分解[U,S,V]=svd(A);特征值分解[V,D]=eig(A);正交分解[Q,R]=qr(A);三角分解[L,U]=lu(A);
P88ex3.7利用函数gradient绘制一个矢量图
>>[x,y]=meshgrid(-2:
.2:
2,-2:
.2:
2);
>>z=x.*exp(-x.^2-y.^2);
>>[px,py]=gradient(z,.2,.2);
>>contour(z),%等高线绘制函数
>>holdon
>>quiver(px,py)%矢量图绘制函数
%绘图SUMMARY1.二维plot不解释;fplot:
绘制y=f(x)图形fplot(fname,lims,’s’);ezplot:
绘制隐函数图形help吧;极坐标polar,对数坐标semilogx,semilogy,loglog;bar条形图,pie饼状图;hist直方图有些疑惑!
;gridon/off:
控制是否画网格线。
boxon/off:
控制是否加边框线。
holdon/off控制是否刷新当前轴及图形
%2.三维:
plot3;meshgrid函数:
产生平面区域内的网格坐标矩阵;mesh画格子;surf面;figure(n)开窗户;subplot:
割图。
3.二维图形函数运用
P98基本绘图命令
>>y=rand(100,1);
>>plot(y)
>>x=rand(100,1);
>>z=x+y.*i;
>>plot(z)
P101ex4.1绘制带有显示属性的二维属性
>>x=1:
0.1*pi:
2*pi;
>>y=sin(x);
>>z=cos(x);
>>plot(x,y,'--k',x,z,'-.rd')
P104ex4.5条状图和矢量图
>>x=1:
10;
>>y=rand(10,1);
>>bar(x,y)
>>x=:
0.1*pi:
2*pi;
>>x=0:
0.1*pi:
2*pi;
>>y=x.*sin(x);
>>feather(x,y)
P104ex4.6函数图形绘制
>>lim=[0,2*pi,-1,1];
>>fplot('[sin(x),cos(x)]',lim)
P105ex4.7绘制饼状图
>>x=[2,4,6,8];
>>pie(x,{'math','english','chinese','music'})
4.三维图形函数应用
P107ex4.9绘制三维螺旋线
>>x=0:
pi/50:
10*pi;
>>y=sin(x);z=cos(x);
>>plot3(x,y,z)
P107ex4.10绘制参数为矩阵的三维图
>>[x,y]=meshgrid(-2:
0.1:
2,-2:
0.1:
2);
>>z=x.*exp(-x.^2-y.^2);
>>plot3(x,y,z)
P109ex4.11使用mesh函数绘制三维面图
>>x=-8:
0.5:
8;y=x';
>>a=ones(size(y))*x;
>>b=y*ones(size(x));
>>c=sqrt(a.^2+b.^2)+eps;
>>z=sin(c)./c;
>>mesh(z)
P110ex4.13meshc函数绘制的三维面图
>>[X,Y]=meshgrid([-4:
0.5:
4]);
>>Z=sqrt(X.^2+Y.^2);
>>meshc(Z)
P111ex4.16绘制三维饼状图
>>clear
>>x=[2,4,6,8];
>>pie(x)
>>pie(x,[0,0,1,0])
>>pie3(x,[0,0,1,0])
>>pie3(x,[0,0,1,1])
P113ex4.19绘制如图柱面图
>>x=0:
pi/20:
pi*3;
>>r=5+cos(x);
>>[a,b,c]=cylinder(r,30);
>>mesh(a,b,c)
P113ex4.20绘制地球表面的气温分布示意图
>>[a,b,c]=sphere(40);
>>t=abs(c);
>>surf(a,b,c,t);
>>axis('equal')
>>axis('square')
>>colormap('hot')
5.图形控制命令
P118ex4.24坐标标注函数应用
>>x=1:
0.1*pi:
2*pi;
>>y=sin(x);
>>plot(x,y)
>>xlabel('x(0-2\pi)')
>>ylabel('y=sin(x)')
>>title('正弦函数','FontSize')
Errorusingtitle(line29)
Incorrectnumberofinputarguments
Errorintitle(line23)
h=title(gca,varargin{:
});
>>title('正弦函数','FontSize',12)
>>title('正弦函数','FontSize',12,'FontWeight',bold)%课本上不知由于版本问题还是什么,与2011b不同,最后尝试用Bold成功解决ADD已解决,用单引号引起bold即可
Undefinedfunctionorvariable'bold'.
>>title('正弦函数','FontSize',12,'FontWeight',Bold)
Undefinedfunctionorvariable'Bold'.
>>title('正弦函数','FontSize',12,'FontWeight','Bold')
>>title('正弦函数','FontSize',12,'FontWeight','Bold','FontName','隶书')
P123ex4.30在同一张途中绘制几个三角函数图
>>x=0:
0.1*pi:
2*pi;
>>y=sin(x);
>>z=cos(x);
>>plot(x,y,'-*')
>>holdon
>>plot(x,z,'-o')
>>plot(x,y+z,'-+')
>>legend('sin(x)','cos(x)','sin(x)+cos(x)',0)
P124ex4.31在4个子图中绘制不同的三角函数
>>x=0:
0.1*pi:
2*pi;
>>subplot(2,2,1);
>>plot(x,sin(x),'-*')
>>title('sin(x)')
>>subplot(2,2,2)
>>plot(x,cos(x),'-o')
>>title('cos(x)')
>>subplot(2,2,3)
>>plot(x,sin(x).*cos(x),'-x')
>>title('sin(x)*cos(x)')
>>subplot(2,2,4)
>>plot(x,sin(x)+cos(x),'-h')
>>title('sin(x)+cos()')
>>title('sin(x)+cos(x)')
%SUMMARYinterp1:
1-Ddatainterpolation(tablelookup)
%yi=interp1(x,Y,xi,method,'extrap')method:
nearest/linear/echip(hermite)/spline,etc
P222ex7.3正弦曲线的差值实例
>>x=0:
0.05:
10;
>>y=sin(x);
>>xi=0:
.125:
10;
>>yi=interp1(x,y,xi);%一维插值
>>plot(x,y,'*',xi,yi)
P227例7.7二次拟合
>>x=[0.5:
0.5:
3.0];
>>y=[1.752.453.814.808.008.60];
>>a=polyfit(x,y,2)%用最小二乘法拟合
a=
0.49001.25010.8560
>>x1=0.5:
0.05:
3.0;
>>y1=a
(1)*x1.^2+a
(2)*x1+a(3);%拟合出的函数
>>plot(x1,y1,'-or',x,y,'-+b')
P228例7.8拟合,用求解矩阵的方法解,求解超定方程
>>xi=19:
6:
44
xi=
1925313743
>>yi=[19.032.349.073.398.8];
>>formatshort
>>a=polyfit(xi,yi,2)
a=
0.0635-0.59327.2811
>>x1=19:
.1:
44;
>>y1=a
(1)*x1.^2+a
(2)*x1+a
(2);%此处发生了一点错误,将a(3)误输为a
(2),后面会有改正
>>plot(x1,y1,'-x')
>>plot(x1,y1,'-')
>>x2=xi.^2;%采用求解矩阵的方法来求解此拟合问题
>>x2=[ones(5,1),x2']
x2=
1361
1625
1961
11369
11849
>>ab=x2\yi'
ab=
-1.3522
0.0540
>>y3=ab
(1)+ab
(2)*x1.^2;
>>holdon;plot(x1,y3,'--g')
>>y1=a
(1)*x1.^2+a
(2)*x1+a(3);
>>plot(x1,y1,'-')%从图中可以看出,两种拟合方法较为吻合
P233例7.10分别用矩形和梯形公式求积分
>>y=inline('exp(-0.5*t).*sin(t+pi/6)');%内联函数
>>d=pi/1000;
>>t=0:
d:
3*pi;
>>nt=length(t)
nt=
3001
>>y1=y(t);
>>sc=cumsum(y1)*d;
>>scf=sc(nt)
scf=
0.9016
>>formatlong
>>scf
scf=
0.901618619310013%矩形方法
>>z=trapz(y1)*d
z=
0.900840276606885%梯形方法
P237ex7.11采用自适应Simpson公式求积分
>>f=inline('x./(x.^2+4)');
>>quad(f,0,1)
ans=
0.111571765994935
P237ex7.12用quadl求积分
>>f=inline('exp(-x/2)');
>>f1=quadl(f,1,3)
f1=
0.7668
>>f2=quad(f,1,3,1e-10)
f2=
0.7668
>>formatlonge
>>f1
f1=
7.668009991284686e-001
>>f2
f2=
7.668009991284349e-001
P2377.12quadlgauss-labatto求积分
>>quadl('exp(-x/2)',1,3)
ans=
0.7668
%求线性方程组的方法一般有两种:
左除求法和linsolve求法
P246ex7.17求线性方程组
>>a=rand(4,4);%生成随机矩阵
>>b=rand(4,1);
>>x=a\b
x=
1.728190838792039e+001
8.395388076704506e-001
-1.590669694986821e+001
1.088276299038511e+000
%此处与书上不同,为生成的随机矩阵
%SUMMARY矩阵左除A\B=A-1*B等效于A*X=B求Xinv(A)注:
.\数组左除A.\BBij/Aij;/:
矩阵右除A/B=A*B-1等效于X*B=A求X
>>formatshort
>>x1=linsolve(a,b)
%SUMMARY用linsolve求解线性方程;用solve、fzero求解非线性方程;
DsolveOrdinarydifferentialequationandsystemsolver,用dsolve求解微分方程;fsolveSolvesystemofnonlinearequations,[x,fval]=fsolve(@myfun,x0,options)%Callsolver
x1=
17.2819
0.8395
-15.9067
1.0883
P246ex7.18对矩阵进行LU分解
>>A=ones(4,4)
A=
1111
1111
1111
1111
>>[l,u]=lu(A)
l=
1000
1100
1010
1001
u=
1111
0000
0000
0000
>>l*u
ans=
1111
1111
1111
1111
P265ex7.39求方程组之符号解
>>[x1,x2]=solve('x1-0.7*sin(x1)-0.2*cos(x2)=0','x2-0.7*cos(x1)+0.2*sin(x2)=0')
x1=
0.52652262191818418730769280519209
x2=
0.50791971903684924497183722688768
%方法一:
用solve求符号解,注意使用[x1,x2]方式调用才可求得具体数值另有不动点迭代法和newton法,见课本p263
>>edit
fc.m
functionf=fc(x)
f
(1)=x
(1)-0.7*sin(x
(1))-0.2*cos(x
(2));
f
(2)=x
(2)-0.7*cos(x
(1))+0.2*sin(x
(2));
f=[f
(1)f
(2)];%编写m文件
>>x0=[0.50.5];
>>fsolve('fc',x0)
Equationsolved.
fsolvecompletedbecausethevectoroffunctionvaluesisnearzero
asmeasuredbythedefaultvalueofthefunctiontolerance,and
theproblemappearsregularasmeasuredbythegradient.
ans=
0.52650.5079%用fsolve求解,显然麻烦很多
P273ex7.42微分方程数值解
>>f=inline('-y+x+1');
>>[x,y]=ode23(f,[0,1],1)
x=
0
0.1000
0.2000
0.3000