准备
- 本机环境为
macOS Catalina10.15.6
,Octave
默认的编辑器为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’)
<a name="2b6bc0f2"></a>
### 操作
```matlab
zeros(3, 4) % 创建3x4的0阵
ones(3, 4) % 创建3x4的1阵
eye(3, 5) % 创建4x5的对角阵
v = [3, 4, 5, -1]
A = diag(v) % 创建一个4x4的方阵,对角为3 4 5 -1
A = [1, 2, 3, 4;
5, 6, 7, 8;
9, 10, 11, 12]
u = diag(A) % 结果 u = [1, 6, 11],将A的对角转化为u向量
inv(A) % 求解A的逆
C = A'*b
C = A\b
% 以上两种方法算出的C都是A的逆乘以b的结果
A = [2 3 0; 1 0 -2; 0 0 3]
A + 2 % 该操作将A中每个元素+2
A + B % 两个行列数相同的矩阵进行加法运算
A(:, n) % A的第n列元素
A(m, :) % A的第m行元素
a1 = [2; 1; 0]
a2 = [3; 0; 0]
a1.*a2 % 结果为[6; 0; 0],即如果两个vector size相同,则通过.*实现元素之间相乘
a1.^3 % 对a1的每个元素取3次方 结果为[8; 1; 0]
a1.^a2 % 对a1的每个元素取a2的每个元素次方 结果为[8; 1; 1] octave中 0 ^ 0 = 1
a1./a2 % 结果为[0.66667; Inf; NaN] 其中Inf表示无穷 NaN为不存在的数
a = input('give me a number ') % 类似于C语言的scanf 字符串为提示语
save -mat workspace.mat % 将当前内存中的variable保存至磁盘文件xxx.mat中
save -mat workspace.mat var_name1 var_name2 ... % 加载制定变量
load xxx.mat % 将之前保存在磁盘的一组变量写入内存中
load xxx.mat var_name1 var_name2 ... % 将var_name对应的变量加载至内存中
save -ascii onevar.txt % 将矩阵以ascii形式保存至xxx.txt文本中 文件可被编辑者修改
save -ascii onevar.txt var_name1 var_name2 ...
C = load('onevar.txt') % 将xxx.txt结果加载给C
load onevar.txt % 生成一个以文件名为名称的变量 存储xxx.txt中的值
[fileID, message] = fopen('a.txt', 'w') % 打开一个文件,返回fileID类似C语言的文件描述符
sprintf(fileID, 'lalala will be written in the txt')
fclose(fileID) % 关闭对应的文件句柄
x = linspace(-pi, pi, 35) % x为一个行向量,-pi到pi之间的35个均匀的点被分给x
titile("sin(x) and cos(x)") % 在脚本中给图像正上方添加标题字符串
legend('sin(x)', 'cos(x)', string3, ...) %绘制右上角线条标记,字符串顺序与plot函数中线条顺序对应,具体看后面绘图部分示例
plot(gca, x, f(x), 'b-', 'linewidth', 2) % 绘制2D图像
plot3(gca, x, y, f(x, y), 'b:', 'linewidth', 2) % 绘制3D图像
surf(X,Y,Z) % 创建一个三维曲面图,它是一个具有实色边和实色面的三维曲面。
脚本
往往简单的octave或者matlab命令无法满足我们的需要,我们需要对一条一条的命令进行组合,将其生成为一个脚本(script)来发挥其更强大的一面,我们如何创建一个脚本呢,在指定的目录下创建目录 mkdir
,通过 cd
进入对应目录并创建xxx.m文件,后缀为m,然后第一行紧跟的注释用%,则为我们的帮助文档,我们可以通过执行 help xxx
来查看该脚本对应的帮助文档。一个简单的带有输入、计算、输出的代码如下:
我们来看一下其帮助文档:
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. 绘制 在 仅使用十个点
2. 绘制 在 使用三十个点
3. 绘制 在 使用五十个点
4. 绘制 在 使用一百个点
现在我们要在图像中加入 的图像,用实线表示
给我们的图像添加 title
和 线条说明legend
,并且添加坐标名称xlabel(stringname)
,ylabel(stringname)
,并将其保存,通过 saveas(gcf, '文件名', '文件后缀')
,文件后缀如:pdf, eps等
绘制3D用到 plot3()
3D曲面 的图像如下,其中 surf(X, Y, Z)
用于创建一个有实色边和实色面的三维曲面。
- Plot: A graphic object with axis
- Graph: A drawing in a graphic object
函数
内置函数
创建普通函数
function [a, b, ..] = func_name(A, B, ..)
%% 函数功能体
end % 或者 endfunction
需要说明的是,a, b, c, ..
为返回值的个数,A, B, ..
为我要传递的参数。
创建匿名函数
% 创建了一个匿名函数f(a, b, c),功能为计算a*b*c
f = @(a, b, c) a*b*c
使用匿名函数一般用于简单计算,而非复杂算法。
逻辑操作
if-elseif-else语句
switch-case-otherwise语句
循环
for
while
- 推荐课程:(Matlab and Octave for Beginners)Octave入门课程-洛桑联邦理工学院