MatLab复习大纲
一.
Matlab基础知识
工作环境的组成;Matlab的数值计算(标量、向量、矩阵);矩阵建立;
矩阵拆分;
• A(:,j):取A第j列全部元素;
A(i,:):取A第i行全部元素;
A(i,j):取A第i行、第j列的元素。
• A(i:i+m,:):取A第i~i+m行的全部元素;
A(:,k:k+m):取A第k~k+m列的全部元素;
A(i:i+m,k:k+m):取A第i~i+m行内,并在第k~k+m列中的所有元素。
矩阵元素的获取;
Ytt
• 通过序号引用矩阵的元素:矩阵元素的序号就是相应元素在内存中的排列顺序。矩阵元素
按列存储,先第一列,再第二列,依次类推。例如
• >>A=[1,2,3;4,5,6];
• >>A(3)
• ans =
2
矩阵的算术运算;关系运算;逻辑运算;
在算术、关系、逻辑运算中,算术运算优先级最高,逻辑运算优先级最低
字符串的运算;
字符串是以ASCII码形式存储的。abs和double函数都可以用来获取字符串矩阵所对应的ASCII码数值矩阵。相反,char函数可以把ASCII码矩阵转换为字符串矩阵。
命令如下:
Ytt
ch=‘MatLab R14’;
subch=ch(1:5) %取子字符串
revch=ch(end:-1:1) %将字符串倒排
k=find(ch>=‘a’&ch<=‘z’); %找小写字母的位置
char(ch)
length(k) 将小写字母转换为相应的大写字母
%统计小写字母的个数ch(k)=ch(k)-(‘a’‘-A’); %
完全存储方式、稀疏存储方式、稀疏矩阵之间的关系;
MATLAB的矩阵有两种存储方式:完全存储方式和稀疏存储方式。
1.完全存储方式
完全存储方式是将矩阵的全部元素按列存储。以前讲到的矩阵的存储方式都是按这个方式存储的,此存储方式对稀疏矩阵也适用。
Ytt
2.稀疏存储方式
仅存储矩阵所有的非零元素的值及其位置,即行号和列号。
在MATLAB中,稀疏存储方式也按列存储。
注意,在讲稀疏矩阵时,有两个不同的概念,
• 指矩阵的0元素较多,该矩阵是一个具有稀疏特征的矩阵,
指采用稀疏方式存储的矩阵。
fix、round、rem、mod、linspace、eye、zero、ones、rand、diag、tril、triu、inv
fix(m/100)求三位数m的百位数字,求整商;rem(m,10)求个位数字即求余数
记住 超出部分会列出
fix:趋向于0取整。
a = [-1.9, -0.2, 3.4, 5.6]
Ytt
a = -1.9000 -0.2000 3.4000 5.6000
fix(a)
ans =-1.0000 0 3.0000 5.0000
round:四舍五入取整。
a = [-1.9, -0.2, 3.4, 5.6]
a =-1.9000 -0.2000 3.4000 5.6000
round(a)
ans =-2.0000 0 3.0000 6.0000
rem与mod函数的区别。rem(x,y)和mod(x,y)要求x,y必须为相同大小的实矩阵或为标量。x、y同号时作用相同。
rem:0~sign(X)*abs(Y)之间的整数
rem(23,-5)
Ytt
ans = 3
rem(-23,5)
ans = -3
mod( )= rem( )+Y
>> mod(23,-5)
ans = -2
>> mod(-23,5)
ans = 2
1).linspace(a,b):a~b之间100个均布元素
2).linspace(a,b,n)
a:start b:end n:元素总数。
Ytt
>> a=linspace(1,20,8)
a = Columns 1 through 5
1.0000 3.7143 6.4286 9.1429 11.8571
Columns 6 through 8
14.5714 17.2857 20.0000
• eye(m,n) m×n单位阵
• zeros(m,n) m×n全0阵
• ones(m,n) m×n全1阵
• rand(m,n) m×n 0~1间均匀分布随机阵
diag(A):提取矩阵A主对角线元素,产生一个具有min(m,n)个元素的列向量。
diag(A,k):提取第k条对角线的元素。 A为矩阵。>> A=[4,-65,-,0,6;56,0,67,-45,0]
Ytt
>> diag(A)
ans =
4
0
>> diag(A,2)
ans =
-
-45
>> diag(A,0)
ans =
4
Ytt 0
v=[2,7]
v =
2 7
>> diag(v)
ans =
2 0
0 7
>> diag(v,2)
ans =
0 0
2 0
Ytt
0 0 0 7
0 0 0 0
0 0 0 0
(1) triu(A):求矩阵A的上三角阵;
triu(A,k):求矩阵A的第k条对角线以上的元素。
(2) 下三角矩阵
(3) tril(A)。tril(A,k) 用法与triu(A)和triu(A,k) 相同
(4) A =
(5) 17 0 1
(6) 5 7 14
(7) 4 0 13
Ytt
(8) 10 12 3
(9) >> triu(A)
(10) ans =
(11) 17 0 1
(12) 0 7 14
(13) 0 0 13
(14) 0 0 0
(15) >> triu(A,1)
(16) ans =
(17) 0 0 1
(18) 0 0 14
Ytt
(19) 0 0 0
(20) 0 0 0
对于一个方阵A,A·B=B·A=I (I为单位矩阵)
则称B为A的逆矩阵,A也是B的逆矩阵。
inv(A) :求矩阵的逆阵
可用于线性方程组求解。
二. Matlab程序设计(编程)
熟练掌握各种常用语句的表达形式;命令文件与函数文件的建立;区别(调用方式不同) 形式上的差异 命令文件名调用分f2c回车 函数文件名调用c=f2c回车
输入输出printf disf
三种基本结构、关系运算符、逻辑运算符、算术运算符、赋值运算符及其优先级 写出表达式知道怎么计算
Ytt
顺序结构:A=input(提示信息,选项);
如果在input函数调用时采用's'选项,则允许用户输入一个字符串。例如,想输入一个人的姓名,可采用命令:
xm=input('What''s your name?','s');
MATLAB提供的命令窗口输出函数主要有disp函数,其调用格式为
disp(输出项)
其中输出项既可以为字符串,也可以为字符矩阵。
fprintf 函数输出带有相关文本的一个或多
个值,允许程序员控制显示数据的方式。
Ytt
格式字符:
%d 把值作为整数来处理
%c 单个字符
%s 字符串或字串输出
%f 用于格式化浮点数,并显示这个数
%e 用科学记数法来显示数据
%g 用科学记数格式或浮点数格式,取短的
\\n 转到新的一行,回车换行
格式字符的变化:%-m.nX
fprintf 函数的局限性:只能显示复数的实部。
复数结果输出最好用disp 显示数据。
Ytt
fprintf('fprintf: x = %8.4f\\n',x);
disp: x = -22+4i
fprintf: x = -22.0000
选择结构
循环结构
三. Matlab的符号运算
熟练掌握符号对象(符号变量、符号矩阵、符号表达式)的创建和使用方法;符号方程求解;factor、expand、horner、collect前四个了解,后面须掌握、simple、eval、findsym、limit、diff、int、solve
factor(s):对符号表达式s分解因式。
expand(s):对符号表达式s进行展开。
horner:将符号表达式转化为嵌套形式
Ytt
collect(s):对符号表达式s合并同类项。
collect(s,v):对符号表达式s按变量v合并同类项。
• simple(s):调用MATLAB的其他化简函数对表达式进行综合化简,并显示化简过程,并给出最短形式。
>> syms x
>> simple(cos(x)^2+sin(x)^2)
simplify:
1
……
ans =
1
sym可将数值表达式变换成它的符号表达式。
Ytt
eval可以将符号表达式变换成数值表达式。
>> a=sym('1/4')
a =
1/4
>> eval(a)
ans =
0.25000000000000
>> sym(ans)
ans =
1/4
findsym可以帮助用户查找一个符号表达式中的的符号变量(自变量)。该函数的调用格式为:
Ytt
findsym(s,n)
函数返回符号表达式s中的n个符号变量,若没有指定n,则返回s中的全部符号变量。
优先选择靠近x的小写字母和x后面的字母。
>> syms a b x
>> f=sym(sin(a*x)+b);
>> findsym(f,1)
ans =
x
>> findsym(f,2)
ans =
x,b
Ytt
>> findsym(f)
ans =
a, b, x
limit函数的调用格式为:
(1) limit(f,x,a):求符号函数f(x)的极限值。即计算当变量x趋近于常数a时,f(x)函数的极限值。
(2) limit(f,a):求符号函数f(x)的极限值。由于没有指定符号函数f(x)的自变量,则使用该格式时,符号函数f(x)的变量为函数findsym(f)确定的默认自变量,即变量x趋近于a
(3) limit(f):求符号函数f(x)的极限值。f(x)的变量为函数findsym(f)确定的默认变量;没有指定变量的目标值时,系统默认变量趋近于0,即a=0的情况。
(4) limit(f,x,a,'right'):求符号函数f的极限值。'right'表示变量x从右边趋近于a。
(5) limit(f,x,a,‘left’):求符号函数f的极限值。‘left’表示变量x从左边趋近于a。
diff(s):没有指定变量和微分阶数,则系统按findsym函数指示的默认变量对符号表达式s求一阶微分。
Ytt
diff(s,'v'):以v为自变量,求一阶微分。
diff(s,n):按findsym函数指示的默认变量求n阶微分,n为正整数。
diff(s,'v',n):以v为自变量,n阶微分。
syms x
>> s=cos(x)+sin(x)
s =
cos(x)+sin(x)
>> s1=diff(s)
s1 =
-sin(x)+cos(x)
int(s):未指定积分变量和阶数,按findsym函数指示的默认变量对被积函数或符号表达式求不定积分。
Ytt
int(s,v):以v为自变量,对被积函数或符号表达式s求不定积分。
int(s,v,a,b):求定积分运算。a,b分别表示定积分的下限和上限。求被积函数在区间[a,b]上的定积分。a和b可以是两个具体的数,也可以是一个符号表达式,还可以是无穷(inf)。当函数f关于变量x在闭区间[a,b]上可积时,函数返回一个定积分结果。当a,b中有一个是inf时,函数返回一个广义积分。当a,b中有一个符号表达式时,函数返回一个符号函数。
>> syms x t
>> int(1/(1+x^2))
ans =
atan(x)
>> int(4*x*t,x,2,sin(t))
ans =
2*t*(sin(t)^2-4)
在MATLAB中,求解用符号表达式表示的代数方程可由函数solve实现,其调用格式为:
Ytt
solve(s):求解代数方程,求解变量为默认变量。
solve(s,v):求解符号表达式s的代数方程,求解变量为v。
solve(s1,s2,…,sn,v1,v2,…,vn):求解符号表达式s1,s2,…,sn组成的代数方程组,求解变量分别v1,v2,…,vn。
>> syms a b c x
>> solve(a*x^2+b*x+c)
ans =
1/2/a*(-b+(b^2-4*a*c)^(1/2))
1/2/a*(-b-(b^2-4*a*c)^(1/2))
>> solve(a*x^2+b*x+c,a)
ans =
-(b*x+c)/x^2
Ytt
>> f=solve('cos(x)=sin(x)')
f =
1/4*pi
四. 数据分析、多项式计算、方程求解
线性方程组求解(直接解法、LU分解)、非线性方程、非线性方程组的求解、
例7-1 用直接解法求解下列线性方程组。
命令如下:
A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];
b=[13,-9,6,0]';
x=A\\b
x =
Ytt
-66.5556
25.6667
-18.7778
26.5556
(1) LU分解
矩阵的LU分解就是将一个矩阵表示为一个交换下三角矩阵和一个上三角矩阵的乘积形式。
线性代数中已经证明,只要方阵A是非奇异的,LU分解总是可以进行的。
[L,U]=lu(X):产生一个上三角阵U和一个变换形式的下三角阵L(行交换),使之满足X=LU。
注意,这里的矩阵X必须是方阵。
[L,U,P]=lu(X):产生一个上三角阵U和一个下三角阵L以及一个置换矩阵P,使之满足PX=LU。当然矩阵X同样必须是方阵。
实现LU分解后,线性方程组Ax=b的解x=U\\(L\\b)或x=U\\(L\\Pb),这样可以大大提高运算速度。
Ytt
例7-2 用LU分解求解例7-1中的线性方程组。
命令如下:
A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];
b=[13,-9,6,0]';
[L,U]=lu(A);
x=U\\(L\\b)
或采用LU分解的第2种格式,命令如下:
[L,U ,P]=lu(A);
x=U\\(L\\P*b)
单变量非线性方程求解
在MATLAB中提供了一个fzero函数,可以用来求单变量非线性方程的根。该函数的调用格式为:
Ytt
z=fzero('fname',x0,tol,trace)
其中fname是待求根的函数文件名,x0为搜索的起点。一个函数可能有多个根,但fzero函数只给出离x0最近的那个根。tol控制结果的相对精度,缺省时取tol=eps,trace•指定迭代信息是否在运算中显示,为1时显示,为0时不显示,缺省时取trace=0。
例7-8 求f(x)=x-10x+2=0在x0=0.5附近的根。
步骤如下:
(1) 建立函数文件funx.m。
function fx=funx(x)
fx=x-10.^x+2;
(2) 调用fzero函数求根。
z=fzero('funx',0.5)
z =
Ytt
0.3758
第二种写法:fzero('x-10.^x+2',0.5)
第三种写法:
>> ff=inline('x-10.^x+2')
ff =
Inline function:
ff(x) = x-10.^x+2
>> fzero(ff,0.5)
ans =
0.3758
第四种写法(MatLab7.0以上):
Ytt
>> ff=@(x)(x-10.^x+2);
>> fzero(ff,0.5)
ans =
0.3758
对于非线性方程组F(X)=0,用fsolve函数求其数值解。fsolve函数的调用格式为:
X=fsolve('fun',X0,option)
fun是用于定义需求解的非线性方程组的函数文件名,X0是求根过程的初值,option为最优化工具箱的选项设定。最优化工具箱提供了20多个选项,使用optimset命令显示它们。optimset()函数可以改变其中某个选项。
例如,Display选项决定函数调用时中间结果的显示方式,其中‘off’为不显示,‘iter’表示每步都显示,‘final’只显示最终结果。optimset(‘Display’,‘off’)将设定Display选项为‘off’。
例7-9 求非线性方程组在(0.5,0.5) 附近的数值解。
(1) 建立函数文件myfun.m。
Ytt
function q=myfun(p)
x=p(1);
y=p(2);
q(1)=x-0.6*sin(x)-0.3*cos(y);
q(2)=y-0.6*cos(x)+0.3*sin(y);
(2) 在给定的初值x0=0.5,y0=0.5下,调用fsolve函数求方程的根。
x=fsolve('myfun',[0.5,0.5]',optimset('Display','off'))
x =
0.63
0.3734
将求得的解代回原方程,可以检验结果是否正确,命令如下:
Ytt
q=myfun(x)
q =
1.0e-009 *
0.2375 0.2957
与0的误差(0.2375 0.2957)×10-9
可见得到了较高精度的结果
lu、max、min、std、sort、interp1、interp2、polyfit、polyval、roots 非线性方程方程组需要描述成M文件
求向量的最大值和最小值
求一个向量X的最大值的函数有两种调用格式,分别是:
(1) y=max(X):返回向量X的最大值存入y,如果X中包含复数元素,则按模取最大值。
(2) (2) [y,I]=max(X):返回向量X的最大值存入y,最大值的序号存入I,如果X中包含复数元
Ytt
素,则按模取最大值。
求向量X的最小值的函数是min(X),用法和max(X)完全相同。
例6-1 求向量x的最大值。
命令如下:
x=[-43,72,9,16,23,47];
y=max(x) %求向量x中的最大值
[y,l]=max(x) %求向量x中的最大值及其该元素的位置
求矩阵A的最大值的函数有3种调用格式,分别是:
(1) max(A):返回一个行向量,向量的第i个元素是矩阵A的第i列上的最大值。
(2) [Y,U]=max(A):返回行向量Y和U,Y向量记录A的每列的最大值,U向量记录每列最大值的行号。
(3) max(A,[],dim):dim取1或2。dim取1时,该函数和max(A)完全相同;dim取2时,该
Ytt
函数返回一个列向量,其第i个元素是A矩阵的第i行上的最大值。
求最小值函数是min,其用法和max相同。
例6-2 分别求3×4矩阵x中各列和各行元素中的最大值,并求整个矩阵的最大值和最小值。
>> a=[1 2 3 40;5 60 7 8;9 10 11 12]
>> max(a)
ans =
9 60 11 40
>> [y,u]=max(a)
y =
9 60 11 40
u =
Ytt
3 2 3 1
>> [y,u]=max(a,[],1)
y =
9 60 11 40
u =
3 2 3 1
>> [y,u]=max(a,[],2)
y =
40
60
12
Ytt
u =
4
2
4
求标准方差
在MATLAB中,提供了计算数据序列的标准方差的函数std。对于向量X,std(X)返回一个标准方差。对于矩阵A,std(A)返回一个行向量,它的各个元素便是矩阵A各列或各行的标准方差。std函数的一般调用格式为:
Y=std(A,flag,dim)
其中dim取1或2。当dim=1时,求各列元素的标准方差;当dim=2时,则求各行元素的标准方差。flag取0或1,当flag=0时,按σ1所列公式计算标准方差,当flag=1时,按σ2所列公式计算标准方差。缺省flag=0,dim=1。
MATLAB中对向量X是排序函数是sort(X),函数返回一个对X中的元素按升序排列的新向量。
Ytt
sort函数也可以对矩阵A的各列或各行重新排序,其调用格式为:
[Y,I]=sort(A,dim)
其中dim指明对A的列还是行进行排序。若dim=1,则按列排;若dim=2,则按行排。Y是排序后的矩阵,而I记录Y中的元素在A中位置。
在MATLAB中,实现这些插值的函数是interp1,其调用格式为:
Y1=interp1(X,Y,X1,'method')
函数根据X,Y的值,计算函数在X1处的值。X,Y是两个等长的已知向量,分别描述采样点和样本值,X1是一个向量或标量,描述欲插值的点,Y1是一个与X1等长的插值结果。method是插值方法,允许的取值有‘linear’、‘nearest’、‘cubic’、‘spline’。
注意:X1的取值范围不能超出X的给定范围,否则,会给出“NaN”错误。
MATLAB中有一个专门的3次样条插值函数Y1=spline(X,Y,X1),其功能及使用方法与函数Y1=interp1(X,Y,X1,‘spline’)完全相同。
例6-10 用不同的插值方法计算在π/2点的值。
Ytt
>> x=[0.2 9];
>> y=[3 17];
>> x1=pi/2;
>> y1=interp1(x,y,x1,'linear')
y1 =
5.1808
>> y1=interp1(x,y,x1,'spline')
y1 =
5.1808
二维数据插值
在MATLAB中,提供了解决二维插值问题的函数interp2,其调用格式为:
Ytt
Z1=interp2(X,Y,Z,X1,Y1,'method')
其中X,Y是两个向量,分别描述两个参数的采样点,Z是与参数采样点对应的函数值,X1,Y1是两个向量或标量,描述欲插值的点。Z1是根据相应的插值方法得到的插值结果。 method的取值与一维插值函数相同。X,Y,Z也可以是矩阵形式。
同样,X1,Y1的取值范围不能超出X,Y的给定范围,否则,会给出“NaN”错误。
例6-12 某实验对一根长10米的钢轨进行热源的温度传播测试。用x表示测量点0:2.5:10(米),用h表示测量时间0:30:60(秒),用T表示测试所得各点的温度(℃)。试用线性插值求出在一分钟内每隔20秒、钢轨每隔1米处的温度TI。
x=0:2.5:10;
h=[0:30:60]';
T=[95,14,0,0,0;88,48,32,12,6;67,,,48,41];
xi=[0:10];
hi=[0:20:60]';
Ytt
TI=interp2(x,h,T,xi,hi)
求最小二乘拟合多项式的系数,再用polyval函数按所得的多项式计算所给出的点上的函数近似值。
polyfit函数的调用格式为:
[P,S]=polyfit(X,Y,m)
函数根据采样点X和采样点函数值Y,产生一个m次多项式P及其在采样点的误差向量S。其中X,Y是两个等长的向量,P是一个长度为m+1的向量,P的元素为多项式系数。
polyval函数的功能是按多项式的系数计算x点多项式的值。
例6-14 已知数据表[t,y],试求2次拟合多项式p(t),然后求ti=1,1.5,2,2.5,…,9.5,10各点的函数近似值。
>> X=[-1 2 3 4 5 6 7 8 9 12]
>> Y=[13 10 9 8 7 6 5 4 -3 -10]
>> [P,S]=polyfit(X,Y,9)
Ytt
P =
Columns 1 through 6
0.0000 -0.0018 0.0347 -0.3628 2.2252 -7.9966
Columns 7 through 10
15.1782 -8.5020 -16.2553 S =
R: [10x10 double]
df: 0
normr: 2.8602e-010
>> ti=1:0.5:10;
>> polyval(P,ti)
31.0462
Ytt
ans =
Columns 1 through 9
15.3658 11.5913 10.0000 9.3936 9.0000 8.5334 8.0000 7.4800 7.0000
Columns 10 through 18
6.5205 6.0000 5.4639 5.0000 4.6228 4.0000 2.1091 -3.0000 -14.0312
Column 19
-33.3880
polyval函数求代数多项式的值,格式为:
Y=polyval(P,x)
若x为一数值,则求多项式在该点的值;若x为向量或矩阵,则对向量或矩阵中的每个元素求其多项式的值。
Ytt
例6-19 已知多项式x4+8x3-10,分别取x=1.2和一个2×3矩阵为自变量计算该多项式的值。
>> x=[1 8 0 0 -10];
>> y1=polyval(x,1.2)
y1 =
5.76
>> a=[1 2 3;4 5 6];
>> y1=polyval(x,a)
y1 =
-1 70 287
758 1615 3014
n次多项式具有n个根,当然这些根可能是实根,也可能含有若干对共轭复根。MATLAB提供的roots函数用于求多项式的全部根,其调用格式为:
Ytt
x=roots(P)
其中P为多项式的系数向量,求得的根赋给向量x,即x(1),x(2),…,x(n)分别代表多项式的n个根。
五. 科学计算的可视化
熟练掌握图像的绘制方法;动画生成的方法步骤;plot、plot3、ezplot、hold(加上的on区别)、title、xlabel、ylabel、text、legend(图列)、subplot(生成只读)动画不用掌握函数,但要掌握原理
绘制单根二维曲线
plot函数的基本调用格式为:
plot(x,y)
其中x和y为长度相同的向量,分别用于存储x坐标和y坐标数据。
hold on/off命令控制是保持原有图形还是刷新原有图形,不带参数的hold命令在两种状态之间进行切换。
hold on
Ytt
hold off
hold
图形标注
有关图形标注函数的调用格式为:
title(图形名称)
xlabel(x轴说明)
ylabel(y轴说明)
text(x,y,图形说明)
legend(图例1,图例2,…)
x=0:pi/100:2*pi;
y1=2*exp(-0.5*x);
Ytt
y2=cos(4*pi*x);
plot(x,y1,x,y2)
title('x from 0 to 2{\\pi}'); %加图形标题
xlabel('Variable X'); %加X轴说明
ylabel('Variable Y'); %加Y轴说明
text(0.8,1.5,'曲线y1=2e^{-0.5x}'); %指定位置添加说明
text(2.5,1.1,'曲线y2=cos(4{\\pi}x)');
legend('y1', 'y2') %加图例
subplot函数的调用格式为:
subplot(m,n,p)
该函数将当前图形窗口分成m×n个绘图区,即每行n个,共m行,区号按行优先编号,且选定第p个区为当前活动区。在每一个绘图区允许以不同的坐标系单独绘制图形。
Ytt
MATLAB提供了一个ezplot函数绘制隐函数图形,下面介绍其用法。
(1) 对于函数f = f(x),ezplot函数的调用格式为:
ezplot(f):默认区间-2π ezplot(f):在默认区间-2π ezplot(x,y):在默认区间0 Ytt subplot(2,2,1); ezplot('x^2+y^2-9');axis equal subplot(2,2,2); ezplot('x^3+y^3-5*x*y+1/5') subplot(2,2,3); ezplot('cos(tan(pi*x))',[ 0,1]) subplot(2,2,4); ezplot('8*cos(t)','4*sqrt(2)*sin(t)',[0,2*pi]) plot3函数与plot函数用法十分相似,其调用格式为: plot3(x1,y1,z1,选项1,x2,y2,z2,选项2,…,xn,yn,zn,选项n) 其中每一组x,y,z组成一组曲线的坐标参数,选项的定义和plot函数相同。当x,y,z是同维向量时,则x,y,z 对应元素构成一条三维曲线。当x,y,z是同维矩阵时,则以x,y,z对应列元素绘制三维曲线, Ytt 曲线条数等于矩阵列数。 t=0:pi/100:20*pi; x=sin(t); y=cos(t); z=t.*sin(t).*cos(t); plot3(x,y,z); title('Line in 3-D Space'); xlabel('X');ylabel('Y');zlabel('Z'); grid on; 六. 文件的输入输出 数据文件的格式、文件读写函数、fopen、fclose、fread、fwrite、fscanf、fprintf Ytt fopen函数的调用格式为: fid= fopen(文件名,打开方式) 文件名:待打开的数据文件; 打开方式:‘r’读文件,‘w’写文件,‘a’末尾追加数据; fid:文件句柄值,用来标识该数据文件,其他函数可以利用它对该数据文件进行操作。 文件在进行完读、写等操作后,应及时关闭。关闭文件用fclose函数,调用格式为: sta=fclose(fid) 该函数关闭fid所表示的文件。sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回–1。 二进制文件的读写: fread 函数可以读取二进制文件的数据,并将数据存入矩阵。其调用格式为: [A,COUNT]=fread(fid,size, precision) Ytt 其中A用于存放读取的数据,COUNT返回所读取的数据元素个数,fid为文件句柄,size为可选项,若不选用则读取整个文件内容,若选用则它的值可以是下列值: (1) N表示读取 N个元素到一个列向量。 (2) (2) Inf表示读取整个文件。 (3) (3) [M,N]表示读数据到M×N的矩阵中,数据按列存放。 (4) precision代表读写数据的类型 fwrite 函数按照指定的数据类型将矩阵中的元素写入到文件中。其调用格式为: COUNT=fwrite (fid, A, precision) 其中COUNT返回所写的数据元素个数,fid为文件句柄,A用来存放写入文件的数据,precision用于控制所写数据的类型,其形式与fread函数相同。 例3-1 建立一数据文件magic5.dat,用于存放5阶魔方阵。 程序如下: Ytt fid=fopen(‘magic5.dat’,‘w’); cnt=fwrite(fid,magic(5),‘int32’); fclose(fid); fid=fopen(‘magic5.dat’,‘r’); [A,cnt]=fread(fid,‘int32’); fclose(fid); 文本文件的读写: 读文本文件 fscanf 函数的调用格式为: [A,COUNT]= fscanf (fid, format, size) 其中A用以存放读取的数据,COUNT返回所读取的数据元素个数。fid为文件句柄。format用以控制读取的数据格式,由%加上格式符组成,常见的格式符有d,f,c,s。 Ytt size为可选项,决定矩阵A中数据的排列形式 2.写文本文件 fprintf 函数的调用格式为: COUNT= fprintf(fid, format, A) 其中A存放要写入文件的数据。先按format指定的格式将数据矩阵A格式化,然后写入到fid所指定的文件。格式符与fscanf函数相同。 三个基本步骤 文件格式 七. 句柄图形及GUI 高级绘图函数与低级绘图的区别(干什么用的); • 高级绘图函数——是对整个图形进行操作的,图形每一部分的属性都是按缺省方式设置的,充分体现了matlab语言的实用性。 • 低级绘图函数——可以定制图形,对图形的每一部分进行控制,用户可以用来开发用户界面以及各专业的专用图形。充分体现了matlab语言的开发性 Ytt 句柄图形的概念; • 句柄图形(Handle Graphics) :利用低级绘图函数,通过对对象属性的设置与操作实现绘图。 图形对象系统结构; 句柄数据格式; 对象属性的继承操作; • 对象属性的继承操作是通过父代(或更上代)对象,设置省缺对象属性来实现的。 • 父代(或更上代)句柄属性中设置省缺值后,所有子代(包括更下代)对象均可以继承该属性的省缺 Ytt 值。 • 缺省属性值的描述结构为: Dfault+对象名称+对象属性 GUI的概念(结构,每一层怎么表示的例子) 图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面 figure、line、text、surface、gcf、gca、gco、(通用get、set(例子中的属性) • figure创建图形窗口 调用格式: h=figure(n) n为窗口序号 • line 创建线对象 h=line(x,y,z) • text 标注文字 Ytt h=text(x,y,’string’) • surface 创建面对象 h=surface(x,y,z,c) x,y,z三维曲面坐标,c颜色矩阵。 • 句柄属性的设置与修改 get: 获得句柄图形对象的属性和返回某些 对象的句柄值 set: 改变图形对象的属性 • 专用函数: gcf:当前窗口对象的句柄 Get Current Figure gca:当前轴对象的句柄 Get Current Axes gco:当前对象的句柄 Get Current Object Ytt • 操作格式: h=gcf 或h=gcf( ) 返回当前窗口对象句柄 get(h)或get(gcf) 查阅当前窗口对象的属性 delete(gcf) 删除当前窗口的属性 例:h=line(x,y) get(h) 获取对象属性 get(get(gca,’children’) 获取当前轴的子代对象属性 创建一个线对象并返回线对象的句柄值 h1=line([0:10],[0:10]) h1 = 57.0001 Ytt h1为句柄的代码值 提型:填空,判断,写出运行结果,写一段代码 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- xiaozhentang.com 版权所有 湘ICP备2023022495号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务