Matlab程序设计语言基础
2.1Matlab程序设计语言基础
1.若i和j不改写,它们将表示虚数的。但是在Matlab程序的设计过程中,经常使用i或者j作为循环的变量。如果涉及到虚数运算,应当先确认这两个量有没有被改写,如果被改写了,用i=sqrt(-1)来重置。
2.无穷大,在Matlab中用inf表示,负无穷大相应地用-inf表示。
3.NaN,指的是不定式(not a number,NaN),通常由0/0运算、Inf/Inf及其他可能的运算得出。
4.pi,圆周率的双精度浮点表示。
2.1.2数据结构
1.数值型。Matlab中最常用的数值量是双精度的浮点数,占8个字节(64位),在matlab中其表示为double()。
2.符号型。Matlab中还定义了符号型变量,用来区别数值型变量,可以用于推导公式和数学解析求解。在进行解析运算之前要将采用的变量声明为符号变量,利用的命令是syms.具体用法是syms vars props,其中vars是需要声明的变量列表,可以同时生命多个变量,中间用空格分隔,而不是用逗号分隔开。如果需要,还可以进一步生命变量的类型:props,可以使用的类型由real、positive等。例如,将a、b定义为符号变量可以表达为:syms a b,假设要将a定义成实数,那就用syms a real
符号型数值可以通过变精度算法函数vpa()以任意指定的精度显示出来。该函数的调用格式为vpa(A),或vpa(A,n),其中A是要显示的数值或者矩阵,n为指定的有效数字位数,前者以默认的十进制位数(32位)显示结果
例2-1.自然对数底e的前300位有效数字可以由下面的语句直接显示出来。代码中首先要把1转换成符号量。
如果没有把1转换成符号量,则结果如下:
说明如果没有把1转换成符号类型,虽然要求了提供前300位的解析解,但是程序做不到。
3.其他数据结构。
3.1字符串。Matlab支持字符串变量,与其他语言不同的是,matlab的字符串需要用单引号括起来。(这点跟Python有点像)
3.2多维数组。三维数组是一般矩阵的直接拓展。在控制系统的分析中也可以直接用于多变量系统的表示上。在实际编程中还可以使用维数更高的数组。
3.3单元数组。单元数组是矩阵的直接扩展,其存储格式类似于普通的矩阵,而矩阵的每个元素不是数值,可以认为能储存任意类型的信息,这样每个元素称为“单元”(cell),例如A{i,j}可以表示单元数组A的第i行,第j列的内容。
3.4类与对象。后面再介绍,高阶内容。
2.1.3Matlab的基本语句结构
1.直接赋值语句
变量=值。例如考虑矩阵:
由下面的语句将值直接赋值给矩阵A
2.函数调用语句
基本形式:[返回变量列表]=函数名(输入变量列表),其中,函数名的要求和变量名的要求是一致的,一般函数名应该对应再MATLAB路径下的一个文件。
例如函数名为:my_fun应该对应于my_fun.m文件。还有一些函数名需对应于MATLAB的内核函数(built-n function),如inv()等函数。
返回变量列表和输入变量列表均可以由若干个变量名组成,它们之间应该分别用逗号。返回变量还允许使用空格分隔,例如[U S V]=svd(X),这是对矩阵X进行SVD分解的函数,返回值是S,V,D这三个变量,如果不想返回某个变量,则可以用~符号占位。
2.1.4冒号表达式于子矩阵提取
这一部分很重要,因为控制系统中的运算除了少数简单的的纯代数运算,大部分都是矩阵运算。冒号表达式时MATLAB中很有用的表达式,在向量生成、子矩阵提取等很多方面极其重要。冒号表达式的原型为:v=s1:s2:s3,该函数将生成一个行向量v,其中s1时向量的起始值,s2为步距:该向量从s1出发,每隔步距s2就取一个点,直至不超过s3的最大值就可以构成一个向量。若省略s2,则步距默认取1.
例2-4选择不同的步距,则可以用下面语句在t∈[0,Π]区间去除一些点构成向量。
下面尝试冒号表达式的不同写法
很明显步距无法是负的,所以v2取出来是个空的向量。
如果省略了s2,程序会默认步距为1.
如果把上下限反过来写,步距写成-1,那么就会逆序排列构成新向量。
提取子矩阵是在MATLAB操作中非常容易用到的操作。提取子矩阵的具体方法是B=A(v1,v2),其中,v1向量表示子矩阵要包含的行号构成的向量,v2表示要包含的列号构成的向量,这样从A矩阵中提取有关的行和列,就可以构成子矩阵B了。如果v1的地方用冒号占位,即B=A(:,v2)意思是要提取A矩阵所有的行。子矩阵提取通常配合关键字end使用,end用于表示最后一行/列。
例2-5 下面将列出若干命令,并加以解释。
提取矩阵A的奇数行和所有列。这里嵌套了冒号表达式,我们知道冒号表示的格式是,a=s1:s2:s3,其中s2为步距。那么在B1=A(1:2:end,:)中,逗号前的语句就是冒号表达式,即1:2:end,意思是,从第一行开始,以步距为2,取下一行,一直到行数的末尾。 这样就实现了奇数行的提取。而逗号之后是一个冒号,意思是所有的列都取。
取A矩阵的第3、2、1行和2、3、4列组成新矩阵B2
取A矩阵的所有行,列从第一列到最后一列反着排列组成新矩阵B3。实际上就是左右颠倒个儿。
2.2 基本数学运算
2.2.1矩阵代数运算
如果一个矩阵A有n行、m列元素,则称A矩阵为nxm矩阵;若n=m则矩阵为仿真。
1.矩阵转置
矩阵转置记作,其元素定义为
,故B为mxn矩阵。如果A矩阵含有复数元素,则对之转置时,其转置矩阵B的元素定义为
,即先对各个元素进行转置,然后再逐项求取其共轭复数值。这种转置又称为Hermit转置,其数学符号是
。MATLAB中用
可以求出A矩阵的Hermit转置,矩阵的转置则可以由
求出。
2.加减法
假设再MATLAB环境下有两个矩阵A和B,则可以由和
命令取执行矩阵加减法。若A和B的矩阵维数相同,它将会自动地将A和B矩阵对应元素相加减,从而得到正确的结果,并赋值给C变量。若二者之一为标量,则应该将其遍加(减)于两一个矩阵。在其他情况下,MATLAB将自动地给出错误信息,提示用户两个矩阵的维数不匹配。
3.矩阵乘法
4.矩阵的左右除
MATLAB中用“\"和"/"分别表示矩阵的左除和右除,A\B为方程的解
,
为方程
的解。若A为非奇异方阵,则左除和右除分别为
和
5.矩阵翻转
矩阵A进行左右翻转再赋值给B:B=fliplr(A),而C=flipud(A)是指把矩阵A上下翻转再赋值给C,D=rot90(A)是将矩阵A逆时针旋转90度再赋值给D
6.矩阵乘方
矩阵乘方要求A必须是方阵,代码为F=A^x,其中x可以是整数、分数、无理数和复数。
7.点运算
MATLAB中的特殊运算。两个矩阵之间的点运算是它们对应元素的直接运算。例如表示A和B的相应元素之间直接进行点乘运算,然后将结果赋值给C矩阵,即
。这种点乘运算又称为Hadamard乘积。注意,点乘积要求A和B矩阵的维数相同或其一为标量。这种运算和普通乘法不同。
点运算在MATLAB中起到很重要的作用。例如,当x是一个向量时,则求取数值时不能直接写成x^5,而必须写成x.^5。在进行矩阵的点运算时,同样要求运算的两个矩阵是维度一致的。其实一些特殊的函数,例如sin()也是由点运算的形式进行的,因为它要对矩阵的每个元素求取正弦值。
矩阵点运算不仅可以用于点乘积,还可以用于其他。例如进行A.^A运算,则新的矩阵元素为
2.2.2矩阵的逻辑运算
2.2.4解析结果的化简与变换
MATLB的化简函数为simple(),具体用法:
s1=simple(s) %从各种方法中自动选取最简单格式
[s1,how]=simple(s)%化简并返回实际采用的化简方法
除此之外还有collect()函数,可以合并同类项,expand()函数可以展开多项式,factor()函数可以因式分解,numden()函数可以提取多项式的分子和分母,sincos()可以进行三角函数的化简等。这些函数的信息与调用格式都可以用help查看。
例2.6 假设一致含有因式的多项式
试用各种化简函数对其进行处理,并理解得出的变换结果。
这里需要注意,高版本的matlab好像已经没有simple函数,取而代之的是simplify()
Matlab程序设计语言基础相关推荐
- MATLAB程序设计语言语法
MATLAB程序设计语言基础 一.变量与常量 1.1 常见数据类型 1.1.1 数值型数据 应当意识到,数值型数据概念的提出是与符号型数据想对应的,matlab一般存储数据为双浮点数,就势必造成存 ...
- 程序设计语言基础-知识点
程序设计语言基础-知识点 程序设计语言就是人类跟计算机沟通的语言 分类 1.高级低级之分 高级 c/c++,java 等 低级 机器语言 汇编等 2.工作方式之分 编译程序:编译成目标程序后再执行.c ...
- 第三章 VB程序设计语言基础
第三章 VB程序设计语言基础 一 VB中的数据与运算 二 标准函数 三 三种基本结构(顺序,判定,循环) 一 VB中的数据与运算 3.1.1 数据类型 3.1.2 变量与常量 3.1.3 运算符和表达 ...
- Python程序设计语言基础01:Python基本语法元素
目录 1. 编译和解释 1.1 编译 1.2 解释 2. 程序的基本编写方法IPO 2.1 含义 2.2 输入 2.3 输出 2.4 处理 3. 使用编程解决问题 3.1 问题的计算部分 3.2 编程 ...
- matlab学习--语言基础
语言基础 语法,数组索引和操作,数据类型,运算符 MATLAB是"矩阵实验室"的缩写.虽然其他编程语言通常一次用数字一个工作,MATLAB ®对整个矩阵和数组操作.语言基础包括基本 ...
- 软件设计师教程(四)程序设计语言基础知识
软件设计师教程 软件设计师教程(一)计算机系统知识-计算机系统基础知识 软件设计师教程(二)计算机系统知识-计算机体系结构 软件设计师教程(三)计算机系统知识-计算机体系结构 程序设计语言知识 软件设 ...
- 【实验三/四 面向对象程序设计/语言基础与面向对象】
目录 一.实验目的和要求 二.实验内容 1.求最大公约数 2.复数 5.编写一个含有5个类的程序 三.参考 四.其他实验内容 [实验三 面向对象程序设计] 3.编写一个含圆类的程序 4.含圆类.圆柱类 ...
- 软考-软件设计师 - 第2章 程序设计语言基础知识【附补充常考知识点】
本章导图: 2.1 程序设计语言概述 2.1.1 程序设计语言的基本概念 1 低级语言与高级语言 低级语言:机器语言.汇编语言 高级语言:面向各类应用的程序设计语言,如Java,C,C++,PHP,P ...
- 第四章 程序设计语言基础知识
一. 程序语言的基本概念 1.低级语言与高级语言 1)低级语言:汇编 2)高级语言: 常见的有Java.C.C++.PHP.Pyhton.Delphi 等. 2.编译形式:汇编.解释.编译. 3.程序 ...
最新文章
- 周长相等的正方形面积一定相等_必考单元:三年级下册面积计算公式+知识点+测试卷(附答案),重点内容,收藏练习!...
- 使用OpenCV实现摄像头测距
- 微型计算机课程设计报警器,微型计算机课程设计声光报警器的设计与制作精选.doc...
- java之方法的重写
- xcode+文字支持html元素,iOS使用UITextview实现富文本编辑
- CentOS7下使用yum安装MariaDB
- 【转载】安装pip、pyinstaller并将py脚本打包成exe文件
- 《Python入门到精通》Python基础语法
- java面向对象程序设计编程题,已拿到offer
- Unity3d知识点
- 【无人机学习】无人机基础知识
- 2021最新更新多接口VIP影视解析源码
- 异步bus交互(一)— 两级DFF同步器
- 计算机f8进不到安全模式,简单几步解决win10开机按f8进不了安全模式的问题
- 从低位开始取出长整型变量s中奇数位上的数依次构成一个新数放在t中
- java抠图人物背景图片_如何进行人物抠图?让你快速完成复杂背景人像的在线抠图...
- mysql的密码破解
- 简约不简单 细说专票电子化的“四个新”
- 网络上的两台计算机如何互相访问,win10如何实现两台电脑无线互访
- 模拟生成验证码,有相应次数限制(个人学习记录)