Matlab心得

介绍

在做ME599的时候学习了下。不同语言的Bug还是难de。

基础知识:

  • 读入文件:load
  • numel(A) = prod(size(A)) 返回A中元素个数

pathtool 添加路径

运行一行代码 ❎ 只能运行选中代码,然后Fn+Shift+F7
注释用百分号% 代替#
「1~=2」表示1不等于2 用~代替叹号
或者|| 和&& 异或xor()
a=pi在后面加一个;冒号可以抑制打印
disp(sprintf(‘6 decimals: %0.6f’,a)) %结果为 ‘6 decimals: 3.141593’
format short/long 可以在打印东西之前写出来 改变打印的位数

矩阵生成

  • 用中括号括起来,用分号按行输入
  • ones(m,n) 生成一个m*n的矩阵,元素全为1. zeros同理
  • eye(n) 生成n维单位矩阵

rand()生成0-1均匀分布的随机数,可以用rand(m,n)来生成随机矩阵
randn() 生成标准正态

clc清屏
a=出发数字:步长:结束数字——生成一个向量,步长默认是1
hist(w,方格数)生成密度图像
size返回矩阵的维数 size(a,1|2)返回第一个或第二个维数
length给出一个矩阵最长的维数,所以对一个向量可以直接返回它的长度
who 可以显示当前所有变量 whos更详细 clear可以清除一个变量 什么都不加的clear全部清除
选择一个向量的前十位:v=priceY(1:10)
save hello.mat v: 把数据v存为hello.mat文件
a([1 3]😅 矩阵第一行和第三行所有元素
A=[A,[1;2;3]]:矩阵A右侧加上一列123
A(:)将A元素变成一个列向量输出
b1=[a:a] b2=[a a]/[a,a] b1是上下合并 b2是左右合并
a.*b 是把两个矩阵对应位置的数字乘起来作为新元素,所以a和b应该是一样大小的
·点其实代表着element-wise operation;所以 v=[1,2,3] 1./v %1 0.5 0.33

max()返回最大值,

  • 可是如果[v,c]=max(a) 那么v是最大值,c是最大值的index
  • 如果对矩阵作用max,会返回每一列的最大值

find(a<3) 返回a向量中小于3的index
magic(n) 生成一个n阶的矩阵,行和列和对角线和都相同(但是对于每个n只有一种形式)
提取矩阵元素的时候,如果只用一个数字,那么默认是按照列来数
prod() 连乘
floor&ceil地板和天花板函数
max(a,[],1|2) 按列|行来取矩阵a的最大值
sum(a,1|2) 按列|行进行求和
取整个矩阵的最大值:max(max(A))或者max(A(😃)

可以用逗号连接命令或者函数调用,会逐个运行。用冒号连接则不会显示结果

循环:for i = 1:10, v(i)=2^i; end. while和if也要和end连用。if也没有括号

exit和quit都可以退出octave

addpath()添加新路径

  • 取出向量的第五位到最后一位:A(5:end) 注意这个end

  • rng(512) 等同于R里面的set.seed(512)

  • normrnd = rnorm 不过可以直接在后面加上维数,生成众多随机数

  • 创建一个表格:T = table(Age,Height,Weight,BloodPressure,… ‘RowNames’,LastName)

  • fminunc 返回函数最小值(维数大于等于2)

循环

  • 遍历一个未知大小的矩阵/向量:for i = 1:numel(z)

矩阵

  • a(2,:)=[] 删除某一行/列
  • reshape(data,nrow,ncol) 变形矩阵
  • a(: , k:end) end代表最后
  • a=sum(A) %列求和
    b=sum(A,2) %行求和
    c=sum(A(😃) %矩阵求和

函数

f = @(x) 2 * x ^ 2 + x; 创建symbolic function

intlinprog - Mixed-integer linear programming (MILP) 混合整数线性规划问题

画图:

  • figure; open a new figure window
  • flipud(a) 将矩阵a上下翻转
  • hold on 可以让当前的图留住,将下一幅图继续画在上面。
  • xlabel(‘name’)
  • plot(x,y,‘r’)红色
  • legend(‘1’‘2’)加图例
  • title(‘标题’)
  • print -dpng ‘name.png’
  • figure(1);plot();figure(2);plot() 可以同时分别画出来两张图
  • subplot(1,2,1);plot() 将图像空间分成1*2,现在去画第一个
  • axis([横坐标最小值 横坐标最大值 纵坐标最小值 纵坐标最大值])
  • clf清除所有图
  • imagesc(a) 将矩阵a用颜色画出来
  • colorbar 在右侧添上一个颜色条
  • colormap gray将图变成灰色

操作命令

  • ctrl+c : 终止当前程序

包包

  • SVM: liblinear/libsvm

文档发布

官方帮助


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!