Mengzelev's Blog

MATLAB临时抱佛脚

Word count: 1,720 / Reading time: 7 min
2019/01/16 Share

来源:王正盛 《MATLAB数学工具软件实例简明教程》

入门技能

命令行命令

matlab基本可以看成一个有自己语法的命令行终端使用
下面列举一些我觉得自己将来可能会用到的

  • clc:擦除当前工作窗中所有显示内容
  • dir:相当于ls
  • cd:你懂的
  • who:检查内存变量
  • whos:检查驻留变量的详细情况
  • help:召唤FM
  • lookfor:对man进行grep

MATLAB也是有当前工作路径的,同Linux的bash

变量

变量基本以矩阵形式存在
还有一些预定义的变量

  • eps:计算机表示的最小正数
  • pi:圆周率
  • infInf
  • NaN
  • i,j
  • flops:浮点运算次数,用于统计计算量

显示格式

  • short
  • long
  • short/long e 科学计数法显示
  • bank 银行格式
  • hex 十六进制格式
  • +用于大矩阵的紧凑格式

数值计算

矩阵创建

  • 直接输入法
  • reshape把长行向量拆成$n\times m$的矩阵
  • diag可以实现向量和对角阵之间的互相转化
  • .m.mat文件

矩阵运算与数组运算

  • 矩阵运算:按矩阵法则进行的运算
  • 数组运算:对元素逐个进行
  • 可以将数组直接作为参数传入函数中,而不用写循环,不同于C
  • MATLAB推荐:尽量使用除运算,少用逆运算

多项式

表示

  • 系数行向量表示:$p=[a_0,a_1,…a_n]$
  • 指令p=poly(AR)产生多项式
    • AR是方阵,则产生特征多项式
    • AR是向量,则AR中每个数是该多项式=0的解

多项式运算

  • R = roots(p):求根
  • PA = polyval(p,S):按数组运算规则计算多项式的值
  • PA = polyvalm(p,S):按矩阵运算规则计算多项式的值
  • P = polyfit(x,y,n):用$n$阶多项式拟合$x,y$给定的数据

数值积分

  • S = quad('fname', a, b, tol, trace) 自适用Simpson数值积分法
  • S = quad8('fname', a, b, tol, trace)自适用Newton-Cotes数值积分法
  • quad8quad性能和精度更好

非线性方程

  • r = roots(p) 多项式非线性函数求根
  • z = fzero('fname', x0, tol, trace) 单变量函数求零点,只给出离x0最近的根

微分方程的数值解

  • [t,x] = ode23/45('xprime', [t0,tf], x0, tol, trace)

文件管理

  • cd, type, delete, dir,和bash用起来差不多
  • !可用于执行外部程序

文件输入输出

  • fopen打开二进制文件

    1
    fid = fopen('a.dat', 'r')
  • fread将数据装入变量

    1
    2
    3
    a = fread(fid);
    a = fread(fid, 100);
    a = fread(fid, [10,10]);
  • fwrite按照指定的书精度将矩阵中的元素写入文件

    1
    2
    3
    cnt = fwrite(fid, magic(5), 'integer * 4');
    %返回写入数据的个数
    status = fclose(fid);
  • save命令及-ascii选项

    1
    2
    a = rand(4,3)
    save a.dat a -ascii

符号计算

符号定义

  • sym定义符号或表达式

    1
    2
    3
    4
    sym('x')
    sym(`1 + x / 2`)
    syms a b c d
    %syms可以定义多个符号
  • findsym确认符号表达式中的符号

微积分运算

求导

  • diff(f,t,n)函数f对变量tn阶导,t缺省时对x求导,n缺省为1
  • 参数为矩阵时,作用于每个元素

积分

  • int(f,t) 函数f对变量t求不定积分
  • int(f,t,a,b) 函数f对符号变量求从ab的定积分

极限

  • limita(f,t,a)当符号变量t->a时,函数f的极限,t缺省xa缺省为0

级数和

  • symsum(s,t,a,b)`s中的符号变量tab`的级数和

Taylor展开

  • taylor(f,n,a)函数f对符号变量x或最接近字母x的符号变量在a点的n-1阶泰勒多项式,n缺省时值为6,a缺省值为0

解方程

  • solve(f,t)f中的符号标量t解方程f=0
  • solve('fname',t) 求解形如f(x)=g(x)的方程
  • dsolve('S','s1',...'x')

线性代数

  • 用,都可以用

化简和代换

  • collect合并同类项
  • expand将乘积展开为和式
  • factor将和式展开为乘积
  • horner嵌套多项式
  • simplify利用各种

画图

二维

  • plot(x,y)其中xy为坐标向量
  • plot指令中增加一些参数,可以绘制出不同颜色与不同线性的图形,e.g.

    1
    plot(x, y1, 'k:', x, y2, 'b-')
  • 每条曲线的线型和颜色由字符串'cs'指定,其中'c'表示颜色,'s'表示线型

  • 图形标记指令title,xlabel,ylabel,text,legend
  • axis([xmin, xmax, ymin, ymax])设定坐标轴
  • hold on保持已有图形绘制新的图形
  • fplot(fname, lims, tol)为函数提供自适应采样
  • loglog(x,y)双对数坐标
  • semilogx,semilogy 单对数坐标
  • polar(theat, rho) 极坐标

三维

  • plot3用法同plot
  • mesh(x,y,z,c)绘制三维网格图
  • surf(x,y,z,c)三维曲面图
  • view指定视点
  • contour3等高线图

MATLAB程序设计

输入输出

  • input函数

    1
    2
    A = input('Enter matrix A=>')
    %这样可以在执行该语句时首先给出提示,再接收键盘输入
  • pause(延迟秒数)

  • Disp()输出函数, 输出项可以为矩阵或字符串

分支语句

if语句

  • 结尾需要加end
  • elseif可以连起来写成elseif

swith语句

与C相比:

  • default改为otherwise
  • 结尾加end

循环语句

for语句

  • for 初始条件:步长(缺省为1):终值
1
2
3
for i = 1 : 2 : 2*n-1
%循环体
end
  • for 循环变量=矩阵表达式,使循环变量取遍矩阵里每个数的值(以行为周期)

while语句

  • 结尾加end,用法同C

函数文件

  • 一般格式为
1
2
3
4
function 输出形参表 = 函数名(输入形参表)
%注释说明部分
%函数体
end
  • 当输出形参多于1个时,用方括号括起来
  • 函数调用[输出参数表]=函数名(输入参数表),支持嵌套调用和递归
  • 参数个数可变:通过变量narginnargout实现
  • 函数内部申明的变量都是局部变量
  • 全局变量前缀global,所有函数都可以对其进行存取和修改

关于括号

() 圆括号

引用数组中的元素

[] 方括号

表示向量或矩阵

{} 花括号

用于元胞(cell)数组的分配和引用
元胞与矩阵的区别是能放任何类似的元素,而矩阵只能放数值型数据

1
2
3
4
5
6
7
8
9
10
D={[1 2 3 4],'abc',{7 8 9},[4 5 6;11 22 33]}

D{1} %表示D中第一个元素 显示为 1 2 3 4

D{1}(2) %表示D中第一个元素中第二个元素 显示为 2
D{3}{1} %表示第三个元素中第一个元素 显示为 7

D{3}(1) %表示第三个元素中第一个元素 显示为{[7]}

D{[1 2 3]} %表示前三个元素 显示为1 2 3 4 ; ‘abc’ ;{[7]} {[8]} {[9]}
CATALOG
  1. 1. 入门技能
    1. 1.1. 命令行命令
    2. 1.2. 变量
    3. 1.3. 显示格式
  2. 2. 数值计算
    1. 2.1. 矩阵创建
    2. 2.2. 矩阵运算与数组运算
    3. 2.3. 多项式
      1. 2.3.1. 表示
      2. 2.3.2. 多项式运算
    4. 2.4. 数值积分
    5. 2.5. 非线性方程
    6. 2.6. 微分方程的数值解
    7. 2.7. 文件管理
    8. 2.8. 文件输入输出
  3. 3. 符号计算
    1. 3.1. 符号定义
    2. 3.2. 微积分运算
      1. 3.2.1. 求导
      2. 3.2.2. 积分
      3. 3.2.3. 极限
      4. 3.2.4. 级数和
      5. 3.2.5. Taylor展开
    3. 3.3. 解方程
    4. 3.4. 线性代数
    5. 3.5. 化简和代换
  4. 4. 画图
    1. 4.1. 二维
    2. 4.2. 三维
  5. 5. MATLAB程序设计
    1. 5.1. 输入输出
    2. 5.2. 分支语句
      1. 5.2.1. if语句
      2. 5.2.2. swith语句
    3. 5.3. 循环语句
      1. 5.3.1. for语句
      2. 5.3.2. while语句
    4. 5.4. 函数文件
  6. 6. 关于括号
    1. 6.1. () 圆括号
    2. 6.2. [] 方括号
    3. 6.3. {} 花括号