matlab软件基础

第1讲 MATLAB初步

MATLAB是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。MATLAB和MathematicaMaple并称为三大数学软件。MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解决问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。

1 Matlab函数一般调用格式:功能命令(操作对象,操作选项)。

功能命令是MATLAB软件的产品,指的是需要完成的任务所对应的函数。

操作对象一般为数值、函数、普通方程、微分方程、矩阵表达式等;

操作选项,也称为指定格式,一般为操作对象的控制选项。

**(操作对象,选项)就是功能命令的语法。**不同的函数,语法要求不一样,这是学习Matlab的重点和难点。学习下面例子,初步掌握Matlab函数使用特点。

1)一元函数绘图:syms x;fplot(x.*sin(x),[-pi,pi])

练习:

2)不定积分:syms x;int(x)

练习:

3)求定积分:syms x;int(sym(x^2*sin(x)),0,1)

练习:

2 Matlab常见的编辑

2.1 删除

clc:删除Command窗口里内容;

clear:删除当前目录里所有变量;

clear+变量:删除Command窗口里指定变量;

clearvars -except x y:清空指定变量之外的变量(只保留指定变量x,y.注意:except前有 '-');

clf:删除所有图形;

clf(1):删除第一幅图;

close all:关闭所有画图figure窗口;

2.2 切换路径

先建立一个文件夹,把本次操作的内容全部放在指定硬盘的某个文件夹里。右击文件夹的属性,复制位置中的路径,形如下图。

切换方式1:cd E:\张三matlab

切换方式2: cd(' E:\张三matlab ')

**更改默认路径:**右击左面matlab属性,更改起始位置即可。如图所示。

练习:1)切换路径到D盘文件夹"Matlab学习"

2)切换路径到E盘文件夹"强大的Matlab"

2.3 Matlab换行

形式1:shift+enter换行,只能一个或若干个执行语句一行。若执行语句过长,不方便错误检查,这是需要换行。MATLAB软件不能自动换行。

形式2:使用...,可任意位置换行,形如

>> x=0:0.1:2*pi; ...

y=sin(x);plot(x,y)

2.4 语句运行

(1)若运行Command窗口里语句,直接回车表示运行;

(2)若运行m文件窗口语句,按"run"或F5

(3)若运行m文件窗口选中的语句,按F9。

2.5 其它编辑

各窗口的字体调整:File,Preference,fonts,custom,font to use

出现OVR被激活:按Insert消除

中止程序运行:Ctrl+C或Ctrl+Break

程序语句后面添加说明部分:%后面跟说明语句

退出Command窗口里的输入,按Esc键或回车键。

查看函数程序:Edit+函数

数值解的显示:如vpa(pi,10) 显示变量的精度

关闭科学计数法:format short g format long g

exit:退出matlab

sym(f(x)):给出f(x)的符号表达式,>> sym(0.3/0.8) ans =3/8

3 函数表达式

3.1 基本初等函数

幂函数:x^a,

指数函数:

,a^x

对数函数:lnx=log(x),lgx=log10(x),

三角函数:sin(x),cos(x),tan(x),cot(x),sec(x),csc(x)

反三角函数:直接在对数函数前家a,形如asin(x)

特殊函数:

,sign(x)

**随堂练习:**计算下列函数值

3 .2 符号函数表达式

◆注意:先 syms 定义,后使用

syms x y %定义为符号x y变量,通过whos可以看出变量类型

whos f(x,y) %定义x y为符号变量,定义f为符号函数

  1. syms f(x); f(x)=x*sin(x); a=f([1 2 3])

a =[ sin(1), 2*sin(2), 3*sin(3)]

  1. syms f(x,y); f(x,y)=x^y*sin(x); f(x,2)

ans =x^2*sin(x) f(2,3)=8*sin(2)

  1. syms f(x,y); f(x,y)=x^y*sin(x);fplot(f(x,2),[-pi,pi])

  2. syms f(x,y); f(x,y)=x^y*sin(x);diff(f(x,y),x)

ans =x^y*cos(x) + x^(y - 1)*y*sin(x)

  1. syms f(x,y); f(x,y)=x^y*sin(x); int(f(x,y),y)

ans =(x^y*sin(x))/log(x)

3 .3 匿名函数表达式

匿名函数格式: f =@(x)f(x)

其中@(x)是匿名函数格式,x表示函数自变量。

**应用:**高频调用函数,复杂的复合函数书写,采用匿名函数非常方便。

**缺陷:**匿名函数是局部,只能在局部调用,自编函数体内不能调用它。

**注意:**分段函数最好用匿名函数表达式,切记!

的匿名函数:y=@(x)sin(exp(x)+x^2)

常见调用格式:①y(1.2)=0.9999

②diff(y(x))= cos(exp(x) + x^2)*(2*x + exp(x))

③a=int(y(x),1,2);vpa(a,5)=-0.21258

随堂练习:编写下列函数的匿名函数,并计算对应问题。

2)

,求

对应的函数值

3)

,一次性求

的函数值。

画图

3.4 自编函数

为例。自编函数只能在M文件窗口里编写。

function f=zz(x);

f=sin(log(exp(x)+x^2));

其中(1)function是函数文件的标志,必须有。

(2)zz是函数名,如同正弦函数名sin一样。取名规则为:函数名与文件名同名;函数名不能与已知变量、已知函数名同名,函数名首字必须为字母,其后可以跟字母、数字、下划线。

(3)f是传递变量,最终的函数表达式必须形如上述形式传递给f才能有效。f不是固定变量,可根据自己偏好选择。

(4)自编函数在绝大多数场合下可以被调用,如匿名函数里,其它自编函数里等。

**随堂练习:**编写下列函数的m文件,并做相应计算

1)

,一次性求

的函数值。

画图

.

2)

,求

对应的函数值,求

3)数据函数data(k),k=1表示数据1,...;

第2讲 数组及其运算

1 数组生成

模式1:直接输入,如

模式2:

,若

,可省略

模式3:X=linspace(first,last,n)

模式4:从txt,excel里直接复制

模式5:函数生成,如zeros,ones,rand,randn,eye,normrnd等。

随堂练习1

1)直接输入数组

2)在区间[0,1]上用linspace生成20个元素的数组。

3)在

上增量为0.15生成数组

4)从word、txt、Excel里复制数据生成数组。

5)利用zeros,ones,rand,randn,eye,normrnd生成数组。

6)生成数组1,2,3,...,100;生成数组2,4,6,...,100

2 数组的拆、并、调等运算

设生成数组

,则x不仅表示数组名,还表示变量名函数,即下标函数。因为变量名函数的作用,对数组操作非常方便。可以认为,Matlab软件的灵活性,完全体现在变量名函数使用的灵活性。常见的数组操作有

(1)提取x中的部分元素:如

(2)删除x中的部分元素:如

(3)替换x中的部分元素:如

(4)拆分x:如

(5)合并两数组a,b:c=[a,b],其中a,b为一行数组

(6)插入新元素:如

(7)翻转x:fliplr(x)

,或x(n:-1:1)

随堂练习2

1)生成数组a =[ 8.1, 9.1, 1.3, 9.1, 6.3, 0.98, 2.8, 5.5]

b =[ 3.6, 2.8, -1.3, 3.0, 0.73]

2)删除

的第3、7位置元素得数组A2。

3)替换

的第1,3,7位置元素为1,3,7,得数组A3。

4)把

的第2、4、9位置元素提取为新的数组A4。

5)把

的第3、7位置元素与

合并为一个新的数组A5。

6)在

的第3、4位置元素之间插入元素-15,得新的数组A6。

7)在

的第3、4位置元素之间插入数组b,得新的数组A7。

8)前后翻转

,得数组A8。

3 数组的四则运算:点运算(对应的元素进行计算)

◆设

均为数组,数组的点运算规则如下

先演示,再重复:

,求

随堂练习3:利用点运算生成新数组

4 数组的关系运算(全部适用于矩阵)

关系运算反映的是两矩阵元素之间的数值关系,运算符为:

关系运算的结果是:0或1。1表示关系成立;0表示关系不成立。

4.1 "= ="关系:是否相等关系

>> a=[1 2 3];b=[1 2 4];c=a==b; c = 1 1 0

4. 2 " ~ = "关系:是否不等关系

>> a=[1 2 3];b=[1 2 4];c=a~=b; c = 0 0 1

4. 3 同样,还有如下关系:"

"关系

4. 4 逻辑且,&:

>> x=[1 2 3 4];y=[0 3 2 8];x>2&y>2

ans = 0 0 0 1

4. 5 逻辑或,|:

>> x=[1 2 3 4];y=[0 3 2 8];x>2|y>2

ans = 0 1 1 1

演示: a =[-4.0,-15.0,7.2,1.6,-3.8,6.9,-8.6,-0.51,-1.2,1.6]

生成新数组A,满足

A=(a<-2)*(-2)+(a<=2&a>=-2)*1.5+(a>2)*2

A =[-2.0,-2.0,2.0,1.5,-2.0, 2.0,-2.0,1.5,1.5,1.5]

随堂练习4

设x=[2.1 -3.2 4.5 2.8 -2 3.5 6.8 2.4 5.3 -5],求

1)生成新数组A1,若

,则

,否则为-2.5;

2)生成新数组A2,若

,则

;否则为0。

3)生成新数组A3,若

,则

,则

;否则

随堂练习5

1)产生10个随机数

满足

2)产生10个随机数

满足

提示: a=rand;x=(a<0.2)*2.3+(a>=0.2&a<0.5)*3.2+(a>=0.5)*4.5

3)设某分段函数如下,计算x=linspace(-pi,pi,50)对应的函数值,请绘图。

5 数组的集合运算

(1)加法运算 c=union(a,b),即

(2)减法运算 C=setdiff(a,b),即

(3)乘法运算 [c,x,y]=intersect(A,B),c是交集元素,x,y是交集元素在A,B中的位置

(4)补集加法运算 C=setxor(a,b),即

(5)剔除数组中重复的元素 C=unique(a)

(6)剔除矩阵中重复的行 C=unique(a,'rows')

(7)ismember(x0,x):成员识别

随堂练习9

1)设a=[1,2,3,1,2,5],剔除a中重复的元素; unique(a)

2)设A=[1,2,3,1,2,5],B=[1,5,7],求集合运算A+B、A-B、AB

3)设A=[1,2,3,1,2,5],B=[1,5,7],C=[1,3,5,9],求A+B+C,A+B-C

4)设a=[7,3,4,7,3,1,3,2,1,3,5,5,4,5,6,1]

,则

;否则

;提示:ismember

提示: k=ismember(a,[1 2 3]);b=-3*k+3*(1-k)

5)若

,则

;若

,则

;否则为5

6 数组的和sum(x):求数组的和

随堂练习10

1)设x =[0.32,-0.56,-0.31,-0.57,-1.0, -0.91,-0.21,-1.7],求

2)设x =[ 0.32, -0.56, -0.31, -0.57, -1.0, -0.91, -0.21, -1.7],

y =[ 0.61, -0.12, 0.7, 0.27, 0.49, -1.5, -1.0, -0.45]

3)求下列表达式

4)求下列表达式

5)求下列表达式

6)圆周率的近似计算

利用

,计算n=50时

的近似值。

7)

的近似计算

利用

,计算n=100时

的近似值。

8)

的近似计算

利用

,求

的近似值。

9)

,计算n=50时

的近似值。

10)

,计算n=50时

的近似值。

6 数组运算的常见函数

◆max(a),min(a):最数组的最大值,最小值

sum(a):求数组的和

length(x): 求x的维数;若x是矩阵,则length(x)是列数。

prod(a):求数组的积

mean(a):求向量a的元素的平均值

median(x):求向量x的元素的中位数,若x维数是奇数,则中间位置的数就是中位数;否则,中间两个数的平均数就是中位数。

harmmean(x):调和平均值,harmmean(x)=

geomean(x):求几何平均数,geomean(x)=

std(x):无偏型标准差 std(x,1):有偏型标准差

var(x):无偏方差 var(x,1):有偏方差

mad(x):绝对平均偏差,mad(x)=

range(x):样本极差,range(x)=

norm(x):norm([x1,x2])=

如norm([3 4])=5

