楼主: 飘零久
1054 0

[新手尝试] MATLAB [推广有奖]

  • 0关注
  • 0粉丝

学前班

50%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
233 点
帖子
2
精华
0
在线时间
0 小时
注册时间
2015-1-23
最后登录
2015-1-23

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
有时需要将不同的数据类型组合成一个整体,以便于引用。这些组合在一个整体中
的数据是相互联系的。例如,一个学生的学号、姓名、性别、年龄、成绩、家庭地址等
项都是和该学生有联系的。
下面简单介绍结构体的定义与引用。
i)结构数组的定义
定义结构数组可以采用两种方法:用赋值语句定义和用函数struct 定义。
用赋值语句定义结构时,只要给出结构的属性赋值,Matlab 就会自动把该属性增
加到结构中,赋值时,结构名和属性名用“.”分开。例如,下面三条语句将定义一个1×1
的结构数组,结构名为student,有三个属性:name、num、test。该结构数组只有一
个元素,在命令窗口中键入结构名student,将显示该元素所有属性的属性值的特性。
student.name='John Doe';
student.num=123456;
student.test=[79 75 73;80 78 79;90 85 80];
再键入以下三行可给该结构数组增加一个元素。
student(2).name='Ann Lane';
student(2).num=123422;
student(2).test=[70 76 73;80 99 79;90 85 80;80 85 86];
现在结构数组student的维数为1× 2。当结构数组的元素超过1 个时,MATLAB 的
帮助信息中,不再显示不同属性的值,而只显示数组名、属性名和维数大小。
函数struct 也可用来定义结构数组,其调用格式为:
结构数组名=struct(‘属性1’,’属性值1’, ‘属性2’,’属性值2’,…)
ii)结构数组属性值的修改、设置和获取
结构数组一旦形成,就可取出数组中的某个元素并修改该元素的某个属性的值。以
上面建立的student 数组为例,命令
str=student(2).name
可取出第二个元素的name 属性的值。
命令
n=student(2).test(4,2)
取出第二个元素test 的值中第四行第二列上的数。
同理,可用命令
student(2).test(4,2)=0
修改第二个元素test 的值中第四行第二列上的数的值。
关于结构数组有如下函数:
函数名 作用
struct 生成和转换为结构数组
fieldnames 查询结构数组的属性名
getfield 查询结构数组的属性值
setfield 设置结构数组的属性值
rmfield 删除属性
-295-
isfield 检查是否为数组的属性
isstruct 检查数组是否为结构型
⑧ 细胞数组
细胞数组也是MATLAB 里的一类特殊的数组。在MATLAB 里,由于有细胞数组这个数
据类型,才能把不同类型、不同维数的数组组成为一个数组。
细胞数组的每一个元素可为类型不同、维数不同的矩阵、向量、标量或多维数组,
所有元素用大括号括起来。如矩阵A=[1 2 3 4;2 3 4 5;3 4 5 6],则命令
c={A,sum(A),sum(sum(A))}
得到一个1× 3的细胞数组。
关于细胞数组有如下函数:
函数名 作用
celldisp 显示细胞数组的内容
cell 生成细胞数组
cellplot 用图形方式显示细胞数组
num2cell 把数值型转换为细胞型
deal 输入和输出的匹配
cell2struct 把细胞数组转换为结构数组
struct2cell 把结构数组转换为细胞数组
iscell 检验数组是否为细胞型
i)细胞数组的生成
有两种方法可以生成细胞数组:用赋值语句直接生成;先用cell 函数预分配数组,
然后再对每个元素赋值。
有两种方法可对元素赋值:一种方法采用数组元素的下标赋值。下面四句命令将建
立一个2× 2的细胞数组。
A(1,1)={[1:5;6:10]};
A(1,2)={'Anne cat'};
A(2,1)={3+7i};
A(2,2)={0:pi/10:pi};
在大括号中,逗号或者空格表示每行元素之间的分割,分号表示不同行之间的分割。
另一种方法则把细胞数组的元素用大括号括起来,而所赋的值采用其它数组的形
式。例如下面四句生成的细胞数组和上面所生成的完全一样。
A{1,1}=[1:5;6:10];
A{1,2}='Anne cat';
A{2,1}=3+7i;
A{2,2}=0:pi/10:pi;
命令
B=cell(3,4)
创建一个3× 4的细胞矩阵。
ii)细胞数组内容的查看
对于上面建立的数组A,在Matlab 命令窗口键入变量名A,将显示数组的简要信息。
函数celldisp 用来显示细胞数组的每个元素的值。函数cellplot 将画出细胞数组
的每个元素的结构图。
当给已经定义的细胞数组下标范围外的元素赋值时,Matlab 自动扩维,对于没有
-296-
赋值的元素,赋值为空矩阵。
7. 数学运算与函数
① 基本代数运算操作 +,-,*,\,/,^,
② 矩阵运算函数:求行列式(det),矩阵求逆(inv),求秩(rank),求迹(trace),
求模(norm),d=eig(A)求矩阵A 的特征值,[v,d]=eig(A)求矩阵A 的特征向量和特征
值,这里v 的列向量是对应的特征向量。
矩阵基本运算:
A\B, B/A, A.*B, A./B, A.\B, A.^B。
③ 基本数学函数
常用的数学函数有sin,cos,tan,abs,min,sqrt,log,log10,sign,asin,
acos,atan,max,sum,exp,fix 等。具体使用方法请参看帮助help。
常用的矩阵函数有expm,logm,sqrtm 和funm,funm 函数可计算任何一个基本数
学函数的矩阵函数。它可以表示为
fa=funm(a,'fun')
式中,fun 可以是任意一个基本函数,如sin,cos,log10 等。
④ 多项式
任意多项式都可以用一个行向量来表示, 即n 维的向量a 表示多项式
y(x) = a(1)xn−1 + a(2)xn−2 + + a(n −1)x + a(n) L ,反过来,任意一个向量就可以作
为多项式。
例如:
p=[1 –6 11 -6]; poly2sym(p,’x’)
ans =
x^3-6*x^2+11*x-6
求s3 + 2s2 + 3s + 4的根可用如下命令。
A=[1 2 3 4];roots(A)
i) poly 函数
p=poly(A),A 是一个n × n的矩阵时,此函数返回矩阵A 的特征多项式p,p是n +1
维向量;A 是向量时,此函数返回以向量中的元素为根的多项式。
ii) 多项式的数组运算
y=polyval(p,x) 计算多项式在x 处的值,x 可以是矩阵或向量,此时函数计算多
项式在x 的每个元素处的值。
iii) 多项式的矩阵运算
y=polyvalm(p,x) 相当于用矩阵x 代替多项式的变量来对矩阵而不是对数组进行
运算,x 必须是方阵。例如:
⎟ ⎟⎠

