准备

  • 本机环境为 macOS Catalina10.15.6Octave 默认的编辑器为 Emacs,每次使用 edit [文件名.m] 创建或打开脚本文件时如果不想使用 Emacs 而使用 Vim,首先修改 octaverc 文件: vim /usr/local/share/octave/site/m/startup/octaverc,并且修改 Octave 前导符,添加以下配置: ```matlab setenv(‘GNUTERM’,’x11’) # Install gnuplot —with-x11 via homebrew PS1(‘>> ‘)

edit mode sync edit home . EDITOR(‘vim > /dev/tty 2>&1 < /dev/tty %s’)

  1. <a name="2b6bc0f2"></a>
  2. ### 操作
  3. ```matlab
  4. zeros(3, 4) % 创建3x4的0阵
  5. ones(3, 4) % 创建3x4的1阵
  6. eye(3, 5) % 创建4x5的对角阵
  7. v = [3, 4, 5, -1]
  8. A = diag(v) % 创建一个4x4的方阵,对角为3 4 5 -1
  9. A = [1, 2, 3, 4;
  10. 5, 6, 7, 8;
  11. 9, 10, 11, 12]
  12. u = diag(A) % 结果 u = [1, 6, 11],将A的对角转化为u向量
  13. inv(A) % 求解A的逆
  14. C = A'*b
  15. C = A\b
  16. % 以上两种方法算出的C都是A的逆乘以b的结果
  17. A = [2 3 0; 1 0 -2; 0 0 3]
  18. A + 2 % 该操作将A中每个元素+2
  19. A + B % 两个行列数相同的矩阵进行加法运算
  20. A(:, n) % A的第n列元素
  21. A(m, :) % A的第m行元素
  22. a1 = [2; 1; 0]
  23. a2 = [3; 0; 0]
  24. a1.*a2 % 结果为[6; 0; 0],即如果两个vector size相同,则通过.*实现元素之间相乘
  25. a1.^3 % 对a1的每个元素取3次方 结果为[8; 1; 0]
  26. a1.^a2 % 对a1的每个元素取a2的每个元素次方 结果为[8; 1; 1] octave中 0 ^ 0 = 1
  27. a1./a2 % 结果为[0.66667; Inf; NaN] 其中Inf表示无穷 NaN为不存在的数
  28. a = input('give me a number ') % 类似于C语言的scanf 字符串为提示语
  29. save -mat workspace.mat % 将当前内存中的variable保存至磁盘文件xxx.mat中
  30. save -mat workspace.mat var_name1 var_name2 ... % 加载制定变量
  31. load xxx.mat % 将之前保存在磁盘的一组变量写入内存中
  32. load xxx.mat var_name1 var_name2 ... % 将var_name对应的变量加载至内存中
  33. save -ascii onevar.txt % 将矩阵以ascii形式保存至xxx.txt文本中 文件可被编辑者修改
  34. save -ascii onevar.txt var_name1 var_name2 ...
  35. C = load('onevar.txt') % 将xxx.txt结果加载给C
  36. load onevar.txt % 生成一个以文件名为名称的变量 存储xxx.txt中的值
  37. [fileID, message] = fopen('a.txt', 'w') % 打开一个文件,返回fileID类似C语言的文件描述符
  38. sprintf(fileID, 'lalala will be written in the txt')
  39. fclose(fileID) % 关闭对应的文件句柄
  40. x = linspace(-pi, pi, 35) % x为一个行向量,-pi到pi之间的35个均匀的点被分给x
  41. titile("sin(x) and cos(x)") % 在脚本中给图像正上方添加标题字符串
  42. legend('sin(x)', 'cos(x)', string3, ...) %绘制右上角线条标记,字符串顺序与plot函数中线条顺序对应,具体看后面绘图部分示例
  43. plot(gca, x, f(x), 'b-', 'linewidth', 2) % 绘制2D图像
  44. plot3(gca, x, y, f(x, y), 'b:', 'linewidth', 2) % 绘制3D图像
  45. surf(X,Y,Z) % 创建一个三维曲面图,它是一个具有实色边和实色面的三维曲面。

脚本

往往简单的octave或者matlab命令无法满足我们的需要,我们需要对一条一条的命令进行组合,将其生成为一个脚本(script)来发挥其更强大的一面,我们如何创建一个脚本呢,在指定的目录下创建目录 mkdir,通过 cd 进入对应目录并创建xxx.m文件,后缀为m,然后第一行紧跟的注释用%,则为我们的帮助文档,我们可以通过执行 help xxx 来查看该脚本对应的帮助文档。一个简单的带有输入、计算、输出的代码如下:
image.png

我们来看一下其帮助文档:
image.png

我们对这个简单的代码执行一下:
image.png

Figure Plot Graph 图

  • Figure: A window which includes graphic objects

    linspace (base, limit) linspace (base, limit, n)

    Return a row vector with n linearly spaced elements between base and limit. If the number of points(n) is not specified, a value of 100 is used.

接下来展示几个简单的绘图结果,其中 'r:o' 表示颜色为red( m 表示粉色,k 表示黑色,b 表示蓝色),o 表示点为圈(还可以使用 . 或者 x,分别代表点和叉),k和o之间的冒号表示图像为虚线,如果要表示为实线则 k-o即可,linewidth 后跟数字2,控制线粗为2。我们会发现随着点数增加,拟合出来的图像效果越来越好。

1. 绘制 第五章 Octave入门 - 图4第五章 Octave入门 - 图5 仅使用十个点
image.pngimage.png

2. 绘制 第五章 Octave入门 - 图8第五章 Octave入门 - 图9 使用三十个点
image.pngimage.png

3. 绘制 第五章 Octave入门 - 图12第五章 Octave入门 - 图13 使用五十个点
image.pngimage.png

4. 绘制 第五章 Octave入门 - 图16第五章 Octave入门 - 图17 使用一百个点
image.pngimage.png

现在我们要在图像中加入 第五章 Octave入门 - 图20 的图像,用实线表示
image.pngimage.png

给我们的图像添加 title线条说明legend,并且添加坐标名称xlabel(stringname)ylabel(stringname),并将其保存,通过 saveas(gcf, '文件名', '文件后缀'),文件后缀如:pdf, eps等
image.pngimage.png

绘制3D用到 plot3()
image.pngimage.png

3D曲面 第五章 Octave入门 - 图27 的图像如下,其中 surf(X, Y, Z) 用于创建一个有实色边和实色面的三维曲面。
image.pngimage.png

  • Plot: A graphic object with axis
  • Graph: A drawing in a graphic object

函数

内置函数
image.png

创建普通函数

  1. function [a, b, ..] = func_name(A, B, ..)
  2. %% 函数功能体
  3. end % 或者 endfunction


需要说明的是,a, b, c, .. 为返回值的个数,A, B, .. 为我要传递的参数。
image.png
image.png

创建匿名函数

  1. % 创建了一个匿名函数f(a, b, c),功能为计算a*b*c
  2. f = @(a, b, c) a*b*c


使用匿名函数一般用于简单计算,而非复杂算法。
image.png
image.png

创建inline函数
image.pngimage.png

逻辑操作

image.png

if-elseif-else语句

image.png
image.png

switch-case-otherwise语句

image.png

循环

for
image.png

while
image.png