Mrli
别装作很努力,
因为结局不会陪你演戏。
Contacts:
QQ博客园

Matlab基础教程

2019/09/15 Matlab
Word count: 2,491 | Reading time: 10min

Matlab学习

1
2
3
4
A = [1 3 5];
max(A)
ans =
5

如果存在多个输入参数,请使用逗号加以分隔:

1
2
3
4
5
B = [10 6 4];
max(A,B)
ans =
10 6 5
%A中列元素与B中列元素一一比较.

clc 函数清除命令行窗口。

函数

1
2
3
disp('hello world')
hello world
要调用不需要任何输入且不会返回任何输出的函数,请只键入函数名称:

二维绘图

r--' 字符串为线条设定。每个设定可包含表示线条颜色、样式和标记的字符。标记是在绘制的每个数据点上显示的符号,例如,+o*。例如,'g:*' 请求绘制使用 * 标记的绿色点线。

请注意,为第一幅绘图定义的标题和标签不再被用于当前的窗口中。默认情况下,每次调用绘图函数、重置坐标轴及其他元素以准备新绘图时,MATLAB® 都会清除图形。

要将绘图添加到现有图形中,请使用 hold

1
2
3
4
5
6
7
x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y)
hold on
y2 = cos(x);
plot(x,y2,':')
legend('sin','cos')

三维绘图

1
2
3
[X,Y] = meshgrid(-2:.2:2);
Z = X .* exp(-X.^2 - Y.^2);
surf(X,Y,Z)

surf 函数及其伴随函数 mesh 以三维形式显示曲面图。surf 使用颜色显示曲面图的连接线和面。mesh 生成仅以颜色标记连接定义点的线条的线框曲面图。(surf填充-sruface)

M文件

脚本文件

函数文件

1
2
3
4
5
6
7
8
9
10
11
脚本文件 
1.多条命令的综合体
2.没有输入、输出变量
3.使用MATLAB基本工作空间
4.没有函数声明行

函数文件
1.常用于扩充MATLAB函数库
2.可以包含输入、输出变量
3.运算中生成的所有变量都存放在函数工作空间
4.包含函数声明行

函数名为mymax,文件名为mymax.m(必须相同)。它需要五个数字作为参数并返回最大的数字。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
创建函数文件,名为mymax.m 并输入下面的代码:  
function max = mymax(n1, n2, n3, n4, n5)
%This function calculates the maximum of the
% five numbers given as input
max = n1;
if(n2 > max)
max = n2;
end
if(n3 > max)
max = n3;
end
if(n4 > max)
max = n4;
end
if(n5 > max)
max = n5;
end

符号变量与符号表达式

x y; %定义x,y为符号变量>>z
1
2
3
4
5
6
需要用syms或sym定义,例如
>>syms x y; %定义x,y为符号变量
>>z=x^2+y^2 %定义z为含有x与y的符号表达式

也可以这样定义z,
>>z=sym(‘x^2+y^2’) %与上面等价

关于符号表达式的基本命令
命令 含义
pretty(s) 将s显示为数学书写形式
symsum(s,x,a,b) 对s中的x从a到b求和
findsym(s) 给出s中所有的符号变量
findsym(s,n) 给出s中离x最近的n个符号变量,n大于s中符号变量个数时则按字母表顺序返回符号变量
subs(s,a,b) 将s中的a置换成b
double(s) 将s转换成数值形式
str2num(s) 字符变量转换为数值变量
num2str(s) 数值变量转换为字符变量
sym(a) 将a转换为符号变量
digits(d) 给出有效数字个数为d的近似值
vpa(s,d) 计算s在精度为d位有效数字的解
eval(s) 执行符号表达式s
命 令 含 义
collect(s) 合并s中的同类项
compose(f,g,x,y) 计算复合函数f(g(y)),x,y分别为f,g的自变量
g=finverse(f) 计算f(x)的反函数,g的自变量仍为x
expand(s) 展开表达式s
factor(s) 因式分解s
[N,D]=numden(s) 通分s中各式,其和的分子为N,分母为D
simplify(s) 对s进行综合化简
simple(s) 给出s的所有最简式

微积分
命 令 含 义
limit(f,x,a) 计算函数f(x)当x->a时的极限
limit(f,x,a,’right’) 计算函数f(x)当x->a+时的右极限
limit(f,x,a,’left’) 计算函数f(x)当x->a-时的左极限
x=fminbnd(f,a,b) 计算函数f(x)在区间[a,b]上的最小值点
[x,fmin]=fminbnd(f,a,b) 计算函数f(x)在区间[a,b]上的最小值点及最小值fmin
diff(f,’x’,n) 计算函数f(x)对变量x的n阶导数,’x’可省
int(f,x) 计算函数f(x)的不定积分,积分变量为x
int(f,x,a,b) 计算函数f(x)在[a,b]上的定积分(符号)
quad(f,a,b) 计算函数f(x)在[a,b]上的定积分值
taylor(f) 计算函数f(x)在x=0处的5阶泰勒展开式
taylor(f,n,x,a) 计算函数f(x)在x=a处的n-1阶泰勒展开式

▲需要注意的是,在进行这些计算前必须申明是符号计算,即要加上syms x y;等语句


基本的绘图步骤

步 骤 典 型 代 码
1. 准备绘图数据 x = 0:0.2:12; y1 = bessel(1,x);
2. 选择一个窗口并在窗口中给图形定位 figure(1) ,subplot(2,2,1)
3. 调用基本的绘图函数 h = plot(x,y1,x,y2,x,y3);
4. 选择线型和标记特性 set(h,‘LineWidth’,2,{‘LineStyle’},{’–’;’:’;’-.’})
5. 设置坐标轴的极限值、标记符号和网格线 axis([0 12 -0.5 1])
6. 使用坐标轴标签、图例和文本对图形进行注释 xlabel(‘Time’)ylabel(‘Amplitude’)
7. 输出图形 print -depsc -tiff -r200 myplot

