[m,n]=size(x); if m==1
m=n end
mean=sum(x)/m;
stdev=sqrt(sum(x.^2)/m-mean.^2); stat表明返回多输出变量是可能的.
又如:使用多输入变量计算矩阵秩函数
function r=rank(x,tol) % rank of a matrix s=svd(x); if(nargin==1)
tol=max(size(x))*s(1)*eps; end
r=sum(s>tol);
这个变量说明利用永久变量nargin确定输入变量的个数,变量nargout虽然这里没有使用,但它包含有输出变量的个数.
一些有用的说明:
当M函数文件第一次在Matlab运行时,它被编译并放入内存,以后使用时不用重新编译即可得到.
what命令:显示磁盘当前目录中的M文件, dir命令:列出所有文件.
一般而言,输入一个名字到Matlab,例如键入whoopie命令,Matlab用以下步骤解释: (1) 看whoopie是否为变量.
(2) 检验whoopie是否为在线函数. (3) 检验whoopie文件的当前目录.
(4) 将whoopie看成Matlab的PATH中的一个文件,在Matlab PATH目录中搜索. 如果whoopie存在,Matlab首先将其作为变量而不是作为函数.
§5.4 字符串、输入及输出
§5.4.1 echo、input、pause、keyboard
一般来说,当一个M文件运行时,文件的命令不在屏幕上显示,而echo命令则使M文件运行时,命令在屏幕上显示,这对于调试、演示相当有用.
input功能:输入Input('How many apples')给用户一个提示串,等待,然后显示用户通过键盘输入的大量表达式.可以用input命令建立驱动M文件的菜单.
与input功能相同,但功能更强的keyboard命令将计算机作为一个命令文件来调用,放入M文件中,此特性对调试或正在运行期间修改变量很有用.
pause命令:使用户暂停运行一个程序,当再按任一键时恢复执行,pause(n)等待n秒钟后再继续执行.
§5.4.2串和宏串
字符串用单个引号输入到Matlab中,例如:
s='Hello' 结果显示为:
s =
Hello
字符存在向量中,每个元素就是一个字符,如:
size(s) ans =
1 5
33
表明S为一个1×5的矩阵,有五个元素.字符以ASCII值存入,abs函数或double函数将显示以下值(即Hello的ASCII值)
abs(s) ans =
72 101 108 108 111
getstr函数,使向量作为字符显示,而不显示ASCII值.
disp可在变量中显示字符.sprintf, num2str和int2str可以将数字转换成串. 字符变量通过括号连成大串.例如: s='hello'; s=[s,' world'] s =
hello world
eval是与字符变量—起工作的函数,执行简单字符宏调用.eval( t )执行包含在t内的字符.如果t是任何Matlab表达式或语句的源字符,则字符串被解释执行.例如:
t='eye(2)', eval(t) 结果为:
ans=
1 0 0 1
又例如,给矩阵元素赋值
t='1/(i+j-1)'; for i=1:n
for j=1:n a( i, j)=eval(t);
end end
这儿有一个例子,介绍如何一起使用eval与load命令,装入十个具有顺序文件名的文件中的数据:
fname='mydata'; for i = 1:10
eval([ 'load ', fname, int2str( i )]) end §5.4.3外部程序
Matlab与外部独立程序的通讯方式可以是多种多样的,下面介绍其中的一个办法: (1) Matlab中将变量存入磁盘
(2) 运行外部程序(读数据文件,进行处理),将结果写到磁盘上 (3) 将处理后的文件装回到工作空间中
例如:用外部程序gareqn找garfield方程的结果:
function y=garfield(a,b,q,r) save gardata a,b,q,r ! gareqn load gardata
使用FORTRAN或其它语言写gareqn程序,使其可以读gardata.mat,进行处理,将结果存入文件中.
这个程序可将计算机的“连接码”提供给Matlab,在许多系统中它将新的目标码连接到程序中比物理联接要方便得多.
§5.4.4输入输出数据
可使用各种方法将其它程序和外部世界的数据送入Matlab,同样可把Matlab数据输送到外部世界,使你的程序以Matlab使用的文件形式直接计算数据.
最好的方法取决于多少数据,数据是否可读,什么形式等: (1) 清晰的元素表输入:
34
如果你有少量数据,比如说小于10~15个元素,使用方括号[]输入.
(2) 使用文本编辑建立命令文件,将数据列为清晰的元素表输入.如果数据不是可读形式,又不得不以一种方法键入,可以重复运行M文件,重复修改数据.
(3) 如果数据以ASCII形式存贮,并有固定长度,行尾有回车符,各数间有空格的文件称为flat file(ASCII的flat file可由普通文本编辑来编辑),flat file通过load命令直接读进Matlab,结果存入名为文件名的变量中去.
(4) 将数据文件译成Matlab文件形式,使用load命令,translate程序由Matlab中的应用程序库支持,translate程序将ASCII文件、二进制文件、FORTRAN非格式文件和DIF文件转换为Matlab使用的特定的MAT文件,当磁盘文件中存有大量数据时,这个方法输入最好.
Matlab数据输出到外部世界的方法:
(1) 小矩阵时:使用diary命令建立日志文件,在文件中列出变量,用文本编辑处理日志文件,日志的输出包括运行中的Matlab命令.
(2) 使用save命令存入变量,退出Matlab,用translate程序将MAT文件转换成任一种其它文件形式.
第六节 Matlab符号运算
Matlab本身并没有符号计算功能,1993年通过购买Maple的使用权后,开始具备符号运算的功能.符号运算的类型很多,几乎涉及数学的所有分支.
§6.1 Matlab符号运算的工作流程
§6.1.1工作过程
§6.1.2 核心工具
sym函数 VS syms 语句 sym函数:构造符号变量和表达式: a=sym('a') (Construct symbolic numbers, variables and objects)
syms语句:构造符号对象的简捷方式(Short-cut for constructing symbolic objects) §6.1.3 符号变量确定原则
(1)除了i 和j之外,字母位置最接近x的字母;若距离相等,则取ASCII码大的; (2)若没有除了i 与j以外的字母,则视x为默认的符号变量;
(3)可利用函数findsym(string,N)来询问在众多符号中,哪N个为符号变量.例如:键入findsym(3*a*b+y^2,1),即可得到答案y.更多的例子见下表:
符号表达式 默认符号变量 a*x^2+b*x+c x 1/(4+cos(t)) t 4*x/y x 2*a+b b 2*i x
35
§6.2 Matlab的六大常见符号运算
§6.2.1 因式分解
syms x f=x^6+1; s=factor(f) 结果为:
s=(x^2+1)*(x^4-x^2+1) §6.2.2 计算极限
求极限:
(1) L?limh?0ln(x?h)?ln(x),hxn)n
(2)M?lim(1?n?? syms h n x
L=limit('(log(x+h)-log(x))/h',h,0) %%单引号可省略掉 M=limit('(1-x/n)^n',n,inf) 结果为: L =1/x
M =exp(-x) §6.2.3 计算导数
dydyd2yy?sinax,求A?,B?,C?dxdadx2.
syms a x; y=sin(a*x);
A=diff(y,x) B=diff(y,a) C=diff(y,x,2) 结果为:
A = cos(a*x)*a B = cos(a*x)*x
C = -sin(a*x)*a^2
§6.2.4 计算不定积分、定积分、反常积分
x2?1I?dx22(x?2x?2), ?/2cosxJ?dxsinx?cosx0,
??K??0??e?xdx.
2 syms x
f=(x^2+1)/(x^2-2*x+2)^2; g=cos(x)/(sin(x)+cos(x)); h=exp(-x^2); I=int(f)
J=int(g,0,pi/2)
36
相关推荐: