【数学建模学习①】matlab基础知识

文章目录

  • 简介
  • 使用帮助
  • 变量
    • 数值的记述
    • 变量命名规则
    • Matlab预定义的变量
    • 变量的精度
  • Matlab基本语法
    • Matlab三种控制结构
      • - 顺序结构
      • - 循环结构
      • 其他语句
    • M文件
      • 编程原则
      • 命令文件
      • 函数文件
      • 函数文件与命令文件的区别
      • 函数文件和命令文件的创建方式
      • 常用函数
      • 三种特殊函数
  • 矩阵
    • 矩阵的定义
      • 实数矩阵的定义
        • 由命令行窗口直接输入
        • 由M文件生成输入
        • 由文本文件生成
      • 复数矩阵的定义
      • 符号矩阵的定义
      • 矩阵的修改
        • 部分扩充
        • 部分删除
        • 部分修改
        • 结构改变——左右翻转
        • 结构改变——上下翻转
        • 结构改变——逆时针旋转
        • 结构改变——按指定维数翻转矩阵
        • 结构改变——平铺矩阵
      • 矩阵的变维
      • 矩阵的引用
      • 常用特殊矩阵
        • 空矩阵
        • 全零矩阵
        • 全一矩阵
        • 随机矩阵(0~1之间均匀分布)
        • 魔方矩阵
        • 稀疏矩阵
      • 常用特殊数组
        • 字符数组
        • 结构数组
        • 细胞数组
        • 结构细胞数组
    • 矩阵的运算
      • 1.矩阵的加减运算
      • 2.矩阵的乘法运算
      • 3.矩阵的除法运算
      • 4.矩阵的乘方运算
      • 5.矩阵的转置
      • 6.矩阵的逆
      • 7.矩阵的特征值
      • 8.求矩阵的特征多项式
      • 9.求矩阵的秩
      • 10.求矩阵元素的个数
      • 11.方阵的行列式
      • 12.方阵的迹
    • 矩阵的关系运算和逻辑运算
      • 1.关系运算符
      • 2.逻辑运算符
      • 3.逻辑函数
  • 多项式
    • 多项式的构造
      • 1.直接输入法
      • 2.使用poly方法(根因式展开)
      • 3.使用poly2sym方法
    • 多项式的运算
      • 1.多项式的加减运算
      • 2.多项式的乘法运算
      • 3.多项式的除法运算
      • 4.多项式的微分运算
      • 5.多项式求根
      • 6.多项式求值
  • 符号运算
    • 数值运算和符号运算
    • 符号变量定义
      • 符号表达式的定义
        • 1.用sym函数建立符号表达式
        • 2.使用已经定义的符号变量组成符号表达式
      • 自变量的确定:
      • 符号表达式和符号方程的区别:
      • 符号方程的定义
    • 符号运算
      • 1.初等代数运算
        • 符号的加减乘除幂次方运算
        • 符号表达式化简
      • 2.求反函数
      • 3.求复合函数
      • 4.表达式替换
      • 极限
      • 微分
      • 积分
      • 级数
      • 方程求解
      • 微分方程求解
  • 基本图形绘制
    • 图形窗口
      • 图形窗口的创建和控制
        • 单个图形窗口的创建与控制
        • 多个图形窗口的创建与控制
    • 二维平面图形的绘制
      • ·基本图形函数
        • .plot(x)
        • .plot(x, y)
        • .plot(x, y1, x, y2, …)
      • 其他二维图形绘制函数
        • ·直方图
        • ·面积图
        • ·饼图
      • 不同坐标系中绘图
        • ·直角坐标系中绘图
        • ·对数坐标系中绘图
        • 极坐标系中绘图
        • ·双轴图
        • ·符号表达式绘图
    • 三维立体图形绘制
      • ·三维曲线绘图基本绘图函数
      • 三维绘图最简步骤:
      • 三维曲线绘图其他绘图函数
      • 三维曲面绘图函数
      • 观察点设置
      • 色图处理
    • 声音和动画
      • ·声音的实现
      • 动画的实现

简介

什么是MATLAB?
实际上,它是两个单词的缩写,即MATrix+LABoratory
在欧美各高等学校,MATLAB成为线性代数、自动控制理论、 数字信号处理、时间序列分析、动态系统仿真、图像处理等诸多课程的基本教学工具,成为本科生、硕士生和博士生的必须掌握的基本技能。
在设计研究单位和工业部门,Matlab已经被广泛地用于研究和解决各种具体的工程问题。
可以预见,Matlab将在我国科学研究和工程应用领域发挥越来越大的作用。
当然,在数学建模比赛的时候,MATLAB是一个非常有用的工具,所以学好MATLAB非常有用。