tril(a):生成a的下三角阵

triu(a):生成a的上三角阵

diag([a b c]):以a,b,c为对角线元素构成的对角阵

sort(a):对数组升序

nnz(A):矩阵或数组非零元素总个数

nonzeros(A):剔除0元素后剩下元素形成的数组

reshape(a,m,n):把数组a变成m行n列矩阵,一列一列赋值。

如a=[1:15],则reshape(a,3,5)为

>> reshape(1:15,3,5)

ans =

1 4 7 10 13

2 5 8 11 14

3 6 9 12 15

repmat(A,m,n):将矩阵A复制m×n块

find(a满足的条件):给出符合条件的元素位置

factorial(n):等于n!

prod(x):等于

gamma(n+1):等于n!

nchoosek (x,m):若x是数组,则表示从x中的元素选m个的所有组合

若n是一个数值,则nchoosek (n,m)表示组合数

>> nchoosek(5,2) ans =10

>> nchoosek(1:3,2)

ans =

1 2

1 3

2 3

>> nchoosek('abc',2)

ans =

ab

ac

bc

◆perms(x):计算所有全排列

>> perms('abc')

ans =cba cab bca bac abc acb

◆randperm(n):对1:n的一个随机排列

>> randperm(5)

ans = 4 5 2 1 3

◆unidrnd(k,m,n):在

上等可能取值m行n列个随机数

>> unidrnd(20,1,8)

ans =4 14 7 18 3 20 11 15

◆permsnk([1 2 3],2):部分排列(自编)

ans =

2 1

1 2

3 1

1 3

3 2

2 3

permsnk('abc',2):部分排列

ans =ba,ab,ca,ac,cb,bc

取整命令

round(x):四舍五入取整

ceil(x):往+∞方向取整

floor(x):往-∞方向取整

fix(x):向0方向取整

rem(x),mod(x):求余

isprime(x):质数识别

primes(20):产生质数

ans =2 3 5 7 11 13 17 19

seqperiod(p):求序列的最小正周期。

>> seqperiod(repmat([1 2 3],1,5)) ans =3

各类识别

isequal(x,y):两数组是否相同识别

ismember(x0,x):成员识别

奇数、偶数识别:奇数:mod(n,2)==1 偶数:mod(n,2)==0

isspace:若是空格则为真

isnumeric:若是数值数组则为真

isempty(a):若a是空矩阵,则为真;

isnan(a):若a= NaN,则为真,否则为0;

isreal:若是实数则为真

第3讲 矩阵及其运算

1 矩阵生成

模式1:直接输入,形如

模式2:从txt,excel里直接调用,同前所述

模式3:函数生成:zeros,ones,rand,randn,eye,normrnd等。

随堂练习:

**1)**生成如下矩阵

2)学习从word里、Excel、txt里复制数据;

|-------|-------|------|------|-------|------|
| 8.9 | 14.4 | -1.0 | -0.3 | -8.6 | 15.3 |
| -11.5 | 3.3 | -2.4 | -1.6 | 0.8 | -7.7 |
| -10.7 | -7.5 | 3.2 | 6.3 | -12.1 | 3.7 |
| -8.1 | 13.7 | 3.1 | 10.9 | -11.1 | -2.3 |
| -29.4 | -17.1 | -8.6 | 11.1 | -0.1 | 11.2 |

3)生成[0,1]上均分分布的随机数,存放在

矩阵上;

4)利用命令生成矩阵

生成

的0矩阵,zeros

生成

的1矩阵,ones

生成

的[0,1]上均分分布的随机数矩阵,rand

生成

的标准整体分布矩阵, randn

生成

的正太分布

矩阵,

生成

上均匀分布矩阵,

生成

的离散均匀分布矩阵,

2 矩阵常见的运算:类似数组运算,略。

3 矩阵的查询运算:find(a满足的条件)

3 .1 **形式1:**查找结果为矩阵展开a(:)后的数组位置

假设矩阵a为

|---|---|---|---|
| 1 | 2 | 3 | 4 |
| 2 | 3 | 4 | 5 |
| 1 | 3 | 5 | 7 |

>> k=find(a==2)

