基礎操作
% 代表注釋
% 改變 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)