⎜ ⎜⎝

=
3 4
1 2
A , p(A) = A2 + 3A + 2I
可采用如下的命令进行计算
p=[1 3 2];
a=[1 2; 3 4];
polyvalm(p,a)
iv) 多项式的乘法和除法运算
w=conv(u,v) 此函数求多项式u 和v 的乘积,即求向量u 和v 的卷积。如果
m=length(u),n=length(v),则w 的长度为m+n-1。
-297-
[q,r]=deconv(u,v) 此函数表示多项式u 除以多项式v 得到商多项式q 和余数多项
式r,如果r 的元素全部为零,则表示多项式v 可以整除多项式u。
8. 绘图命令
① 二维图形
二维绘图的基本命令有plot,loglog,semilogx,semilogy 和polar。它们的使
用方法基本相同,其不同特点是在不同的坐标中绘制图形。plot 命令使用线性坐标空
间绘制图形;loglog 命令在两个对数坐标空间中绘制图形;而semilogx(或semilogy)
命令使用x 轴(或y 轴)为对数刻度,另外一个轴为线性刻度的坐标空间绘制图形;polar
使用极坐标空间绘制图形。
二维绘图命令plot 为了适应各种绘图需要,提供了用于控制线色、数据点和线型
的3 组基本参数。它的使用格式如下:
plot(x,y,’color_point_linestyle’)
该命令是绘制y 对应x 的轨迹的命令。y 与x 均为向量,且具有相同的元素个数。
用字符串‘color_point_linestyle’完成对上面3 个参数的设置。线色(r-red,g-green,
b-blue,w-white,k-black,i-invisible,y-yellow),数据点(.,o,x,+,*,S,
H,D,V,^,>,<,p)与线型(-,-.,--,:)都可以根据需要适当选择。
当plot(x,y)中的x 和y均为m× n矩阵时,plot 命令将绘得n条曲线。
plot(t,[x1,x2,x3])在同一坐标轴内同时绘制三条曲线。
如果多重曲线对应不同的向量绘制,可使用命令
plot(t1,x1,t2,x2,t3,x3)
式中x1 对应t1,x2 对应t2 等等。在这种情况下,t1,t2 和t3 可以具有不同的元
素个数,但要求x1,,x2 和x3 必须分别与t1,t2 和t3 具有相同的元素数量。
subplot 命令使得在一个屏幕上可以分开显示n 个不同坐标系,且可分别在每一个
坐标系中绘制曲线。其命令格式如下:
subplot(r,c,p)
该命令将屏幕分成r*c,而p 表示在第几个窗口。窗口的排号是从左到右,自上而下。
在图形绘制完毕后,执行如下命令可以再在图中加入题目、标号、说明和分格线等。
这些命令有title,xlabel,ylabel,text,gtext 等。它们的命令格式如下:
title(‘My Title’),xlabel(‘My X-axis Label’),ylabel(‘My Y-axis Label’),
text(x,y,'Text for annotation'),gtext('Text for annotation'),
grid
gtext命令是使用鼠标器定位的文字注释命令。当输入命令后,可以在屏幕上得到
一个光标,然后使用鼠标器控制它的位置。按鼠标器的左键,即可确定文字设定的位置。
hold on 是图形保持命令,可以把当前图形保持在屏幕上不变,同时在这个坐标
系内绘制另外一个图形。hold 命令是一个交替转换命令,即执行一次,转变一个状态
(相当于hold on、hold off)。
Matlab可以自动选择坐标轴的定标尺度,也可以使用axis命令定义坐标轴的特殊
定标尺度。其命令格式如下:
axis([x-min,x-max,y-min,y-max])
axis 命令的另一个作用是控制纵横尺度的比例。例如,输入axis(‘square’)后,可得
到一个显示方框,此时再在该框内绘制一个圆形时(如:plot(sin(x),cos(x)),在屏
幕上可以看到一个圆(一般情况下,由于屏幕的不规则原因,只能看到一个椭圆)。再
次输入axis(‘normal’)命令,屏幕返回到一般状态。

x=0:0.25:5;
-298-
y1=x.^0.1;
y2=x.^0.5;
y3=x.^0.8;
y4=x.^1.5;
t=0:0.001:2*pi;
hold on
plot(3*cos(t),3*sin(t))
plot(x,y1,'bo',x,y2,'rH-')
plot(x,y3,'gp--')
plot(x,y4,'mx-.')
title('My Title'),xlabel('My X-axis Label'),ylabel('My Y-axis
Label')
text(2,8,'Text for annotation')
gtext('Text for annotation'),grid
结果如图所示:
-3 -2 -1 0 1 2 3 4 5
-4
-2
0
2
4
6
8
10
12
My Title
My X-axis Label
My Y-axis Label
Text for annotation
Text for annotation
例 用极坐标绘图命令绘制方程r = cos 2θ (四叶玫瑰线)的图形。
x=0:0.1:2*pi;
r=cos(2*x);
polar(x,r)
例 随机地产生20 个数据,再根据这些数据画统计直方图。
x=rand(1,20);
y=round(20*x);
subplot(1,2,1)
hist(x)
subplot(1,2,2)
hist(y)
② 三维图形
在实际工程计算中,最常用的三维绘图是三维曲线图、三维网格图和三维曲面图3
种基本类型。与此对应,Matlab 也提供了3 个三维基本绘图命令(三维曲线命令plot3、
三维网格命令mesh 和三维表面命令surf)。下面先初步介绍其中的两个。
-299-
i)三维曲线
plot3(x,y,z)通过描点连线画出曲线,这里x,y,z 都是n 维向量,分别表示该曲线
上点集的横坐标、纵坐标、竖坐标。
例 在区间[0,10*pi]画出参数曲线x = sin(t), y = cos(t),z = t ,并分别
标注。
t=0:pi/50:10*pi;
plot3(sin(t),cos(t),t)
xlabel('sin(t)'),ylabel('cos(t)'),zlabel('t')
ii)网格
命令mesh(x,y,z)画网格曲面。这里x,y,z 是三个同维数的数据矩阵,分别表示数
据点的横坐标、纵坐标、竖坐标,命令mesh(x,y,z)将该数据点在空间中描出,并连成
网格。
例 绘制二元函数
xy
z = sin(xy)
的三维网格图。
x=-3:0.1:3;y=-5:0.1:5;
x1=ones(size(y'))*x;y1=y'*ones(size(x));
[x2,y2]=meshgrid(x,y);
z1=(sin(x1.*y1)+eps)./(x1.*y1+eps);
z2=(sin(x2.*y2)+eps)./(x2.*y2+eps);
subplot(1,2,1),mesh(x1,y1,z1)
subplot(1,2,2),mesh(x2,y2,z2)
③ 符号函数的简易绘图函数ezplot
ezplot(f)绘制f(x)的函数图,这里f 为代表数学表达式的包含单个符号变量x 的字
符串或符号表达式。x 轴的近似范围为[-2*pi,2*pi]。
ezplot(f,xmin,xmax)或ezplot(f,[min,max])使用输入参数来代替默认横坐标范围[-
2*pi,2*pi]。
例 画出函数y = tan x的图形
解:ezplot(‘tan(x)’)
④ 绘制函数图函数fplot
fplot(fun,lims)绘制由字符串fun 指定函数名的函数在x 轴区间为lims=[xmin, xmax]
的函数图。若lims=[xmin,xmax,ymin,ymax],则y 轴也被输入限制。fun 必须为M 文件
的函数名或对变量x 的可执行字符串,此字符串被送入函数eval 后被执行。函数fun(x)
必须要返回针对向量x 的每一元素结果的行向量。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:MATLAB atlab matla Atl Mat 结构体 姓名

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加JingGuanBbs
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-6-25 23:37