k= k是a列展开后棉组条件的数组位置

2

4

3 . 2 **形式2:**查找结果为行列坐标的位置

>> [i,j]=find(a==2);[i,j]

i = 行标位置

2

1

j = 列标位置

1

2

3 . 3 布尔矩阵查找(非常重要)

b=[1,1,0,1,1;1,1,1,0,0;0,0,1,1,1];

**随堂练习:**设矩阵A的元素如下,求

|-------|-------|------|------|-------|------|
| 8.9 | 14.4 | -1.0 | -0.3 | -8.6 | 15.3 |
| -11.5 | 3.3 | -2.4 | -1.6 | 0.8 | -7.7 |
| -10.7 | -7.5 | 3.2 | 6.3 | -12.1 | 3.7 |
| -8.1 | 13.7 | 3.1 | 10.9 | -11.1 | -2.3 |
| -29.4 | -17.1 | -8.6 | 11.1 | -0.1 | 11.2 |

1)A的最大值、最小值位置

2)A小于0的元素位置

4 **矩阵排序:**sort,sortrows

sort(A,1):A的所有列升序排列;

sort(A,2):A的所有行升序排列;

sort(A):仅A的第1列升序排列,其它各元素位置不变;

sortrows(A,k):对A的第k列升序排列,其它各行随动

(且每行的元素相对位置保持不变)。

随堂练习:

A=[5,-1,-3,3,-13,5;0,-7,-8,-13,-23,-1;0,14,-11,-9,-14,2;-8,-2,25,-2,3,-5;10,-6,17,8,4,9];

|----|----|-----|-----|-----|----|
| 5 | -1 | -3 | 3 | -13 | 5 |
| 0 | -7 | -8 | -13 | -23 | -1 |
| 0 | 14 | -11 | -9 | -14 | 2 |
| -8 | -2 | 25 | -2 | 3 | -5 |
| 10 | -6 | 17 | 8 | 4 | 9 |

sortrows(A,1)结果如下:

|----|----|-----|-----|-----|----|
| -8 | -2 | 25 | -2 | 3 | -5 |
| 0 | -7 | -8 | -13 | -23 | -1 |
| 0 | 14 | -11 | -9 | -14 | 2 |
| 5 | -1 | -3 | 3 | -13 | 5 |
| 10 | -6 | 17 | 8 | 4 | 9 |

练习:第2列升序,其它各列随动

第3行升序,其它各行随动

5 **数组运算的常见函数:**设A,B均为矩阵

A(:):矩阵A展开为一列数组

max(A),min(A):得矩阵每列的最大值,最小值

max(A(:)),min(A(:)):得矩阵的最大值,最小值

sum(A):得矩阵每列的和;

sum(A(:)):得矩阵所有元素的和

mean(A):得矩阵每列的平均值

mean (A(:)):得矩阵所有元素的平均数

prod (A):得矩阵每列的乘积

unique(a,'rows'):剔除矩阵中的重复行

reshape(a,m,n):把数组a变成m行n列矩阵,一列一列赋值。

如a=[1:15],则reshape(a,3,5)为

>> reshape(1:15,3,5)

ans =

1 4 7 10 13

2 5 8 11 14

3 6 9 12 15

repmat(A,m,n):将矩阵A复制m×n块

tril(A):生成A的下三角阵

triu(A):生成A的上三角阵

diag([a b c]):以a,b,c为对角线元素构成的对角阵

nnz(A):矩阵或数组非零元素总个数

nonzeros(A):剔除0元素后剩下元素形成的数组

isequal(x,y):两数组或矩阵是否一样,得0或1。

ismember(x0,x):成员识别

A(end:-1:1,:)或flipud(A) :矩阵上下翻转

A(:,end:-1:1)或fliplr(A):矩阵左右翻转

rot90(A,n):矩阵的旋转

sort,sortrows:排序

sortrows(A,k):对A的第k列升序排列,其它各行随动(每行的元素保持不变)。

sort(A):仅A的第1列升序排列,其它各元素位置不变;

sort(A,1):A的所有列升序排列;

sort(A,2):A的所有行升序排列;

det(A):求A的行列式;

rank(A):求A的秩