使用帮助

帮助系统提供给MATLAB初学者一个演示学习的平台,常用的命令如下:

  • help——显示当前帮助系统中包含的所有的帮助
  • help+函数名/类名——显示函数/类的相关信息
  • lookfor+关键字——显示包含关键字的函数/类的所有项目
  • what——显示当前目录中MATLAB文件列表
  • who——显示工作区间所有变量的列表
  • whos——显示工作区间中变量的详细信息

变量

变量就是程序执行中可以变化的量。在matlab中,变量无需进行申明。.

数值的记述

Matlab的数只采用十进制表示,可以带小数点和符号;缺省的数据类型为双精度浮点型(double)

变量命名规则

  • 变量名、函数名对字母的大小写是敏感的,比如boy和Boy表示的是两个不同的变量
  • 变量名的第一个字符必须是英文字母
  • 变量名可以包含英文字母、下划线和数字。
  • 变量名不能包含空格、标点

Matlab预定义的变量

在一开始,软件就已经定义的一些变量,成为预定义的变量,如下:

  • ans——最近的计算结果的变量名
  • eps——表示浮点相对精度,对双精度数值来说eps表示从 1.0 到下一个最大双精度数的距离。对单精度数值来说eps表示从 1.0 到下一个最大单精度数的距离。
  • pi——圆周率Π
  • inf——无限大 ∞值
  • i/j——虚数单位

变量的精度

控制显示精度的函数:format 
控制精度计算的函数:
digits(n)——设置缺省的精度;vpa(S, n )——将S表示为n位有效位数的形式。 

注意:小数在使用中可能会存在累计误差。

Matlab基本语法

Matlab三种控制结构

- 顺序结构

程序按照顺序执行的结构,直接将程序语句排列

  • 选择结构
    程序按照设定的条件来分为多路分支执行,主要有两种,if语句和switch语句。

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

M文件

编程原则

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关键字定义,命令文件则不用
·函数文件可以传递参数,而命令文件不能传递参数
·函数文件中定义和使用的是局部变量,只在函数内有效
·命令文件中的变量都是全局变量,推出命令文件后仍然有效

函数文件和命令文件的创建方式

  • 命令文件创建的基本步骤
    1.打开MATLAB的M文件编辑器或任何一个文本编辑器
    2.写入MATLAB的命令代码
    3.保存文件名为filename.m,即完成了命令文件的创建
  • 函数文件创建的基本步骤
    1.打开MATLAB的M文件编辑器或任何一个文本编辑器
    2.写入MATLAB的代码,注意第一行必须用function关键字,并定义函数四要素
    3.保存文件名为funcname.m,即完成了函数文件的创建
    Note: 文件名应与函数名同名,最好将M文件放置在MATLAB搜索路径下
% 脚本名称: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文件生成输入

具体定义矩阵的规则见方法一
·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) 生成m
n的单位阵
B = eye(size(A)) 生成与A维度相同的单位阵

全零矩阵

函数命令:zeros

调用格式
B = zeros(n) 生成nn零矩阵
B = zeros(m, n) 生成m
n零矩阵
B = zeros(size(A)) 生成与A维度相同的全零矩阵

全一矩阵

函数命令:ones

调用格式
B = ones(n) 生成nn全一矩阵
B = ones(m, n) 生成m
n全一矩阵
B = ones(size(A)) 生成与A维度相同的全一矩阵

随机矩阵(0~1之间均匀分布)

函数命令:rand

调用格式
B = rand 产生一个随机数
B = rand(n) 生成nn随机矩阵
B = rand(m, n) 生成m
n随机矩阵
B = rand(size(A)) 生成与A维度相同的随机矩阵
·随机矩阵(零矩阵单位方差正态分布)
函数命令:randn

调用格式
B = randn 产生一个随机数
B = randn(n) 生成nn随机矩阵
B = randn(m, n) 生成m
n随机矩阵
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) 

矩阵的运算

1.矩阵的加减运算

运算符:+, -
运算规则:对应元素相加减

2.矩阵的乘法运算

运算符:, .
运算规则:* 矩阵乘法, .* 矩阵对应元素相乘(数组运算)

