Octave 教程(Octave Tutorial)
Octave是一种编程语言,旨在解决线性和非线性的数值计算问题。Octave为GNU项目下的开源软件,早期版本为命令行交互方式,4.0.0版本发布基于QT编写的GUI交互界面。Octave语法与Matlab语法非常接近,可以很容易的将matlab程序移植到Octave。同时与C++,QT等接口较Matlab更加方便。
基本操作
ubuntu 安装Octave
sudo apt-get update
sudo apt-get install octave
示范最基本的 Octave 代码:
请注意
不等于符号的写法是这个波浪线加上等于符号 (
~=
),而不是等于感叹号加等
号 (!=
),这是和其他一些编程语言中不太一样的地方
移动数据
如何对矩阵进行相乘?
如何保存计算结果?
如何移动这些数据并用数据进行操作?
size()
命令返回的是一个n x m
的矩阵
你也可以键入size(A, 1)
,将返回3,这个命令会返回 A 矩阵的第一个元素,A 矩阵的
第一个维度的尺寸,也就是 A 矩阵的行数。
同样,命令 size(A, 2),
将返回 2,也就是 A 矩阵的列数。
你也可以键入length(A)
,由于矩阵 A 是一个 3×2 的矩阵,因此最大的维度应该是 3,
因此该命令会返回 3。
who
函数能让你看到当前工作空间中的所有变量,同样还有另一个 whos
命令,能更
详细地进行查看。
double
意思是双精度浮点型,这也就是说,这些数都是实数,是浮点数。
如果你想删除某个变量,你可以使用 clear
命令,我们键入 clear featuresX
,然后再输
入 whos 命令,你会发现 featuresX
消失了。
假如我们想把它存入硬盘,那么用 save savedata.mat v
命令,这个命令会将变量 v 存成一个叫 hello.mat
的文件,让我们回车,现在我的桌面上就出现了一个新文件,名为savedata.ma
t。
清除所有变量,直接键入 clear
,这样将删除工作空间中的所有变量,所以现
在工作空间中啥都没了。
但如果载入 savedata.mat
文件,我又重新读取了变量 v,因为我之前把变量 v 存入了
savedata.mat 文件中,所以我们刚才用save
命令做了什么?
这个命令把数据按照二进制形式储存,或者说是更压缩的二进制形式,因此,如果 v 是很大的数据,那么压缩幅度也更大,占用空间也更小。如果你想把数据存成一个人能看懂的形式,那么可以键入:
save savedata1.txt v -ascii
这样就会把数据存成一个文本文档,或者将数据的 ascii 码存成文本文档。
我键入了这个命令以后,我的桌面上就有了 hello.txt 文件。如果打开它,我们可以发现这个文本文档存放着我们的数据.
取出某行某列矩阵
计算数据
设A = magic(3)
,magic 函数将返回一个矩阵,称为魔方阵或幻方 (magic squares),它们
具有以下这样的数学性质:它们所有的行和列和对角线加起来都等于相同的值。
绘图数据
横轴是 t 变量,纵轴是 y1,也就是我们刚刚所输出的正弦函数。
>> t=[0:0.01:0.98];
>> y1=sin(2*pi*4*t);
>> y2=cos(2*pi*4*t);
>> plot(t,y1);
>> plot(t,y2);
输入:plot(t, y1),得到正弦函数,我使用函数 hold on,hold on 函数
的功能是将新的图像绘制在旧的之上
我现在绘制 y2,输入:plot(t, y2)。
>> plot(t,y1);
>> hold on;
>> plot(t,y2,'r');
>> xlabel('time');
>> ylabel('value');
>> title('my plot');
>> legend('sin','cos');
>> cd '/home/szm/';print -dpng 'myPng';
>> close %close the figure
你键入figure(1); plot(t, y1);
将显示第一张图,绘制了变量 t y1。
键入figure(2); plot(t, y2);
将显示第一张图,绘制了变量 t y2。
subplot
命令,我们要使用 subplot(1,2,1),
它将图像分为一个 1*2 的格子,也就是前两
个参数,然后它使用第一个格子,也就是最后一个参数 1 的意思。
>> clf %清除图像
>> figure(1);plot(t,y1);
>> figure(2);plot(t,y2);
>> subplot(1,2,1) %divid 1*2,access the first element
>> plot(t,y2);
>> subplot(1,2,2);
>> plot(t,y1);
>> axis([0.5,1,-2,2])
>> print -dpng '2.png'
也就是 imagesc(A)命令,它将会绘制一个 55
的矩阵,一个 55 的彩色格图,不同的颜色对应 A 矩阵中的不同值。
我还可以使用函数 colorbar,让我用一个更复杂的命令 imagesc(A),colorbar,colormap
gray。这实际上是在同一时间运行三个命令:运行 imagesc,然后运行,colorbar 然后运行
colormap gray。
它生成了一个颜色图像,一个灰度分布图,并在右边也加入一个颜色条。所以这个颜色
条显示不同深浅的颜色所对应的值
控制语句