trace(A) :求A的迹

inv(A):求A的逆矩阵

length(x): 若x是数组,则length(x)是维数;若x是矩阵,则length(x)是列数。

size(A,1)表示矩阵A的行数,size(A,2)表示矩阵A的列数。

size(A):显示A的行数和列数

null(A):得到

标准正交化的基础解系

null(A,'r') :得到

有理形式的基础解系

rref(A):得A的行最简矩阵

orth(a) : 列向量组的标准正交化

zscore(x):标准化

是矩阵,则zscore(x)=

;若x是矩阵,则zscore(x)是各列标准化的结果。

corrcoef(A):矩阵A各列相关系数矩阵

cov(A) :矩阵A各列协方差矩阵

eig(A):%求矩阵A的特征值、特征向量

eigs(A):%求矩阵A的特征值、特征向量,最多给出6个特征值;

第4讲 Matlab平面绘图

一个完整的图形,应该包括基本图形和图形属性两部分。基本图形 由图形数据和所需要的图形形状共同决定。图形数据通常由函数或方程产生,有些数据是直接观测的数据。图形形状源于实际需求,Matlab可画的常见的平面图形形状如图1所示。图形属性指的是基本图形之外需要描述的部分,如线的粗细、颜色、线形等;点的形状、颜色等;坐标轴控制等,添加文本说明(text,gtext),添加标题(title)、图形识别(legend)等等。图形属性可在图形函数里直接操作,也可以通过图形句柄操作,或在图形窗口中操作。

2 连线绘图

常见的平面连线图函数为plot,fplot,本讲重点介绍plot函数。

◆ plot语法

2.1 画基本图形

6)已知平面三点

,连线三点画三角形

7)画中心为原点,其中一边与

轴平行且边长为4的正方形。

2.2 Line 的颜色、线型、线宽(粗细)控制

1)线颜色控制

语法类似: p. Color =' r ' ,或者 plot(x,y,' r ')

2)线型控制:p . LineStyle='-' 或者 plot(x,y,'--')

◆注意:颜色与线型可以放在一起控制,如plot(x,y,' r-- ')

3)线宽控制: LineWidth

**语法类似:**数值越大表示线越粗。

h.LineWidth=5,或者plot(x,y,'LineWidth',5)

2.3 点Marker的控制(散点图中的点)

1)点的类型

语法:plot(x,y,'o')

◆注意:颜色、线型、散点类型可以放在一起进行控制,如

plot(x,y,' r--o ')

2)散点的大小MarkerSize

语法类似:p. MarkerSize=5,或者plot(x,y,'MarkerSize',5)

3)散点的边界颜色MarkerEdgeColor

语法类似:p. MarkerEdgeColor='r'

4)散点的填充颜色MarkerFaceColor

语法类似:p. MarkerFaceColor='r'

3 用fill函数画出下列基本图形。

4 用bar,barh画如下图形。

5 画如下饼图

6 画如下阶梯图

7 散点图(略)

用text在散点上添加数字。

x =linspace(-pi,pi,10);y=sin(x);plot(x,y,'-ro');

for i=1:10;a=sprintf('%0.2f',y(i));text(x(i),y(i),num2str(a));end

axis([-pi-1 1+pi -1 2])

8 三维绘图,视情况讲解。

相关推荐
白拾9 分钟前
使用Conda管理python环境的指南
开发语言·python·conda
从0至135 分钟前
力扣刷题 | 两数之和
c语言·开发语言
总裁余(余登武)35 分钟前
算法竞赛(Python)-万变中的不变“随机算法”
开发语言·python·算法
NormalConfidence_Man36 分钟前
C++新特性汇总
开发语言·c++
一个闪现必杀技41 分钟前
Python练习2
开发语言·python
有梦想的咕噜1 小时前
target_link_libraries()
开发语言
liu_chunhai1 小时前
设计模式(3)builder
java·开发语言·设计模式
姜学迁1 小时前
Rust-枚举
开发语言·后端·rust
冷白白1 小时前
【C++】C++对象初探及友元
c语言·开发语言·c++·算法
凌云行者1 小时前
rust的迭代器方法——collect
开发语言·rust