matlab基本语法和运算基础
转载自:http://blog.csdn.net/robertcalm/article/details/51582253
matlab语法比较随意,但正如其全名 matrix &laboraty(矩阵实验室)所言,相比于其他语言,它可以非常便捷实现矩阵运算,就像我们标量的加减乘除一样简单。对于矩阵运算的强大支持和强大数学和科学计算函数库也垫定了其可以广泛应用在各种科学计算中,研究人员可以快速的使用matlab验证一个算法,使用matlab验证算法相比C/C++/JAVA等工作量小了很多,算法验证达到了一个较好的效果,我们也可以比较迅速的使用C、C++等语言把它用到实际工程和产品中去。本文主要介绍一下matlab一些比较重要且和C/C++等语言等常用语言不太一样的概念和基础矩阵运算方法。
一·支持的数据类型
matlab是一门以矩阵运算为基础语言,标量运算也可以看成1*1矩阵之间的运算。
1·元胞数组:元胞是元胞数组的基本组成成分,元胞数组与数字数组相似,以下标来区分,单元胞数组和元胞内容两部分组成。用花括号{}表示元胞数组的内容,用圆括号()表示元胞元素,与一般数字数组不同,元胞可以存放任何类型、任何大小的数组,而且一个元胞数组各元素的内容可以不同。
2·结构数组:与元胞数组类似,结构数组也能存放各类数据,使用指针方式传递数值,结构数组由结构变量名 和属性名组成,用操作符.来连接结构变量名和属性名。parameter.temperaure 表示温度。
3·对象: 当创建应用软件时,你所要描述的类别或事物可能是实际的对象,如汽车或是一个有机体,可能是一个虚拟实体,如金融市场,也可能是信息,如一组测试结果。在面向对象的程序设计中,这些类别以“类”的概念表达。数据元素或状态表示为类的属性。matlab也支持面向对象编程。
二·关系运算和逻辑运算
1·逻辑运算:&逻辑与,~逻辑非,|逻辑或。
2·关系运算函数:all(A):A向量所有向量为非零元素时为真。xor():异或。any(A):A中任何一向量为非零元素时为真。
3·逻辑运算函数:bitand():按位与 。 bitcmp():位比较。bitor():按位或。bitmax():最大无符号浮点整数。bitxor():位方式逻辑异或 bitshift():将二进制移位运算。
三·矩阵及其运算
1·一般矩阵生成和特殊矩阵生成函数
1·1一般矩阵生成:矩阵以左方括号“[”开始,以右方括号“]”结束。每一行元素用分号或回车结束,每个元素之间用空格或逗号隔开。此外矩阵建立还可以靠读入数据。
1·2特殊矩阵生成函数
zeros():生成全为零的矩阵。tril():生成下三角矩阵
ones():生成元素全为1矩阵。eye():生成单位矩阵
rand():生成均匀分布随机矩阵。randn():生成正态分布所及矩阵
magic():生成魔方矩阵。 hilb():生成希尔伯特矩阵
vander():生成vander矩阵。diag():生成对角矩阵
hankel():生成hankel矩阵。 triu():生成上三角矩阵
hadamard():生成hadamard矩阵
2·矩阵运算
A矩阵转置:A’。A矩阵对数运算:logm(A)。
矩阵的指数运算:expm(A)。矩阵求逆:inv(A)。
矩阵逆时钟旋转90度:rot90()。计算矩阵特征值和特征向量:eig().
矩阵上下翻动:flipud(). 计算矩阵的秩:rank()。
矩阵左右翻动:fliplr(). 计算矩阵的迹:trace().
矩阵某维元素翻转:flipdim()。计算矩阵的2范数:norm()。
矩阵元素移位:shiftdim()。计算矩阵特征方程的根:ploy()。
3·矩阵分解函数
矩阵的特征值分解:eig().矩阵的奇异值分解:svd().
矩阵的QR分解:qr(). 矩阵的cholesky分解:chol()
矩阵的schur分解:shur()。 矩阵的LU分解:lu().
四·符号运算
1·符号运算基本语法
数值运算必须先对变量赋值再运算,然后才能参与运算。符号运算无须事先的运算对象可以使没有赋值的符号变量,可以获得任意精度的解。
1·符号表达式可以代表数字、函数、算子、变量的matlab字符串。
2·建立单个符号量:符号量名 = sym(‘符号表达式’)。
syms 符号表达式1 符号表达式2 符号表达式3 表达式4;
2·符号矩阵
符号矩阵也是一种符号表达式,所以前面介绍符号表达式运算也可以在矩阵意义下进行,但应该注意这些函数作用于符号矩阵时,是分别用于矩阵的每个元素。比如A =sym(‘[a,3*b;3*a,c]’);由于符号矩阵是一个矩阵,所以它可以进行矩阵相关运算(diag,tril,det等函数)。
numeric(A):将符号矩阵转化为数值矩阵。
tranpose(A):返回A的装置矩阵
determ(A):返回矩阵的行列式值
3·符号表达式的4则运算
对符号表达式或或符号矩阵A进行因式分解:factor(A);
对符号表达式或符号矩阵A进行展开:expand(A)
对符号表达式或符号矩阵A进行合并同类项:collect(A)
应用函数规则对A进行简化:simplify(A)
对函数进行综合简化:simple(A)
对函数f关于x求n阶导数:diff(f,x,n)
求积分最常用函数:int(f,r,x0,x1) 其中f为积分表达,r为积分变量,
x0和x1为积分上下限。没有上下限则求得的是不定积分。
subs(f,{x},{x的实际值})给表达式中的x赋实际值并计算。
五·复数运算
*1·基本运算操作
复数表达式构造利用i,j直接写,也可以额利用符号函数来构造。也可以写成极坐标的形式。
polar(theta,rho)画出极坐标图,其中theta为极坐标极角,rho为极坐标失径。
real(A)求复数A的实部 conj(A) 求A的共轭
imag(A) 求复数A的虚部 abs(A)求A的模
angle(A) 求A的相角
[r,p,k]= residue([an-1,…,a0],[bn-1,…,b0]);求解有理分式的留数。其中r为留数,p对应的各奇点。
2·泰勒展开和Fourier变换
taylor(f):返回函数f的五次多项式近似,函数f的自变量有函数findsym决定。
taylor(f,n):返回n-1次幂多项式,函数f自变量由findsym决定。
taylor(f,a):返回a点附近的五次幂多项式近似。
taylor(f,x):返回指定变量x的五次幂多项式近似。
fourier(f):返回以默认变量x为数量符号f的Fourier变换,其中变换后函数默认以w为自变量。
fourier(f,v):以v替代w为变换后的函数自变量。
fourier(f,u,v):以v替代w,以u提到x
ifourier也是类似的。
拉普拉斯变换用法:laplace 和ilaplace都是类似的。
Z变换用法:ztrans和iztrans也是类似的。
六·matlab的绘图
1·plot(x1,y1,option1,x2,y2,option2);画二维曲线
2·plot3(x1,y1,z1,option1,x2,y2,z2,option2);画三维 曲线
3·mesh(X,Y,Z,C);画三维网格曲面X,Y,Z为矩阵
4·surf(X,Y,Z,C);画三维阴影曲面,X,Y,Z为矩阵
5·[X,Y]=meshgird(x,y);将矩阵X的每一行都为向量x
6·view(beta,theta),选择三维图角度,其中beta为方位角,theta为视角。
7·hist(Y,X)以X为统计范围统计,绘制出Y分布直方图
8·rose(thera,x)以向量x为统计范围,在极坐标下统计thera的直方图分布。
9·bar(data,’mode’)用来画柱状图,mode默认是‘grouped’模式,这时bar函数把数组data每一行看作一组,画在一个水平坐标位置。若指定为‘stacked’则把每一组数据叠加起来绘图。barh水平放置的柱状图。
三维柱状图bar3() bar3h()也是类似。
10·面积图 area()函数用于绘制面积图,和累叠模式柱状图类似,面积图也是把每一组数据点累叠绘制。不过它把每一个数据集合的相邻点用线条连起来,并且把每一个数据集合所在区域用不同颜色填充。
11·pie()绘制二维饼图。pie3()绘制三维饼图。
13·火柴干图:把每个数据点用一个垂直于横轴的火柴棒表示,stem(),stem3()。
14·绘制阶梯图stairs()。
15·等高线图:用于显示多元函数的函数值变化趋势,contour()来绘制等高线,clabel()标注等高线函数值,contourf绘制颜色填充模式。
16·axis[xmin xmax ymin ymax]:分别限定x轴和y轴的范围
axis equal:横纵坐标单位长度相同
axis square:图框呈方形
axis off:清除坐标刻度
semilogx:x轴为对数坐标
semilogy:y轴为对数坐标
loglog:全对数坐标
text(x,y,’标识文本’)在指定坐标标识对应的数据点
gtext(‘标识文本’)绘图后用鼠标来标识对应的位置
title(”)图形标题,xlabel(”)标识x轴,ylabel(”)表示y轴
legend(‘图例一’,图例二’)给曲线添加图例
grid on 给当前坐标加上珊格线
grid off 从当前坐标中删去珊格线
hold on 保持图像,便于绘制多条曲线
hold off 取消保持
七·matlab函数及调用
1·匿名函数:匿名函数可以接受多个输入和输出参数,适用于命令行操作。fhandle = @(arglist) expression
2·私有函数:具有访问限制性访问权限的函数,他们对应的M文件保存在名为private的文件夹下,但它只能被private文件下M文件调用。
**3·输入输出参数目录:**nargin:输入参数数目,nargout:输出参数数目。
**4·可变输入参数:**varargin:可变输入参数。varargout 可变输出参数。
5·全局变量:用global来声明和调用
6·函数句柄:函数句柄提供了一种间接调用函数的方法,创建函数句柄需要用到@,匿名函数其实也是一种句柄,而对M文件的各种函数都可以创建函数句柄,从而可以通过函数句柄对这些函数实现间接调用。fhandle =@function_filename;
feval(fhandle,parameters);调用函数句柄
八·matlab调试方法和编程技巧
1·去掉分号输出中间结果。
2·设置断点逐步调试,观测变量值的变化。
3·Code Analyzer:可以分析M文件的性能和错误。
4·Profiler:MATLAB提供的一个功能强大的代码分析工具,一般来说,应该尽量避免不必要的变量输出、循环赋值前预定义数组尺寸,多采用向量化的,matlab函数,少采用数组,提高matlab的性能。
5·一个程序的执行速度取决于它所调用的子程序个数以及所采用的算法 ,通常希望程序越少越好,算法效率越高越好。可以使用嵌套计算减小乘法次数。tic初始化时钟开始计时,toc时钟停止,获得执行时间。
6·matlab要尽量避免使用循环,为了得到最快的运行速度,在for循环运行之前,应该预先分配数组。矩阵运算优先考虑内联函数。
7·程序应该具有一定容错能力,当用户输入错误时,应该使用error()函数来提示出国原因。
matlab基本语法和运算基础的更多相关文章
- MATLAB的符号运算基础
在数学运算中,运算的结果如果是一个数值,可以称这类运算为数值运算:如果运算结果为表达式,在MATLAB中称为符号运算,符号计算是对未赋值的符号对象(可以是常数.变量.表达式)进行运算和处理.MATLA ...
- matlab基本语法
MATLAB基本语法 点乘运算 , 常与其他运算符 点乘运算,常与其他运算符联合使用(如.\) 矩阵生成 矩阵生成 向量生成或子阵提取本节将会介绍一些MATLAB的基本语法的使用. 持续更新... 在 ...
- PHP语法(一):基础和变量
相关链接: PHP语法(一):基础和变量 PHP语法(二):数据类型.运算符和函数 PHP语法(三):控制结构(For循环/If/Switch/While) 最近有个H5项目的需求,需要服务端,考察过 ...
- Freemarker的基本语法及入门基础
freemarker的基本语法及入门基础一.freemarker模板文件(*.ftl)的基本组成部分 1. 文本:直接输出的内容部分 2. 注释:不会输出的内容,格式为&l ...
- MATLAB中的集合运算
matlab里关于集合运算和二进制数的运算的函数 intersect:集合交集ismember :是否集合中元素setdiff :集合差集setxor :集合异或(不在交集中的元素)union :两个 ...
- $一步一步学Matlab(4)——使用Matlab进行初等数学运算
Matlab可以看成是一个功能强大的计算器,那么既然是计算器,进行基本的数学运算绝对是必不可少的.本文主要讲解如何用Matlab做初等数学运算,所谓"初等数学运算",可以理解成是小 ...
- AST抽象语法树——最基础的javascript重点知识,99%的人根本不了解
AST抽象语法树——最基础的javascript重点知识,99%的人根本不了解 javascriptvue-clicommonjswebpackast 阅读约 27 分钟 抽象语法树(AST),是一 ...
- 深入理解python(一)python语法总结:基础知识和对python中对象的理解
用python也用了两年了,趁这次疫情想好好整理下. 大概想法是先对python一些知识点进行总结,之后就是根据python内核源码来对python的实现方式进行学习,不会阅读整个源码,,,但是应该会 ...
- MATLAB中的微积分运算(数值&符号)
显然这个函数是单词differential(微分)的简写,用于计算微分.实际上准确来说计算的是差商. 如果输入一个长度为n的一维向量,则该函数将会返回长度为n-1的向量,向量的值是原向量相邻元素的差, ...
随机推荐
- CDH- CDH大数据集群运维
CDH前端CM监控不正常(未解决) Request to the Service Monitor failed. This may cause slow page responses. View th ...
- Sobel导数
Sobel 导数 目标 本文档尝试解答如下问题: 如何使用OpenCV函数 Sobel 对图像求导. 如何使用OpenCV函数 Scharr 更准确地计算 核的导数. 原理 Note 以下内容来自于 ...
- 分享知识-快乐自己:反射机制Demo解析
Java-Reflect专题 基本反射简介: 1):JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象能够调用它的任意方法和属性;这种动态获取信息以及动 ...
- hdu 2955 Robberies(01背包)
Robberies Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- Sed 命令详解 正则表达式元字符
1.简介 sed是非交互式的编辑器.它不会修改文件,除非使用shell重定向来保存结果.默认情况下,所有的输出行都被打印到屏幕上. sed编辑器逐行处理文件(或输入),并将结果发送到屏幕.具体过程如下 ...
- Selenium-使用firepath获取元素的xpath
- 不得不存!UI设计新手不可错过的7条实用法则
http://www.gameres.com/316761.html 本文编译自 Medium,作者是一位UX(User Experience, 用户体验)设计师,他通过自己学习UI设计的过程,总结出 ...
- codeforces 651B B. Beautiful Paintings
B. Beautiful Paintings time limit per test 1 second memory limit per test 256 megabytes input standa ...
- Agc004_C AND Grid
传送门 题目大意 给定一个$N\times M\space(N,M\leq 500)$的网格,有一些格子是紫色,保证边界没有颜色. 构造两个$N\times M$的网格$A,B$,在$A$中染红色在$ ...
- AngularJS方法 —— angular.bind
描述: 上下文,函数以及参数动态绑定,返回值为绑定之后的函数. 其中args是可选的动态参数,self在fn中使用this调用. 使用方法: angular.bind(self,fn,args ); ...