当前位置:文档之家› Matlab常用命令{1}

Matlab常用命令{1}


% %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 [Jack b Help Me! c] NO WAY!] 经测试,完全正确的程序。

如果只给出一个输入参数,则会自动生成一个方阵,即令 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.
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)。我们想在编写的 函数中实现下面几点:
就可以得到答案:x-x*cos(2*x)+x^2*sin(2*x)
MATLAB 的语句流程与控制
作为一种常用的编程语言,MATLAB 支持各种流程控制结构,如循环结构、条件转移结构、客观结构等另 外 MATLAB 还支持一种新的结构 --- 试探结构。 循环语句有两种结构: for ... end 结构和 while ... end 结构。 这两种语句结构不完全相同,各有各的特色。 for ... end 语句通常的调用格式为: for 循环变量=s1:s3:s2 循环体语句组 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 开关结构: 例如: 想由 MATLAB 求出 1+2+...+100 的值, 可以作下列的循环: >> mysum=0; for i=1:1:100,mysum=mysum+i; end; mysum
产生随机排列:p = randperm(n) 如何产生线性等分向量: y = linspace(a,b) y = linspace(a,b,n) 计算矩阵中元素个数: out = blkdiag(a,b,c,d,…) 几种比较特殊的矩阵: 多项式系数的友矩阵:
%在(a, b)上产生 100 个线性等分点 %在(a, b)上产生 n 个线性等分点 n = numel(a) %返回矩阵 A 的元素的个数
正态分布随机矩阵:randn(n,m) 产生均值为 0.6,方差为 0.1 的 4 阶矩阵 >> mu=0.6; sigma=0.1; >> x=mu+sqrt(sigma)*randn(4) x = 0.8311 0.7827 0.6127 0.8141 0.7799 0.5192 0.4806 0.5064 0.1335 0.5260 0.6375 0.6996 1.0565 0.4890 0.7971 0.8527 %产生 1~n 之间整数的随机排列
2.用命令 syms 定义矩阵 先定义矩阵中的每一个元素为一个符号变量,而后像普通矩阵一样输入符号矩阵。 >> syms a b c ; >> M1 = sym('Classical') ; >> M2 = sym(' Jazz') ; >> M3 = sym('Blues') >> syms_matrix = [a b syms_matrix =[ [ a 2 c; M1, M2, M3;int2str([2 b 3 c] 5] 3 5])]
2 0 -2 4 2 0 或用另一种原始方式可以定义: >> A1=[1,2,3;4,5,6;7,8,9];A2=A1';A3=A1-A2; >> A5(:,:,1)=A1, A5(:,:,2)=A2, A5(:,:,3)=A3 几种特殊的矩阵的生成: 全零矩阵 Zeros( [n,m…] ) 单位矩阵 Eye([n,m…]) 全一矩阵 Ones([n,m…]) 均匀分布随机矩阵: rand 产生一个介于[0,1]的随机数。 产生一个在区间[10, 20]内均匀分布的 4 阶随机矩阵 >> a=10;b=20; >> x=a+(b-a)*rand(4) x= 19.2181 17.3821 11.7627 14.0571 19.3547 19.1690 14.1027 18.9365 10.5789 13.5287 18.1317 10.0986 11.3889 12.0277 11.9872 16.0379 %rand 本身产生的数大于零而小于一。 结果跟上面的相同。
x3 7 x 6
的友矩阵和根
%A 的特征值就是多项式的根
>> h=hadamard(4) h= 1 1 1 1 -1 1 -1 1 1 -1 -1 1 -1 -1 1 %第 1 列元素为 c,反三角以下元素为 0。 %第 1 列元素为 c,最后一行元素为 r,如果 c 的最后一个元素与 r 的第一个元素不同, 1
如何画三维图形? 考虑一个二元函数,如何用三维图形来表现这个曲面呢?
>>[x,y] = meshgrid(-3:1/8:3);
生成网格线
meshgrid (X)=meshgrid(X,Y)
>>z = 3*(1-x).^2.*exp(-(x.^2) - (y+1).^2)- 10*(x/5 - x.^3 - y.^5) .*exp(-x.^2-y.^2)- 1/3*exp(-(x+1).^2 - y.^2); >>surf(x,y,z), shading interp; colorbar 假设一个一元方程为 如何对其求导数? >>syms x; >>f=’x^2*(sin(x))^2’; >>diff(f); >>simple(ans); 如何求出高阶导数呢? >>diff(f,x,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 或者 diff(f,2) 指出以 x 为变量 列出方程式 算出一阶导数 化简结果 利用函数 surf 来画图。其他的都是修饰函数。
相关主题