Octave/Matlab语法

基础操作

% 代表注释
% 改变 Octave 提示符
PS1('>> ');
% 改变工作目录
cd 'c:/path/to/desired/directory name'
% 其中对于 / 不需要额外的转义字符
%% 基础操作和变量赋值
5+6
3-2
5*8
1/2
2^6      % 2的6次方
1 == 2   % 逻辑判断
1 ~= 2   % 不等于不是 "!="
1 && 0   % 与
1 || 0   % 或
xor(1,0) % 异或
%% 变量赋值
a = 3; % 交互式环境下 ;可以抑制变量的输出
b = 'hi';
c = 3>=1;

% 变量显示:
a = pi
disp(a)
disp(sprintf('2 decimals: %0.2f', a))
disp(sprintf('6 decimals: %0.6f', a))
format long
a
format short
a
%%  向量和矩阵
A = [1 2; 3 4; 5 6]

v = [1 2 3]
v = [1; 2; 3]
v = [1:0.1:2]  % 从1到2(包含)步长为0.1 绘制坐标轴时非常有用
v = 1:6        % 从1到6,步长为1

C = 2*ones(2,3)  % 同 C = [2 2 2; 2 2 2]
w = ones(1,3)    % 1x3 全1向量
w = zeros(1,3)   % 1x3 全0向量
w = rand(1,3)    % 矩阵的所有值服从[0,1]均匀分布(uniform distribution)
w = randn(1,3)   % 矩阵的所有值服从均值为0,方差为1的正态分布(normal distribution),注意加分号
w = -6 + sqrt(10)*(randn(1,10000));  % (均值 = -6, 方差 = 10)
hist(w)     % 绘制10个方块的直方图(histogram) (默认)
hist(w,50)  % 绘制50个方块的直方图
% 注意: 如果 hist() 一直未响应, 尝试使用 "graphics_toolkit('gnu_plot')" 

I = eye(4)    % 4x4 单位矩阵(identity matrix)

% help 帮助
help eye
help rand
help help    

  


数据处理


%% 维数显示
sz = size(A) % 结果为1x2 矩阵: [(行数) (列数)]
size(A,1)  % A的行数
size(A,2)  % A的列数
length(v)  % 行、列最长的那个维数
%% 读写数据
pwd    % 显示当前环境位置
cd 'C:\Users\jinpf\Octave files'   % 更改目录
ls     % 显示当前目录下的文件名
load q1y.dat    % 或者, load('q1y.dat'),其中q1y.dat和q1x.dat的内容如下文所示
load q1x.dat
who    % 显示工作环境中已设置的所有变量
whos   % 显示工作环境中已设置的所有变量 (包括具体信息) 
clear q1y       % clear 命令如果没带参数则清空所有变量
v = q1x(1:10);  % q1x的前10个元素 (按列计算)
save hello.mat v;   % 将v存入文件 hello.mat
save hello.txt v -ascii; % 以ascii存储
% fopen, fread, fprintf, fscanf 同样可以用于读写数据
%% 索引
A(3,2)  % 索引采用 (行,列)
A(2,:)  % 第二行 
        % ":"代表该维所有元素
A(:,2)  % 第二列
A([1 3],:) % 显示第一、三行

A(:,2) = [10; 11; 12]     % 对第二列赋值
A = [A, [100; 101; 102]]; % 添加列元素
A(:) % 将所有元素转行为列向量
% 数据组合
A = [1 2; 3 4; 5 6]
B = [11 12; 13 14; 15 16] % 和A维度一样
C = [A B]  
C = [A, B] 
C = [A; B]
B = A(:, 1:2); %取A的前两列
B = A(1:4, 1:2); %从前四列取出前两列

  

矩阵运算


%% 初始化变量
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 .* C  或 A * B 出错
A .^ 2            % 元素单位平方
1./v              % 元素单位倒数
log(v)            % 元素单位
exp(v)
abs(v)
-v

v + ones(length(v), 1)  % 同 v + 1

A'                % 矩阵转置
%% 常用函数

