Octave/Matlab 简明教程

1 基本操作

以下%表示注释符号。

1.1 变量

Octave基础变量有字符串和数字,不区分数字的类型。

a = 3.14;                             % 赋值数字,“;”表示是否打印出来
b = 'hello octave';                   %字符串,单引号、双引号均可
c = pi;
disp(c);                              %打印c
disp(sprintf("2 decimals: %0.5f", c));%格式化输出,5为小数

1.2 运算符

1.2.1 算数运算符

3 + 2        %加
5 - 3        %减
4 * 8        %乘
12 / 4       %除
5 ^ 2        %幂指数

1.2.2 逻辑运算符

1 == 2       % false
1 ~= 2       % true, 等同于 !=
1 && 1       % AND
 1 || 0      % OR
 xor(1, 0)   % XOR, 表异或

1.2.3 函数运算符

log(32)      %对数运算
exp(11)      %指数运算
abs(-23)     %绝对值运算
cos(pi)      %余弦函数
sin(pi)      %正弦函数
tan(pi)      %正切函数
...

1.3 逻辑控制

1.3.1 循环控制

for i=1:10                      % for循环,以end结束
    disp(2 ^ i);
end

loop = 1 : 10;                  %通过向量数组定义循环
for i = loop            
    disp(2^i);
end

i = 1;                           % while循环,以end结束
while i <= 5              
     disp(i+i);
     i = i + 1;
end

j = 1;
while true                       % break 和continue使用
    j = j + 1;
    if (j == 3)
         continue
    end     
    disp(j);
    if (j == 10)
          break
    end
end
           

1.2.2 分支控制

a = 3;
if (a == 3)          % if 和 elseif 分支控制
   disp(a);
elseif (a == 4) 
   disp(a - 3)
else 
   disp(a + 3)
end      

1.4 帮助函数

任何不会用的函数都能够通过帮助函数进行查看。

help disp        % 查看disp函数帮助
pwd              %显示当前路径
ls               %显示当前路径的文件夹
cd 'path'        %打开该路径
who              %在当前内存中存储的所有变量
whos             %更详细地显示变量的名称、维度和占用多少内存空间和数据类型
clear            %清除所有变量
addpath('path')  %将路径添加到当前搜索处
clc              %清屏,不清变量
PS1("###")       %更改行首输入提示符

2 向量和矩阵

2.1 向量

%%%向量是从1开始计数的
A = [1, 2, 3]            %创建行向量A,也可以不加“,”号
B = [1; 2; 3]            %创建列向量B
C = 1 : 10               %从1到10生成向量
D = 1 : 0.5 : 10         %从1到10,步长0.5生成向量

2.2 矩阵

%%% 矩阵行列从1开始计数
matA = [1, 2, 3; 4, 5, 6]         %构造2*3矩阵
matB = ones(2, 3)                 %生成2*3的元素为1的矩阵
matC = zeros(2, 3)                %生成2*3的元素为0的矩阵 
matD = rand(2, 3)                 %生成2*3的元素为随机数[0 ,1]的矩阵 
matE = randn(2, 3)                %生成2*3的元素为服从正态分布的随机数矩阵
matF = eye(4)                     %生成对角阵
matG = magic(3)                   %生成行列和对角线相加相等的数独矩阵

2.3 向量和矩阵运算

2.3.1 size和length

matA = [1 2; 3 4; 5 6]
size(A)                     %行、列数
size(A, 1)                  %行数
size(A, 2)                  %列数
length(A)                   %矩阵或者向量的最大维数

2.3.2 操作

A = round(rand(4, 3)*10);      %生成0-10的4*3整数矩阵
A(3, 2)                        % 取出第3行第2列元素
A(2, :)                        %取出A中第2行的所有元素
A(:, 2)                        %取出A中第2列的所有元素
A([1 3], :)                    %取出A中第1行和第3行的所有元素
A(:, 2) = [1; 2; 3; 4]         %对A中第2列的所有数据重新赋值	
A = [A;[1, 2, 3]]              %对A新增一行,矩阵合并注意行,列数 
B = A(:)                       %将A的所有元素生成一个向量放到B中
C = ones(4, 2)
D = [A, C]                     %将A和C合并为一个矩阵,矩阵合并注意行,列数 