3.矩阵的除法运算

运算符:, /, ./, .\
运算规则:\ 矩阵左除, /矩阵右除, ./矩阵点左除, .\矩阵点右除
进一步解释:x = A\B是方程Ax = B的解,x = A/B是方程xA = B的解
若A为非奇异矩阵,则A\B和B/A可如下获得:
A\B = inv(A)B
A/B = B
inv(A)

4.矩阵的乘方运算

运算符:^, .^
运算规则:^ A^p表示矩阵的乘方, .^ A.^B表示矩阵A的数量乘方
^ 具体要求:A为方阵,p为大于零的整数时,Ap表示A自乘p次;p为小于零的整数时,Ap表示A的逆的|p|次方
.具体要求:A.p表示A中每个元素的p次乘方。维度相同的A、B矩阵求A.^B,表示矩阵A中元素对矩阵B中对应元素求幂。结果矩阵与原矩阵维度相同

5.矩阵的转置

运算符:’

运算规则
若矩阵A的元素为实数、则A’返回A的转置
若矩阵A为复数矩阵,则A’中的元素由A对应元素的共轭复数构成

6.矩阵的逆

运算符:inv
调用格式:B = inv(A)

7.矩阵的特征值

运算符:eig
调用格式:eig(A)

8.求矩阵的特征多项式

运算符:poly
调用格式:ploy(A)

9.求矩阵的秩

运算符:rank
调用格式:rank(A)

10.求矩阵元素的个数

运算符:numel
调用格式:numel(A)

11.方阵的行列式

运算符:det
调用格式:det(A)

12.方阵的迹

运算符:trace
调用格式:trace(A)

矩阵的关系运算和逻辑运算

1.关系运算符

运算符:==, ~=, >, >=, <, <=
主要用来对矩阵与数,矩阵与矩阵进行比较,返回两者关系的,由数0和数1组成的矩阵,0和1分别表示不满足和满足指定关系。

2.逻辑运算符

运算符:&, |, ~, xor
在MATLAB中,所有非零数值均被认为是真,零为假,在判断结果中,判断为真输出1,判断为假输出0

3.逻辑函数

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]

多项式的构造

1.直接输入法

A = [1, 3, 5, 7, 9, 0, 0]

2.使用poly方法(根因式展开)

A = [1, -34, -80, 0, 0]
poly(A)

3.使用poly2sym方法

A = [1, -34, -80, 0, 0];
PA = ploy(A);
poly2sym(PA)

多项式的运算

1.多项式的加减运算

运算符:+, -
注意事项:运算符两侧应具有相同的阶次,如果阶次不同,低阶的多项式必须用零填补到高阶多项式的阶次

2.多项式的乘法运算

调用函数:conv(a, b)

3.多项式的除法运算

调用函数: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);

4.多项式的微分运算

调用函数:polyder
调用格式:B = polyder(A)

5.多项式求根

调用函数:roots
调用格式:X = roots(A)

6.多项式求值

调用函数: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

符号表达式的定义

1.用sym函数建立符号表达式

	f = sym(‘a*x^2 + b*x + c’);

2.使用已经定义的符号变量组成符号表达式

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')

符号运算

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 化简为最简形式,表达式最少字符

2.求反函数

调用函数:finverse
函数功能:求得符号函数的反函数
调用格式:finverse(f, v), 其中f为符号表达式,v是自变量

3.求复合函数

调用函数:compose
函数功能:求符号函数的复合函数
调用格式:
compose(f, g)
compose(f, g, z)
compose(f, g, x, z)
compose(f, g, x, y, z)

4.表达式替换

调用函数: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坐标

.plot(x)

当x为一向量时,以x元素的值为纵坐标,x的序号为横坐标绘制曲线
当x为一m*n的实数矩阵时,以x序号为横坐标,按列绘制每列元素值相对于其序号的曲线,最终绘制出n条曲线

.plot(x, y)

若x, y为同维向量,则以x元素为横坐标值,y元素为纵坐标值绘制曲线
若x是向量,y是有一维与x元素数量相等的矩阵,则以x为共同横坐标,按列绘制y每列元素值,曲线数为y的另一维的元素数
若x, y是同维矩阵,则以x, y对应列元素为横、纵坐标分别绘制曲线,曲线数为矩阵的列数

.plot(x, y1, x, y2, …)

若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)

你可能感兴趣的:(matlab)