% max (or min)
a = [1 15 2 0.5]
val = max(a)
[val,ind] = max(a)       % val 赋值为向量中最大的元素 ind 赋值为该最大元素的索引
val = max(A)             % 如果A是矩阵,返回每列最大元素

% compare values in a matrix & find
a < 3                % 返回元素是否小于3的判断
find(a < 3)          % 返回小于3的位置
A = magic(3)         % 产生一个3*3魔方阵 - 矩阵所有行列对角线之和相同 - 机器学习不常用
[r,c] = find(A>=7)   % 返回符合条件的元素的行列,r、c分别以列向量存储

% sum, prod
sum(a)               % 求和
prod(a)              % 求乘积
floor(a) % or ceil(a) % 去下整、去上整
max(rand(3),rand(3)) % 返回逐元素对比,较大的矩阵
max(A,[],1)          % 返回每列最大元素 等同于max(A)
max(A,[],2)          % 返回每行最大元素
max(max(A))          % 矩阵A最大元素
A = magic(9)
sum(A,1)
sum(A,2)
sum(sum( A .* eye(9) ))  % 对角线元素求和
sum(sum( A .* flipud(eye(9)) ))  % 斜对角线元素和 flipud 上下翻转
M = mean(A)
返回沿数组中不同维的元素的平均值。
M = mean(A,2) %返回矩阵中每一行的均值
y=std(x) 算出x的标准偏差。 x可以是vector或者一个matrix矩阵。
若x是vector,则y是算x的标准偏差。
若x是matrix,则y是个vector,存放的是算每一列/行的标准偏差。 std (x, flag,dim)
fla表示标注公差时是要除以n还是n-1
flag==0.........是除以n-1
flag==1.........是除以n
dim表示维数
dim==1..........是按照列分
dim==2..........是按照行分 若是三维的矩阵,dim==3就按照第三维来分数据
默认std格式是std(x,0,1);
% 矩阵求逆 (伪逆) pinv(A) % inv(A'*A)*A'

  


绘图


%% plotting 绘图
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" 来关闭
plot(t,y1,'r');
xlabel('time');
ylabel('value');
legend('sin','cos');
title('my plot');
print -dpng 'myPlot.png'
close;           % 或"close all"关闭所有
figure(1); plot(t, y1);
figure(2); plot(t, y2);
figure(1), clf;  % 指定某个图 clf - 清空图
subplot(1,2,1);  % 分成 1x2 的图, 访问第一个图
plot(t,y1);
subplot(1,2,2);  % 分成 1x2 的图, 访问第二个图
plot(t,y2);
axis([0.5 1 -1 1]);  % 改变坐标范围
%% 绘制矩阵 
figure;
imagesc(magic(15)), colorbar, colormap gray;
% comma-chaining function calls.  
a=1,b=2,c=3    % 逗号分割,连续几条命令,输出结果
a=1;b=2;c=3;   % 分号分割,连续几条命令,不输出结果
clf;  %清除figure内容

  


控制语句 for while if


v = zeros(10,1);
for i=1:10, 
    v(i) = 2^i;     % 缩进仅为美观 不影响程序
end;

% Can use "break" "continue" inside for while loops to control execution.

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 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

  


函数定义


每个函数定义在一个文件中,文件名为 “functionName.m”,其中文件名和定义函数名需要保持一致,以便调用。

如定义 “squareThisNumber.m”:

function y = squareThisNumber(x)
y = x^2;

在Octave中调用需要将函数定义放到Octave运行Path中。

  • 方案一:
cd /path/to/function
  • 方案二:
addpath('/path/to/function/')
savepath       % 方便以后使用

之后调用函数:

functionName(args)

Octave函数可以返回多个值:

%% 定义
function [y1, y2] = squareandCubeThisNo(x)
y1 = x^2
y2 = x^3
%% 调用
[a,b] = squareandCubeThisNo(x)
posted on 2016-08-22 09:34  Satchmo丶  阅读(3913)  评论(0编辑  收藏  举报