什么是MATLAB?
实际上,它是两个单词的缩写,即MATrix+LABoratory
在欧美各高等学校,MATLAB成为线性代数、自动控制理论、 数字信号处理、时间序列分析、动态系统仿真、图像处理等诸多课程的基本教学工具,成为本科生、硕士生和博士生的必须掌握的基本技能。
在设计研究单位和工业部门,Matlab已经被广泛地用于研究和解决各种具体的工程问题。
可以预见,Matlab将在我国科学研究和工程应用领域发挥越来越大的作用。
当然,在数学建模比赛的时候,MATLAB是一个非常有用的工具,所以学好MATLAB非常有用。
帮助系统提供给MATLAB初学者一个演示学习的平台,常用的命令如下:
变量就是程序执行中可以变化的量。在matlab中,变量无需进行申明。.
Matlab的数只采用十进制表示,可以带小数点和符号;缺省的数据类型为双精度浮点型(double)
在一开始,软件就已经定义的一些变量,成为预定义的变量,如下:
控制显示精度的函数:format
控制精度计算的函数:
digits(n)——设置缺省的精度;vpa(S, n )——将S表示为n位有效位数的形式。
注意:小数在使用中可能会存在累计误差。
程序按照顺序执行的结构,直接将程序语句排列
if语句——if-else-end
switch语句——switch-case-otherwise-end
%% if语句代码示例
clear
n = input('输入n = ');
if n >= 90
r = 'A'
elseif n >= 80
r = 'B'
elseif n >= 70
r = 'C'
elseif n >= 60
r = 'D'
else
r = 'E'
end
%% switch语句代码示例
clear
n = input('输入n = ');
Ju = fix(n/10);
switch Ju
case{10, 9}
r = 'A'
case 8
r = 'B'
case 7
r = 'C'
case 6
r = 'D'
otherwise
r = 'E'
end
程序按给定的条件重复地执行指定的程序段或者模块,主要有两种,for语句和while语句
for语句——for 循环变量 = 起始值:步长:终止值-循环体-end
while语句——while 表达式-循环体-end
%% 计算1+2+3+...+100
% for 结构
clear
sum = 0;
for i = 1:1:100
sum = sum + i;
end
sum
%% 计算1+2+3+...+100
% while 结构
clear
sum = 0;
i = 0;
while i < 100
i = i + 1;
sum = sum + i;
end
sum
break语句——用于立即跳出含该break语句的循环语句
continue语句——用于提前结束当前循环
return语句——用于终止当前命令的执行,在任何地方遇到return时程序立即终止
try-catch语句——用于实现异常处理机制。需要检测的程序必须放在try语句块中执行,异常由catch语句捕获并处理
%% try-catch 应用实例
clear
N = input('Please input N = ');
A = magic(3);
try
A_N = A(N, N)
catch
A_end = A(end, end)
end
1.百分号”%”后面的内容是程序的注释信息
2.clear命令用于清楚变量,通常用于主程序开头
3.充分利用MATLAB提供的函数进行运算
4.在语句后输入分号,使中间结果不显示在屏幕上
5.输入少量数据时,可以使用input命令完成
6.大量的数据输入最好通过子程序完成,在主程序中调用该子程序即可
7.尽量采用主程序调用子程序的方法,使主程序清晰易读,便于维护
8.充分利用调试功能对程序进行调试,有的时候隐含的逻辑错误更不容易发现危害却很大
9.设置MATLAB的工作路径和当前工作目录,方便操作和运行程序
在MATLAB命令窗口中直接输入命令文件的文件名
命令文件的文件名不要与其他函数/文件重名
命令文件的文件名不要与变量充名
定义一个函数,需要指定输入参数和输出参数
函数文件具有独立的内部变量空间
调用函数文件时输入函数文件的文件名并带入指定的实际参数
函数文件的格式如下:
function [outputArg1,outputArg2] = func(inputArg1,inputArg2)
%FUNC 此处显示有关此函数的摘要
% 此处显示详细说明
end
·输出参数多于一个时,应使用中括号
·输入参数多于一个时,用逗号隔开
·函数名与所存的M文件名应同名
·函数体中可使用的错误提示信息:warning(‘message’)
·函数文件用function关键字定义,命令文件则不用
·函数文件可以传递参数,而命令文件不能传递参数
·函数文件中定义和使用的是局部变量,只在函数内有效
·命令文件中的变量都是全局变量,推出命令文件后仍然有效
% 脚本名称:arith.m
% 脚本功能:任意输入一个正整数,如果是偶数,用2除
% 如果是奇数,用3乘再加1
% 反复重复这个过程,直到得到的数为1
% 将依次得到这个数的数列返回
function y = arith(x)
% 健壮性判断
if round(x) ~= x
error('Please enter an integer!');
end
k = 1; % 赋序列初始索引
y(k) = x; % 输入
while (x~=1)
k = k + 1; % 索引递增
if rem(x, 2) == 0 % 求余
x = x/2; % 执行偶数对应操作
y(k) = x;
else
x = x*3 + 1; % 执行奇数对应操作
y(k) = x;
end
end
end
abs(x) 标量的绝对值或者向量的长度
sqrt(x) 开平方
real(z) 复数z的实部
imag(z) 复数z的虚部
conj(z) 复数z的共轭复数
angle(z) 复数z的相角
round(x) 四舍五入至最近整数
fix(x) 舍去小数至最近整数
floor(x) 地板函数,即舍去正小数至最近整数
ceil(x) 天花板函数,即加入正小数至最近整数
rat(x) 将实数x化为多项式分数展开
rats(x) 将实数x化为分数表示
sign(x) 符号函数(Signum function)
当 x < 0 时,sign(x) = -1;
当 x = 0 时,sign(x) = 0;
当 x > 0 时,sign(x) = 1
rem(x, y) 求x除以y的余数
gcd(x, y) 整数x和y的最大公因数
lcm(x, y) 整数x和y的最小公倍数
exp(x) 自然指数
pow2(x) 2的指数
log(x) 自然对数
log2(x) 以2为底的对数
log10(x) 以10为底的对数
1.匿名函数
通常只由一句简单的声明语句组成
可以接受多个输入和输出函数
其优点在于不需要去维护一个函数文件
调用格式:
fhandle = @(arglist)expr
2.主函数和子函数
在一个单个的M文件中可以定义多个函数。
如果多个函数出现在一个文件中
那么第一个定义的(最好与M文件同名)函数为主函数
其下面定义的函数为子函数
注意:子函数只能被同一文件中的函数调用
3.私有函数 指存放在private子目录中的函数
注意:私有函数只能由其父目录中的函数调用,在函数调用时优先于其他路径上的函数
调用次序:子函数 > 私有函数 > 搜索路径上的函数
%% 创建匿名函数
% 函数名称:myfuncHandle
% 输入参数:x
% 输出参数:
% 函数功能:计算 x^2 + 2*x + 1
myfuncHandle = @(x)(x^2 + 2*x + 1) % 创建匿名函数
myfuncHandle(10)
%% 主函数和子函数的使用示例
% 脚本名称:mainFunc.m
% 输入参数:x
% 输出参数:y
% 脚本功能:主函数调用子函数示例
function y = mainFunc(x)
% 主函数
y = x*subFunc(x);
end
function u = subFunc(w)
% 子函数
u = w/2;
end
矩阵是线性代数的基本运算单元
矩阵含有M行N列数值
矩阵中的元素可以是实数或复数
矩阵相关的基本运算:加、减、内积、逆矩阵、转置、线性方程组、特征值、特征向量、矩阵分解
矩阵和向量是一样的,用来描述某一个问题的方程组的系数,由方程组的系数和常数构成的方阵。矩阵包括数值矩阵,符号矩阵,和特殊矩阵 等三种基本样式
不同列用逗号来分隔,不同行用分号分隔。所有元素均在方括号内
当矩阵是多维的时候,且方括号内的元素是维数较低的矩阵时,会有多重的方括号。
x1=[1,2,3,4,5,6]
x2=[1;2;3;4;5;6]
x3=[1:6]
x4=[1:3;2:4;3:5]
具体定义矩阵的规则见方法一
·M文件中的变量名称与文件名不能相同,否则会出现变量名与文件名的混乱
输入规则
·建立txt文件,直接使用load调用此文件
·txt文件中不含变量名称,文件名即为矩阵变量名
·每行数值个数必须相等
load matrixAandB.txt
如果从excel中读取数据,使用函数xlsread;如果从dat文件中读取数据,使用函数csvread
复数在控制工程及复平面计算里面应用较多。复数矩阵是指带有虚数的数据矩阵。复数矩阵有两种生成方式,如下所示。
x1=1;
x2=2;
x3=[x1*i,x1;x2,x2*i*i]
x3 =
0.0000 + 1.0000i 1.0000 + 0.0000i
2.0000 + 0.0000i -2.0000 + 0.0000i
x1=[1,2;3,4];
x2=[2,3;4,5];
x3=x1+x2*i
x3 =
1.0000 + 2.0000i 2.0000 + 3.0000i
3.0000 + 4.0000i 4.0000 + 5.0000i
构造方法同实数数值矩阵,元素改为符号即可
syms x y z;
A = [x, 2, 3, 4; 5, y, 7, 8; 9, 10, 11, z]
调用格式:D = [A; B C]
A为原矩阵,B, C中包含要扩充的元素,D为扩充后的矩阵
D = [A;A]
调用格式:A(:, n) = [], A(m, ? = []
A(:, n) = []表示删除矩阵A的第n列
A(m, ? = []表示删除矩阵A的第m行
A(:, 2) = [] % 删除矩阵A的第2列
A(3, :) = [] % 删除矩阵A的第3行
调用格式:A(m, n) = a, A(m, ? = [a], A(:, n) = [b]
A(:, n) = []表示修改矩阵A的(m, n)元素为a
A(m, ? = [a]表示修改矩阵A的第m行元素为a
A(:, n) = [b]表示修改矩阵A的第n列元素为b
A(:, 2) = [1] % 修改矩阵A的第2列元素全为1
A(3, :) = [2] % 修改矩阵A的第3行元素全为2
假设矩阵A第2列有三个元素,想改为1 3 7,可以使用:
A(:, 2) = [1;3;7]
函数命令:fliplr
调用格式:fliplr(A)
fliplr(A)表示矩阵A行数不变,其元素左右翻转
函数名伶:flipud
调用格式:flipud(A)
flipud(A)表示矩阵A行数不变,其元素上下翻转
函数命令:rot90
调用格式:rot90(A), rot90(A, k)
rot90(A)表示矩阵A元素逆时针翻转90度
rot90(A, k)表示矩阵A元素逆时针翻转k个90度
ot90(A, 2) % 矩阵A中元素逆时针旋转180度
rot90(A, -2) % 矩阵A中元素顺时针旋转180度
函数命令:filpdim
调用格式:flipdim(A, dim)
flipdim(A, 1) = flipud(A)
filpdim(A, 2) = fliplr(A)
函数命令:repmat
调用格式:repmat(A, m, n), repmat(A, [m, n])
调用格式:B(? = A(?
A = [1, 2, 5, 4; 6, 7, 0, 1];
B = ones(4, 2);
B(:) = A(:);
reshape
调用格式:B = reshape(A, m, n)
注意:使用reshape时,B中元素个数与A中相同
A = [1:8];
B = reshape(A, 2, 4);
B = reshape(A, 4, 2);
arrayName(m ,n) 引用二维数组第m行第n列的元素
arrayName(m, ? 引用二维数组第m行的所有列元素
arrayName(:, n) 引用二维数组第n列的所有行元素
arrayName(m1:m2, n) 引用二维数组第n列中m1到m2行的元素
arrayName(m, n1:n2) 引用二维数组第m行中n1到n2列的元素
arrayName([m1 m2], n) 引用二维数组第n列中m1行和m2行的元素
arrayName(m, [n1 n2]) 引用二维数组第m行中n1列和n2列的元素
arrayName([m1 m2], [n1 n2]) 引用m1行、m2行,n1列、n2列的四个元素
Note: 如果想获得不同行也不同列的散列的若干个数据可依照列序的方法
函数命令:[]
调用格式:B = []
·单位矩阵
函数命令:eye
调用格式
B = eye(n) 生成nn的单位阵
B = eye(m, n) 生成mn的单位阵
B = eye(size(A)) 生成与A维度相同的单位阵
函数命令:zeros
调用格式
B = zeros(n) 生成nn零矩阵
B = zeros(m, n) 生成mn零矩阵
B = zeros(size(A)) 生成与A维度相同的全零矩阵
函数命令:ones
调用格式
B = ones(n) 生成nn全一矩阵
B = ones(m, n) 生成mn全一矩阵
B = ones(size(A)) 生成与A维度相同的全一矩阵
函数命令:rand
调用格式
B = rand 产生一个随机数
B = rand(n) 生成nn随机矩阵
B = rand(m, n) 生成mn随机矩阵
B = rand(size(A)) 生成与A维度相同的随机矩阵
·随机矩阵(零矩阵单位方差正态分布)
函数命令:randn
调用格式
B = randn 产生一个随机数
B = randn(n) 生成nn随机矩阵
B = randn(m, n) 生成mn随机矩阵
B = randn(size(A)) 生成与A维度相同的随机矩阵
Note: 如果要生成均值为mu, 方差为sigma的正态分布的三阶随机矩阵,可以
B = mu + sqrt +(sigma)*randn(3)
1
函数命令:magic
调用格式:B = magic(n) 生成n*n魔方矩阵
Tip:魔方矩阵行、列、正反对角线之和均相等,且n != 2
函数命令:sparse, full
调用格式
B = sparse(A) 转换A矩阵为稀疏矩阵
B = full(A) 转换A矩阵为完全矩阵
调用格式:s = ‘string’, name = [‘str1’ ‘str2’ ‘str3’]
·字符串转换方式一
函数命令:char
调用格式:S = char(T) 表示将正整数矩阵转换成字符串矩阵S
T = [102 67 132; 50 95 78];
S = char(T);
·字符串转换方式二
函数命令:int2str, num2str
调用格式:int2str(A), num2str(A, k), num2str(A, format)
表示将数或矩阵转换成字符串或字符串矩阵
·字符串转换方式三
函数命令:eval, str2num
调用格式:eval(S), str2num(S)
表示将字符串S转化为数值
代码示例:
a = [1, 2];
w = [1, 3];
x = [1, 2];
S = 'a.*sin(w.*x)';
val = eval(S);
·字符串比较
函数命令:strcmp
调用格式:strcmp(str1, str2)
表示将两个字符串进行比较,相等时返回逻辑值为真
定义:根据属性名组织起来的不同类型数据的集合
引用:通过数组名和属性名来引用
函数命令:struct
调用格式:sn = struct(‘filed1’, {}, ‘filed2’, {}, …)
代码示例:
student = struct('name', {'Liu', 'Wang'}, 'age', {'20', '21'});
student(1)
student(2)
student(2).name
其他的几个相关的命令:fieldnames, size, rmfield, getfield, setfield
结构数组可以进项嵌套,如:
a = struct('name', 'Mike', 'number', '1000', 'score', struct('math', '90', 'english', '89', 'physics', '97'));
a
a(1).number
a(1).score
函数命令:cell
通常使用{}创建,数据通过数组下标引用
B = cell(5, 3);
B(1, 1) = {[1, 4, 3; 0, 5, 8; 7, 2, 9]};
B(1, 2) = {'Anne cat'};
B(2, 1) = {3 + 7i};
B(2, 2) = {0:pi/10:pi};
B(3, 1) = [3, 4, 2; 9, 7, 6; 8, 5, 1];
B(3, 2) = 'Anne Smith';
B(4, 1) = 3 + 7i;
B(4, 2) = -pi:pi/10:pi;
通常可以使用celldisp和cellplot两种方法来查看细胞数组的示意图
代码示例:
B = cell(5, 3);
B(1, 1) = {[1, 4, 3; 0, 5, 8; 7, 2, 9]};
B(1, 2) = {'Anne cat'};
B(2, 1) = {3 + 7i};
B(2, 2) = {0:pi/10:pi};
B(3, 1) = [3, 4, 2; 9, 7, 6; 8, 5, 1];
B(3, 2) = 'Anne Smith';
B(4, 1) = 3 + 7i;
B(4, 2) = -pi:pi/10:pi;
引用一般可采用:
D = B{1, 1}(2, 2)
细胞数组同样可以使用reshape命令,如下:
A = cell(3, 4)
size(A)
B = reshape(A, 6, 2)
size(B)
小例子:将一个二维细胞数组F转换为三维数值数据
F{1, 1} = [1, 2; 3, 4];
F{1, 2} = [-1, 0; 0, 1];
F{2, 1} = [7, 8; 4, 1];
F{2, 2} = [4i, 3 + 2i; 1 - 8i, 5];
for k = 1:4
for i = 1:2
for j = 1:2
NUM(i, j, k) = F{k}(i, j);
end
end
end
F
NUM
将结构数组放入细胞数组中,可组成结构细胞数组
代码示例:
c_str = cell(1, 2);
c_str{1}.label = '12/2/94;12/5/94';
c_str{1}.test = [47, 52, 55, 48; 17, 22, 35, 11];
c_str{2}.xdata = [-0.003, 0.41, 1.98, 2.12, 17.11];
c_str{2}.ydata = [-3, 5, 18, 0, 9];
c_str{2}.zdata = [0.6 0.8 1 2.2 3.4];
c_str{1}(1).test(2, 2)
运算符:+, -
运算规则:对应元素相加减
运算符:, .
运算规则:* 矩阵乘法, .* 矩阵对应元素相乘(数组运算)
运算符:, /, ./, .\
运算规则:\ 矩阵左除, /矩阵右除, ./矩阵点左除, .\矩阵点右除
进一步解释:x = A\B是方程Ax = B的解,x = A/B是方程xA = B的解
若A为非奇异矩阵,则A\B和B/A可如下获得:
A\B = inv(A)B
A/B = Binv(A)
运算符:^, .^
运算规则:^ A^p表示矩阵的乘方, .^ A.^B表示矩阵A的数量乘方
^ 具体要求:A为方阵,p为大于零的整数时,Ap表示A自乘p次;p为小于零的整数时,Ap表示A的逆的|p|次方
.具体要求:A.p表示A中每个元素的p次乘方。维度相同的A、B矩阵求A.^B,表示矩阵A中元素对矩阵B中对应元素求幂。结果矩阵与原矩阵维度相同
运算符:’
运算规则
若矩阵A的元素为实数、则A’返回A的转置
若矩阵A为复数矩阵,则A’中的元素由A对应元素的共轭复数构成
运算符:inv
调用格式:B = inv(A)
运算符:eig
调用格式:eig(A)
运算符:poly
调用格式:ploy(A)
运算符:rank
调用格式:rank(A)
运算符:numel
调用格式:numel(A)
运算符:det
调用格式:det(A)
运算符:trace
调用格式:trace(A)
运算符:==, ~=, >, >=, <, <=
主要用来对矩阵与数,矩阵与矩阵进行比较,返回两者关系的,由数0和数1组成的矩阵,0和1分别表示不满足和满足指定关系。
运算符:&, |, ~, xor
在MATLAB中,所有非零数值均被认为是真,零为假,在判断结果中,判断为真输出1,判断为假输出0
all 判断是否所有的元素为非零值
any 判断是否存在一个元素为非零值
exist 查看变量或者函数是否存在
find 找出向量或矩阵中非零元素的位置标识
isempty 判断矩阵是否为空矩阵
isequal 判断几个对象是否相等
isnumeric 判断对象是否为数值型
代码示例:
a = [1, 3, 5];
A = [1, 2, 3; 0, 4, 5];
B1 = all(a);
B2 = all(a); % 按照列序
B3 = all(a, 2); % 按照行序
a = [0, 3, 0];
A = [1, 0, 3; 0, 0, 5];
B1 = any(a);
B2 = any(A);
B3 = any(A, 2);
a1 = exist('works');
a2 = exist('filtdes');
a3 = exist('c:\windows');
A = [1.2, 0, 3.5; 0, 0, 5.4];
k = find(A);
[m, n] = find(A);
[m, n, v] = find(A);
A = [0.34, 0.6];
B = [0.34, 0.6];
C = ['who'];
isequal(A, B);
isequal(A, C);
A = [0.34, 0.6];
B = [1 + 2i, 0.6 + 3i];
C = ['who'];
isnumeric(A);
isnumeric(B);
isnumeric(C);
在MATLAB中,多项式用行向量表示:P = [a_0, a_1, a_2, … , a_n-1, a_n]
A = [1, 3, 5, 7, 9, 0, 0]
A = [1, -34, -80, 0, 0]
poly(A)
A = [1, -34, -80, 0, 0];
PA = ploy(A);
poly2sym(PA)
运算符:+, -
注意事项:运算符两侧应具有相同的阶次,如果阶次不同,低阶的多项式必须用零填补到高阶多项式的阶次
调用函数:conv(a, b)
调用函数:deconv(a, b)
调用格式:[div, rest] = deconv(a, b)
其中,div是商多项式,rest是余数多项式。
a = [5, 4, 3, 2, 1];
b = [3, 0, 1];
[div, rest] = deconv(a, b);
调用函数:polyder
调用格式:B = polyder(A)
调用函数:roots
调用格式:X = roots(A)
调用函数:polyval, polyvalm
调用格式:
对点求值:B = polyval(A, a)
对矩阵求值:B = polyvalm(A, M)
·数值运算在运算前必须先对变量赋值,再参加运算
·符号运算不需要对变量赋值就可运算,运算结果以标准的符号形式表达
调用命令:sym, syms
调用格式:
a = sym('a');
b = sym('b');
c = sym('c');
syms a b c;
具体来看:
调用命令:sym
调用格式:f = sym(‘符号表达式’) % 定义符号表达式,并将它赋值给变量f
f = sym(‘a*x^2 + b*x + c’);
syms x y a b c;
f = a*x^2 + b*x + c;
方法一;事先明确指定
方法二:MATLAB自行默认制定
Note:MATLAB自变量确定原则
.x被视为默认的自变量
.字母位置最接近x的小写字母(…, u, v, w, x, y, z, …)
函数findsym帮助我们获取系统定义的自变量
格式:findsym(f)
.符号表达式是由数字、函数和变量组成的代数式
.符号方程是由函数和等号组成的等式
调用命令:sym
调用格式:sym(‘符号方程式’)
代码示例:
equation = sym('sin(x) + cos(x) = 1')
运算符:+, -, *, /, ^
代码示例:
f1 = sym('1/(a - b)');
f2 = sym('2*a/(a + b)');
f3 = sym('(a + 1)*(b - 1)*(a - b)');
collect 合并同类项
expand 展开多项式
horner 分解成嵌套形式
factor 因式分解
simplify 对因式分解表达式化简
simple 化简为最简形式,表达式最少字符
调用函数:finverse
函数功能:求得符号函数的反函数
调用格式:finverse(f, v), 其中f为符号表达式,v是自变量
调用函数:compose
函数功能:求符号函数的复合函数
调用格式:
compose(f, g)
compose(f, g, z)
compose(f, g, x, z)
compose(f, g, x, y, z)
调用函数:subs
函数功能:表达式替换
调用格式:
subs(s)
subs(s, new)
subs(s, old, new)
调用函数:limit
调用格式:
g = limit(f)
g = limit(f, a)
g = limit(f, x, a)
g = limit(f, x, a, ‘left’)
g = limit(f, x, a, ‘right’)
Note:如果自变量不是x,最好显示说明
代码示例:
syms h x;
limit((sin(x + h) - sin(x))/h, h, 0)
调用函数:diff
调用格式:
diff(f)
diff(f, t)
diff(f, n)
diff(f, t, n)
例题:已知f(x) = ax^2 + bx + c, 求f(x)的微分
代码如下:
syms a b c x
f = sym('a*x^2 + b*x + c');
diff(f)
diff(f, 2)
diff(f, a, 2)
diff(diff(f), a)
调用函数:int
调用格式:
int(f)
int(f, t)
int(f, a, b), (a, b为数值式)
int(f, t, a, b)
int(f, m, n), (m, n为符号式)
例题:已知f(x) = ax^2 + bx + c, 求f(x)的积分
代码如下:
syms a b c x;
f = sym('a*x^2 + b*x + c');
int(f)
int(f, x, 0, 2)
int(f, a)
int(int(f, a), x)
调用函数:symsum, taylor
调用格式:
symsum(s, v, a, b)
taylor(F, v, n)
代码如下:
syms k;
synsum(1/k, k, 1, inf)
symsum(1/(k*(k + 1)), k, 1, inf)
syms x
ou = taylor(sin(x), x, 10);
subs(ou, x, pi/2)
调用函数:solve
调用格式:solve(f1, f2, …, fn, v1, v2, …, vn)
例题:求一元二次方程f(x) = ax^2 + bx + c的根
f = sym(‘ax^2 + bx + c’)
solve(f)
syms a
solve(f, a)
调用函数:dsolve
调用格式:
dsolve(f, cond, v)
dsolve(f1, f2, …, fn, cond1, cond2, …, condn, v1, v2, …, vn)
dsolve(f1, f2, …, fn)
注意事项:
.Dy代表y对t求一阶微分,D2y代表y对t求二阶微分
.如果没有初始条件,则求微分方程的通解
.系统默认变量t
代码示例:
dsolve('Dy = 5')
dsolve('Dy = x', 'x')
dsolve('D2y = 1 + Dy')
dsolve('D2y = 1 + Dy', 'y(0) = 1', 'Dy(0) = 0')
MATLAB中进行图形处理时,通常采用下面的步骤
1.准备绘图数据
2.选定绘图窗口和绘图区域
3.调用绘图函数命令
4.设置图形格式
5.输出所绘制的图形
举例如下:
% 在[0, 2]内做出正弦函数的图形
x = 0:0.01;2;
y = sin(x);
plot(x, y)
二维绘图最简步骤
.确定x向量
.确定y = f(x)
.用plot(x, y)绘图
图形窗口是独立的窗口,系统自动将图形绘制在图形窗口上
调用函数:figure
调用格式:h = figure, h = figure(n)
说明:该命令创建单个图形窗口
注意事项:
.若没有打开图形窗口时执行绘图命令,将自动创建一个图形窗口
.若执行绘图命令前已经打开几个图形窗口,则绘图命令把图形输出到当前窗口中、并把这个窗口原来的图形覆盖
.n为图形窗口的编号
相关命令:
.get(n):获得第n个图形窗口的有关属性
.set(n):设置第n个图形窗口的有关属性
代码示例:
x = 0:0.01:10;
y = sin(x);
h = figure(1);
plot(x, y)
set(1, 'name', 'hello')
set(h, 'visible', on)
set(h, 'visible', 'off')
get(h)
get(1)
调用函数:subplot
调用格式:h = subplot(m, n, p)
说明:该命令将图形窗口分割为多个字图窗口
注意事项:
.若执行命令前已经存在某一子图,则该命令将新图形输出到相应子图,并把原来的子图覆盖
.m为子图行数,n为子图列数
.p为子图窗口序号
代码示例:
x = (0:0.01:2)*pi;
y1 = sin(x);
y2 = sin(2*x);
y3 = sin(3*x);
y4 = sin(4*x);
a = subplot(2, 2, 1);
plot(x, y1)
b = subplot(2, 2, 2);
plot(x, y2)
c = subplot(2, 2, 3);
plot(x, y3)
d = subplot(2, 2, 4);
plot(x, y4)
相关命令:
get(n):获得第n个图形窗口的有关属性
set(n):设置第n个图形窗口的有关属性
函数命令:plot
调用格式:
plot(x)
plot(x, y)
plot(x, y1, x, y2, …)
Note:plot是绘制二维图形的最基本函数,针对向量或者矩阵的列来绘制曲线的,在使用plot函数之前,必须首先定义好曲线上每一点的x及y坐标
当x为一向量时,以x元素的值为纵坐标,x的序号为横坐标绘制曲线
当x为一m*n的实数矩阵时,以x序号为横坐标,按列绘制每列元素值相对于其序号的曲线,最终绘制出n条曲线
若x, y为同维向量,则以x元素为横坐标值,y元素为纵坐标值绘制曲线
若x是向量,y是有一维与x元素数量相等的矩阵,则以x为共同横坐标,按列绘制y每列元素值,曲线数为y的另一维的元素数
若x, y是同维矩阵,则以x, y对应列元素为横、纵坐标分别绘制曲线,曲线数为矩阵的列数
若x, y均为同维向量时,以公共的x元素作为横坐标值,以y1, y2, …元素为纵坐标值绘制多条曲线
函数命令:bar, barh
调用格式:
bar(y)
bar(y, width)
bar(x, y)
bar(x, y, width)
bar(~, ‘grouped’)
bar(~, ‘stack’)
说明:该命令生成一组直方图,可视化结果为m组,每组n个垂直柱(y可以为一组向量,或是m*n矩阵)
函数命令:area
调用格式:area(x, y)
说明:该命令绘制(x, y)的面积图,参考plot(x, y)
函数命令:pie
调用格式:
pie(x)
pie(x, explode)
pie(…, labels)
说明:该命令绘制饼图
函数命令:plot等绘图函数
函数命令:loglog, semilogx, semilogy
调用格式:
loglog(x, y)
semilogx(x, y)
semilogy(x, y)
重要提示:log10(0)在数学上没有意义,但MATLAB并不给出错误提示信息
代码示例:
clf
x = [1.2, 7.0, 3.6, 5.0, 8.0];
y = [4.1, 5.2, 6.3, 9.0, 15.0];
subplot(1, 3, 1)
loglog(x, y)
subplot(1, 3, 2)
semilogx(x, y)
subplot(1, 3, 3)
semilogy(x, y)
函数命令:polar
调用格式:polar(theta, r)
重要提示:可使用命令[x, y] = pol2cart(theta, r)将极坐标系的数据点对(theta, r)转化为直角坐标系的数据点对[x, y],命令plot(x, y)和命令polar(theta, r)的效果相同
代码示例:
clf
a = 2;
theta = (0:0.01:4)*pi;
r = a*cos(3*theta);
subplot(1, 2, 1)
plot(tehta, r)
[x, y] = pol2cart(theta, r);
subplot(1, 2, 2)
plot(x, y)
axis equal
函数命令:plotyy
调用格式:[haxes, hline1, hline2] = plotyy(x1, y1, x2, y2, m1, m2)
代码示例:
clf
t = 0:900;
A = 1000;
a = 0.005;
b = 0.005;
z1 = A*exp(-a*t);
z2 = sin(b*t);
[haxes, hline, hline2] = plotyy(t, z1, t, z2, 'semilogy', 'plot');
函数命令:fplot, ezplot
调用格式:
fplot(fun, lims, tol, n, p1, p2, …)
其中,fun指的是待绘制的函数,lims指的是作图区间, tol指的是相对误差,默认为2e-3,
n指的是作图点数,默认值n = 1
p1, p2, …函数的参数,默认没有参数
代码示例:
fplot('sin(x)', [0, 2*pi], 1e-3)
ezplot(fun, lims, fig)
其中,fun指的是待绘制的函数,lims是作图区间, fig是图形窗口句柄
重要提示:ezplot可作为隐函数与多元函数的图形,默认作图区间为[-2pi, 2pi]
代码示例:
explot('u^2 - v^2 - 1', [-2, 3, -3, 2])
函数命令:plot3
调用格式:plot3(x1, y1, z1, x2, y2, z2, …)
注:使用方法与plot相似
.确定x向量
.确定y = f(x), z = g(x)
.用plot3(x, y, z)绘图
函数命令:bar3, pie3, stem3, ezplot3等
注:使用方法与二维相似
mesh(x, y, z) 绘制数据的三维网格曲面
surf(x, y, z) 绘制数据的三维曲面
meshc(x, y, z) 绘制数据的三维网格表面,并添加等值线
surfc(x, y, z) 绘制数据的三维曲面,并在图下添加等值线
meshz(x, y, z) 绘制三维网格表面,并在图下添加零平面
[x, y] = meshgrid(x, y) 根据已有m个数据的向量x和n个数据的向量y分别生成有m*n个数据的新矩阵x和y
通常在确定向量x, y的基础上,使用命令meshgrid生成新的矩阵数据[x, y],再输入函数 z = f(x, y),最后使用mesh等命令生成三维网格、使用surf等命令生成三维曲面
三维曲面绘图最简步骤
.确定向量x, y
.使用命令meshgrid生成新的矩阵数据
.z = f(x, y)
.用mesh等命令生成三维网格
.用surf等命令生成三维曲面
函数命令:view
调用格式:view(azimuth, elevation)
说明:方位角azimuth是观察点和坐标原点连线在 x-y 平面内的投影和 y 轴负方向的夹角,仰角elevation是观察点与坐标原点的连线和 x-y 平面的夹角
默认:2D(0, 90), 3D(-37.5, 30)
函数命令:colormap, brighten
调用格式:colormap(map), brighten(S)
说明:colormap将当前图形色图设置为系统预定义的map格式,brighten改变当前推行窗口色图的亮度
代码示例:
clf;
x = -5:0.1:5;
y = -4:0.1:4;
[X, Y] = meshgrid(x, y);
Z = 0.5*X.^3 + y.^2;
mesh(X, Y, Z)
colormap(hsv)
brighten(0.60)
函数命令:sound
调用格式:sound(y), sound(y, f)
说明:将向量y传送至扬声器,f为采样频率
例题:以20KHz的制作并播放余弦曲线形式的声音
代码如下:
x = cos(linspace(0, 10000, 20000));
sound(x)
其他的函数命令:wavplay, wavread, wavrecord, wavwrite, chirp, beep
函数命令:getframe, movie
调用格式:M = getframe, movie(M, k)
代码示例:
% 制作正弦曲线在[0, 2*pi]从起点到终点的延伸情况曲线,并播放三次
s = 0.2;
x1 = 0;
nframes = 50;
for k = 1:nframes
x1 = x1 + s;
x = 0:0.01:x1;
y = sin(x)
plot(x, y)
axis([0 2*pi -1 1]);
grid off
M(k) = getframe;
end
movie(M, 3)