# 二维曲线图
1
2
3
4
例:
>> x= 0:0.01:10;
>> y=sin(x);
>> plot(x,y)
# 函数绘图
1
2
3
4
fplot(‘function’,范围),例如
fplot('sin(x)',[0,2*pi],'r')
后面选项与plot一致。再如
fplot(‘[sin(x),cos(x)]’,[0,2*pi])同时画出两个函数图形
#符号函数绘图
1
格式ezplot(f,[a,b])  画出符号函数f在[a,b]上的图形
# 极坐标图形
1
2
3
4
MATLAB提供了polar函数来在极坐标下绘制图形 :
>> x= 0:0.01:10;
>> y=1+cos(x);
>> polar(x,y,'rs')

图形控制与修饰

命令 含义
axis auto 坐标轴缺省设置
axis equal 纵、横轴采用相等单位长度
axis image 纵、横轴采用相等单位长度,且坐标框紧贴数据范围
axis([x1 x2 y1 y2]) 设定坐标范围
grid on 画出网格线
grid off 不画网格线
hold on 使以后图形画在当前图形上
hold off 使以后图形不画在当前图形上
命令 含义
title(x,y,‘name’) 在(x,y)处标示图名
xlabel(‘xtext’) 横坐标轴名
ylabel(‘ytext’) 纵坐标轴名
legend(‘first’,’second’,n) 对一个坐标系中的两幅图作出图例注解
figure 另开图形窗口
subplot(m,n,k) m×n幅子图的第k幅称为当前图
多个图形的绘制方法
1
2
3
4
subplot函数 可以实现多个图形的绘制:
>> x = 0:.1:20;
>> subplot(2,2,1)
>> plot(x,sin(x));
# 三维网线图
1
2
3
4
5
6
7
1.mesh(X,Y,Z)  ,例
x=-5:0.2:5;y=x;
[X Y]=meshgrid(x,y); %生成格点矩阵
Z=sin(sqrt(X.^2+Y.^2));
mesh(X,Y,Z)
2. ezmesh(‘f’,‘g’,‘h’,[u1,u2,v1,v2] ),例
ezmesh('cos(u)*cos(v)','sin(u)*cos(v)','sin(v)',[0,2*pi,-pi,pi]); axis equal
数值变量与符号变量

数值变量的常用函数,一般都可以直接用在符号变量上,比如三角函数,这些都是可以通用的,而且函数的含义也完全一样。     但偏偏有些函数非常蛋疼,对符号变量与数值变量都可以进行操作,但操作的含义完全不同,比如diff,diff对于一个数值变量的运算结果是差分,而对于一个符号变量的运算结果则是求导 。

另外也存在很多函数只能对数值变量操作,比如离散傅里叶变换fft。还有很多函数只能对符号变量操作,比如泰勒展开taylor。因此在matlab使用中,一定要区分变量的类型,其实真的用起来也好区分,因为完成特定的计算任务,要么全部用数值,要么全部用符号,这也符合一般处理问题的原则。

4.字符串的常用函数

matlab中字符串的常用算符就更少了,但都非常有用,这里介绍几个: 1)num2str和str2num:可以实现数值变量和字符串变量的转换,比如 a=1 b=num2str(1)复制代码运算结果显示a是一个数值变量,b是一个字符串变量,函数名中的2就是英文中to的意思,也就是把num数值类型转化成str字符类型。str2num就是这个函数的反函数,这两个命令结合,可以实现特定的功能,比如提取一个数字的最高位: a=123456 b=num2str(a) c=b(1) d=str2num©

2.3for循环

​ for循环的语法是:

1
2
3
4
5
6
7
8
9
10
for 数值变量=向量
执行语句
end
---
其含义是,数值变量会取向量中的每一个值,然后执行语句,在执行语句中,数值变量是一个1*1的矩阵。比如for a=[0 1 3]
---
则会让a=0,执行语句,然后a=1,执行语句,最后a=3,执行语句。这里容易和赋值语句混淆,因为a=[0 1 3]是一个数值变量赋值,赋值后a是个向量,但加上了for后,a是1*1矩阵。另外,在数值变量赋值那段,我们说过有一种常用的赋值方法是"a=初始值:步长:终值",其结果是把a赋值成一个向量,因此这也广泛用于for语句中
for a=初始值:步长:终值
---
则在执行语句中,a是一个遍历初值到终值的1*1矩阵。

Author: Mrli

Link: https://nymrli.top/2019/01/23/Matlab基础教程/

Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.

< PreviousPost
Shell代码编写记录
NextPost >
中文Bois模式界面
CATALOG
  1. 1. Matlab学习
    1. 1.0.1. 函数
    2. 1.0.2. 二维绘图
    3. 1.0.3. 三维绘图
    4. 1.0.4. M文件
    5. 1.0.5. 符号变量与符号表达式
      1. 1.0.5.1. 关于符号表达式的基本命令
        1. 1.0.5.1.1. 微积分
        2. 1.0.5.1.2. # 二维曲线图
        3. 1.0.5.1.3. # 函数绘图
        4. 1.0.5.1.4. #符号函数绘图
        5. 1.0.5.1.5. # 极坐标图形
        6. 1.0.5.1.6. 多个图形的绘制方法
        7. 1.0.5.1.7. # 三维网线图
      2. 1.0.5.2. 数值变量与符号变量