标题: MATLAB常用命令举例 [打印本页] 作者: wyt111 时间: 2010-3-4 20:48 标题: MATLAB常用命令举例 假设一个一元方程为
如何对其求导数?
>>syms x; 指出以x为变量
>>f=’x^2*(sin(x))^2’; 列出方程式
>>diff(f); 算出一阶导数
>>simple(ans); 化简结果
就可以得到答案:x-x*cos(2*x)+x^2*sin(2*x)
如何求出高阶导数呢?
>>diff(f,x,2); 或者diff(f,2)
>>simple(ans);
就可以求出高(2)阶导数:(2*cos(x)^2-2*sin(x)^2)*x^2+8*x*sin(x)*cos(x)+2*sin(x)^2
如何求出积分呢?
>>int(f,x);
就可求得一阶积分:x^2*(-1/2*cos(x)*sin(x)+1/2*x)-1/2*x*cos(x)^2+1/4*cos(x)*sin(x)+1/4*x-1/3*x^3
如何求泰勒展式呢?
>>taylor(f,15,x); 一直展开到15阶。
就可以得到函数f的泰勒展式: x^4-1/3*x^6+2/45*x^8-1/315*x^10+2/14175*x^12-2/467775*x^14
MATLAB 的语句流程与控制
作为一种常用的编程语言,MATLAB 支持各种流程控制结构,如循环结构、条件转移结构、客观结构等另外 MATLAB 还支持一种新的结构 --- 试探结构。 循环语句有两种结构: for ... end 结构和 while ... end 结构。 这两种语句结构不完全相同,各有各的特色。
for ... end 语句通常的调用格式为: 例如:想由 MATLAB 求出 1+2+...+100 的值,可以作下列的循环:
for 循环变量=s1:s3:s2 >> mysum=0; for i=1:1:100,mysum=mysum+i; end; mysum
循环体语句组
end
同样的问题在 while 循环结构下可以表示为
mysum = 0; i=1; while (i<=100), mysum=mysum+i; i=i+1; end
条件转移语句:和 C 语言相象
if 条件式1
条件块语句组1
elseif 条件式2
条件块语句组2
...
else
条件块语句组n+1
end
开关结构:
switch 开关表达式
case 表达式1
语句段1
case {表达式2,表达式3,..., 表达式m}
语句段2
...
otherwise
语句段n
end
试探结构:MATLAB 从 5.2 版本开始提供了一种新的试探式语句结构,其一般的形式为:
try
语句段1
catch
语句段2
end
本语句结构首先试探性地执行语句段 1,如果在此段语句执行过程中出现错误,则将错误信息赋给保留的 lasterr 变量,并放弃这段语句,转而执行语句段 2 中的语句。这种新的语句结构是 C 等语言中所没有的。
M-function的编写:
MATLAB 的 M 函数是由 function 语句引导的,其基本格式如下:
function [返回变量列表] = 函数名 (输入变量列表)
注释说明语句段, 由 % 引导
输入、返回变量格式的检测
函数体语句
这里输入和返回变量的实际个数分别由 nargin 和 nargout 两个 MATLAB 保留变量来给出,只要进入该函数,MATLAB 就将自动生成这两个变量,不论您是否直接使用这两个变量。返回变量如果多于 1 个,则应该用方括号将它们括起来,否则可以省去方括号。输入变量和返回变量之间用逗号来分割。注释语句段的每行语句都应该由百分号 % 引导,百分号后面的内容不执行,只起注释作用。用户采用 help 命令则可以显示出来注释语句段的内容。此外,正规的变量个数检测也是必要的。如果输入或返回变量格式不正确,则应该给出相应的提示。我们将通过下面的例子来演示函数编程的格式与方法。
例子:
假设我们想生成一个 nxm 阶的 Hilbert 矩阵, 它的第 i 行第 j 列的元素值为 1/(i+j-1)。我们想在编写的函数中实现下面几点:
· 如果只给出一个输入参数,则会自动生成一个方阵,即令 m=n
· 在函数中给出合适的帮助信息,包括基本功能、调用方式和参数说明
· 检测输入和返回变量的个数,如果有错误则给出错误信息
如果调用时不要求返回变量,则将显示结果矩阵。其实在编写程序时养成一个好的习惯,无论对程序设计者还是对程序的维护者、使用者都是大有裨益的。
采用 MATLAB 函数编写格式和上述要求,我们可以编写出一个函数
function A=myhilb(n, m)
%MYHILB a demonstrative M-function.
% A=MYHILB(N, M) generates an N by M Hilbert matrix A.
% A=MYHILB(N) generates an N by N square Hilbert matrix.
% MYHILB(N,M) displays ONLY the Hilbert matrix, but do not return any
% matrix back to the calling function.
%
%See also: HILB.
% Designed by Professor Dingyu XUE, Northeastern University, PRC
% 5 April, 1995, Last modified by DYX at 21 March, 2000
if nargout>1, error('Too many output arguments.'); end
if nargin==1, m=n;
elseif nargin==0 | nargin>2
error('Wrong number of iutput arguments.');
end
A1=zeros(n,m);
for i=1: n
for j=1:m
A1(i,j)=1/(i+j-1);
end, end
if nargout==1, A=A1; elseif nargout==0, disp(A1); end 经测试,完全正确的程序。
如何输入复数矩阵?
两种方法 -,直接输入 a+bi ;=,先生成 实数矩阵 A B,然后生成 C=A+Bi
如何生成符号矩阵?
1.用命令sym定义矩阵:
这时的函数sym实际是在定义一个符号表达式,这时的符号矩阵中的元素可以是任何的符号或者是表达式,而且长度没有限制,只是将方括号置于用于创建符号表达式的单引号中。如下例:
>> sym_matrix = sym('[a b c;Jack,Help Me!,NO WAY!]')
sym_matrix =[a b c]
[Jack Help Me! NO WAY!]
2.用命令syms定义矩阵
先定义矩阵中的每一个元素为一个符号变量,而后像普通矩阵一样输入符号矩阵。
>> syms a b c ;
>> M1 = sym('Classical');
>> M2 = sym(' Jazz');
>> M3 = sym('Blues')
>> syms_matrix = [a b c; M1, M2, M3;int2str([2 3 5])]
syms_matrix =[ a b c]
[Classical Jazz Blues]
[ 2 3 5]