2.3.3 运算

A = [1 2; 3 4; 5 6]
B = [11 12; 13 14; 15 16]
C = [1 1; 2 2]
matD = A*C                     %矩阵相乘
matE = A.*B                    %A中每个元素与B中对应元素相乘
matF = 1./A                    %求A中每个元素的倒数
log(A)                         %每个元素求对数
exp(A)                         %每个元素求e的幂次方
-A                             %每个元素取负值
matX = A < 3                   %每个元素,小于3为1,反之为0
A'                             %A的转置

2.3.4 高级运算

a = [1, 3, 4, 6]
[val, ind] = max (a)            %返回a中的最大值和索引
find(a<3)                       %返回a中小于3的元素位置索引
A = magic(3)
[r, c] = find(A >= 7)           %返回A中>= 7的元素所在的行数r和列数c
valSum = sum(A)                 %默认对每一列求和
valSumR = sum(A, 1)             %对每一列求和
valSumC = sum(A, 2)             %对每一行求和
prod(A)                         %默认对每一列求连乘
prod(a)                         %求向量中所有元素的乘积
max(A, [], 1)                   % A中每一列的最大值
max(A, [], 2)                   % A中每一行的最大值
flipud(A)                       %实现矩阵A的上下翻转
priv(A)                         %求出A的伪逆矩阵(非方阵也可以得到逆矩阵,就是伪逆矩阵)

3 文件存取

3.1 mat存取

%%%mat文件
A = round(rand(3, 5)*10);
b = 1:10;
save xxx.mat A  b              %将A和b都存到mat文件中
load xxx.mat                   %将xxx.mat中的变量读取到工作空间

3.2 txt存取

%%%txt文件
A = round(rand(3, 5)*10);
b = 1:5;
save xxx.txt A b -ascii         %将A和b都存到txt文件中
load xxx.txt                    %当A和b的列的维度不一样时,会导入出错

3.3 mat和txt存取的区别

mat会将变量单独作为元素存储,存入多少变量,取出来还是多少变量。
txt会将两个变量顺序存储,读出来按一个矩阵来读,如果顺序存储的两个变量列数不一致,则load会提示错误“error: load: unable to determine file format of ‘txttt.txt’”

4 绘图

4.1 绘制直方图

直方图的意义:统计某一区间范围内元素的个数。比如我们界定少年是[0,16], 青年[17, 30],中年[31, 50],老年[51, 80],然后给出1000个人的年龄,按照年龄段划分做出直方图,表示各个年龄段的人数个数。

x = randn(1,10000)
hist(x)                     %默认是将元素中最大和最小值区间划分为10等份,然后统计每个区间内元素个数,绘制成图。纵坐标代表个数,横坐标表示数值区间区间
hist(x, 100)                %指定划分为100等份

xbins = [-4 -2.5 0 0.5 1 3]
hist(x, xbins)              %指定划分区间

ax1 = subplot(2,1,1);
hist(ax1, x)                %指定画图区域
ax2 = subplot(2,1, 2);
hist(ax2, x, 100)

在这里插入图片描述

4.2 绘制曲线图

4.2.1 基本操作

t = [0:0.01:0.5];
y1 = sin(2*pi*2*t);
y2 = cos(2*pi*2*t);
plot(t,y1);
hold on;                    %在原来的图像中画图
plot(t,y2,'r');
xlabel('x axes');           %X轴单位
ylabel('y axes');           %Y轴单位
legend('sin','cos');        %将两条曲线表示出来
title('plot show');         %加入标题
print  -dpng 'myplot.png';  %输出图片为png格式
close                       %关闭

在这里插入图片描述

4.2.2 高级操作

figure(1);plot(t,y1);   %分开画图
figure(2);plot(t,y2);

figure(3);
axis([0.5 1 -1 1]);     %改变轴的刻度 x轴变为[0.5,1] y轴变为[-1,1]
subplot(1,2,1);         %将图像分为1*2的格子,使用第1个
plot(t,y1);
axis([0 1 -1 1]); 
subplot(1,2,2);         %将图像分为1*2的格子,使用第2个
plot(t,y2);
clf;                    %清除一幅图像

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值