octave基本教程
不等于:~=
异或: xor(1,0)
基本操作:
>>a = pi;
>>a
a = 3.1416
>>disp(a);
3.1416
>>disp(sprintf('2 decimals: %0.2f', a))
2 decimals: 3.14
>>disp(sprintf('2 decimals: %0.6f', a))
2 decimals: 3.141593
>>fromat long
>>a
a=3.14159265358979
>>format short
>>a
a=3.1416>>A = [1 2; 3 4; 5 6]; %矩阵
>>A = [1 2;
>3 4;
>5 6];
>>
>>v = 1:0.1:2; % 以0.1为间隔建立行向量v=[1.0,1.1,...,1.9,2.0]
>>v = 1:5; % v=[1,2,3,4,5]
>>
>>ones(2,3) % 二行三列的矩阵,所有元素都是1
>>c = 2*ones(2,3);
>>zeros(1,3) %所有元素都是0
>>rand(1,3) %随机生成元素,0到1之间的小数
>>randn(1,3) %均值为0方差为1的高斯(正态)分布
>>
>>w = -6 + sqrt(10)*(randn(1,10000))
>>hist(w) %画出直方图
>>hist(w,50) %50个柱子的直方图
>>
>>eye(4) %生成4*4的单位矩阵
>>
>>%帮助
>>help eye
>>help rand
>>help help%% dimensions
>>sz = size(A) % 返回1x2的矩阵: [行数 列数]
>>size(A,1) % 行数
>>size(A,2) % 列数
>>length(v) % 返回 max(行数,列数)
%% loading data
>>pwd % 输出当前所在路径
>>cd 'C:\Users\ang\Octave files' % 改变路径
>>ls % 列出当前路径下所有文件
>>load q1y.dat % 加载文件
>>load('q1y.dat') % 同上
>>load q1x.dat
>>who % 列出所有变量
>>whos % 列出所有变量的详细信息
>>clear q1y % 删除变量
>>clear %删除所有变量
>>v = q1x(1:10); % q1x的前十个元素
>>save hello.mat v; % 把v存入文件hello.mat
>>save hello.txt v -ascii; % save as ascii
% fopen, fread, fprintf, fscanf also work [[not needed in class]]
%% indexing
>>A(3,2) % 索引 (row,col)
>>A(2,:) % 获得第二行
% ":" means every element along that dimension
>>A(:,2) % 获得第二列
>>A([1 3],:) % 第一行和第三行的所有元素
>>A(:,2) = [10; 11; 12] % 给第二列重新赋值
>>A = [A, [100; 101; 102]]; % 在右侧添加一列
>>A(:) % 把所有元素放入一个列向量,按列一次存入
% Putting data together
>>A = [1 2; 3 4; 5 6]
>>B = [11 12; 13 14; 15 16] % same dims as A
>>C = [A B] % 左右连接A和B
>>C = [A, B] % 左右连接A和B
>>C = [A; B] % 上下连接A和B %% 初始化变量
>>A = [1 2;3 4;5 6]
>>B = [11 12;13 14;15 16]
>>C = [1 1;2 2]
>>v = [1;2;3]
%% 矩阵操作
>>A * C % 矩阵相乘
>>A .* B % 点乘,A中的每个元素与B中的相应元素相乘
% A .* C 或 A * B 会报错,因为维度错误
% .号一般表示元素位运算
>>A .^ 2 % A中的每个元素求平方
>>1./v % 对每个元素求倒数
>>log(v) % 每个元素求对数
>>exp(v) % e的次方
>>abs(v) % 求绝对值
>>-v % -1*v
>>v + ones(length(v), 1) % v中的每个元素加1
>>v + 1 % 同上
>>A' % A的转置矩阵
%% misc useful functions
% max (or min)
>>a = [1 15 2 0.5]
>>val = max(a) % a中的最大值,val = 15
>>[val,ind] = max(a) % a中的最大值及其索引,val = 15,in = 2
>>val = max(A) % if A is matrix, returns max from each column
>>max(A) % 对每一列求最大值
% compare values in a matrix & find
>>a < 3 % 检查每个元素是否小于3,返回[1 0 1 1]
>>find(a < 3) % 返回小于3的元素索引,[1 3 4]
>>A = magic(3) % 生成魔方阵,所有的行和列和对角线的元素加起来都等于相同值
>>[r,c] = find(A>=7) % 返回大于7的元素索引,r和c都是列向量,r存放行数,c存放列数
% sum, prod
>>sum(a) % 所有元素相加
>>prod(a) % 所有元素相乘
>>floor(a) % 向下舍入
>>ceil(a) % 向上舍入
>>max(rand(3),rand(3)) %随机生成两个3*3矩阵,逐元素比较,返回结果为一个3*3矩阵
>>max(A,[],1) % 每一列的最大值,返回值为1*n矩阵
>>max(A,[],2) % 每一行的最大值,返回值为m*1矩阵
>>max(A) % 每一列的最大值
>>max(max(A)) % A中的最大元素
>>max(A(:)) % 同上
>>A = magic(9)
>>sum(A,1) % 每一列求和,返回值为1*9矩阵
>>sum(A,2) % 每一行求和,返回值为9*1矩阵
>>sum(sum( A .* eye(9) )) % 求对角线的和
>>sum(sum( A .* flipud(eye(9)) )) % 另一个对角线的和
% flipup/flipud表示向上/向下翻转
% 矩阵求逆(伪逆)
>>pinv(A) % 伪逆矩阵
>>inv(A'*A)*A'%% 绘图
>>t = [0:0.01:0.98];
>>y1 = sin(2*pi*4*t);
>>plot(t,y1); % 画正弦图
>>y2 = cos(2*pi*4*t);
>>hold on; % 保留正弦图,"hold off" to turn off
>>plot(t,y2,'r'); % 用红线画余弦图
>>xlabel('time'); % x轴显示label
>>ylabel('value'); % y轴显示label
>>legend('sin','cos'); % 标记两条曲线,右上角显示
>>title('my plot'); % 图的标题
>>plot(..., 'rx'); % 散点图
>>plot(..., 'rx', 'MarkerSize', 10); % 散点图,调节点的大小为10
>>print -dpng 'myPlot.png' % 保存图片
>>help plot % 查看帮助,保存成其他格式
>>close; % 关闭图片,or, "close all" to close all figs
>>figure(1); plot(t, y1); % 图片命名以显示几多个图片
>>figure(2); plot(t, y2);
>>subplot(1,2,1); % 把图像分为1*2的表格,并且使用第一个格子
>>plot(t,y1); % 图像显示在左半边
>>subplot(1,2,2); % 把图像分为1*2的表格,并且使用第二个格子
>>plot(t,y2); % 图像显示在右半边
>>axis([0.5 1 -1 1]); % 改变x轴和y轴的范围,x轴[0.5,1],y轴[-1,1]
>>clf; % 清除图像
%% display a matrix (or image)
>>imagesc(magic(5)) %绘制一个5*5的彩色格图,不同颜色对应矩阵中的不同值
>>imagesc(magic(15)), colorbar, colormap gray; % colorbar:显示bar(不同颜色对应数值);colormap gray:黑白
% 逗号和句号
>>a=1,b=2,c=3 % 输出a=1 b=2 c=3
>>a=1;b=2;c=3; % 不输出%% for
>>v = zeros(10,1);
>>for i=1:10,
> v(i) = 2^i;
>end;
% Can also use "break" and "continue" inside for and while loops to control execution.
%% while
>>i = 1;
>>while i <= 5,
> v(i) = 100;
> i = i+1;
> end;
>>i = 1;
>while true,
> v(i) = 999;
> i = i+1;
> if i == 6,
> break;
> end;
> end;
%%if
>>if v(1)==1,
> disp('The value is one!');
> elseif v(1)==2,
> disp('The value is two!');
> else
> disp('The value is not one or two!');
> end;
%%函数
function y = squareThisNumber(x)
y = x^2;
%%调用函数
>>cd /path/to/function
>>functionName(args)
%%设置搜索路径,不用cd调用函数
>>addpath('/path/to/function/')
>>functionName(args)
%%返回多个参数的函数
function [y1, y2] = squareandCubeThisNo(x)
y1 = x^2
y2 = x^3
%%调用
>>[a,b] = squareandCubeThisNo(x)
向量化
使程序和计算更简单: