• Octave/Matlab初步学习


    Octave/Matlab初步学习

    1.基本运算

    和其他语言一样,可以通过数学运算符号来实现数学公式的运算。逻辑运算也基本相同

    要注意的是,≠这个符号,表达式为

    1 ~= 2

    而不是用!=来表达

    2.变量

    A = 3 

    赋值
    敲下回车键可以自动实现打印输出
    可以通过后面

    A = 3; %semicolon supressing output
    这样就可以不用自动打印

    disp(A)
    这样就可以实现打印

    (pi)可以通过:

    a = pi
    来赋值

    还可以fomat打印格式
    disp(sprintf('2 decimals: %0.2f', a))
    打印出来的结果是:输出小数点后面2位
    2 decimals: 3.14

    这种格式和c语言类似
    也可以控制小数点输出的语句:
    format long format short

    分别定义输出为长小数点和短小数点

    3.矩阵和向量


    A = [1 2;3 4;5 6]
    输出为

    分号则是分割为行,本质上就是换到下一行


    向量也可以定义

    >>v = [1 2 3]
    v = 
    	1 2 3
    >>v = [1; 2; 3]
    v = 
    	1
    	2
    	3
    

    还可以通过步伐来定义矩阵

    v = [1: 0.1 :22]
    意思是从1开始,间隔为0.1,一直增加到2
    输出是;

    相似的还可以通过:步伐,来实现集合赋值

    >>v = 1 : 6
    v = 
    	1 2 3 4 5 6
    

    还可以通过语句来快速定义都是1 的矩阵
    ones(2, 3)
    所有元素都是1

    可以通过

    C = 2*ones(2, 3)
    生成全部是2的矩阵

    w = zeros(1, 3)

    这是一个全部是0的矩阵

    还可以定义随机数矩阵
    数值介于0到1

    rand(3, 3)

    还可以定义正态分布随机变量矩阵
    默认平均数是0,方差等于1

    w = randn(1,3)

    • 可以通过hist(w) 来绘制一个矩阵的直方图

    生成单位矩阵:

    I = eye(3)

    4. 数据导入

    • 先介绍简单的操作:(size 和 length)
    A = [1 2;3 4;5 6];
    size(A)
    #得到了A矩阵是3行2列
    size(A,1)
    #得到了A矩阵的列数
    size(A,2)
    #得到了A矩阵的行数
    v = [1,2,3,4];
    length(v);
    #得到v的数据长度
    
    • 介绍文件的加载和读入,修改

      1. 进入目录等等操作和Linux命令一模一样

      如果要加载文件,进入对应目录

    1. who命令

      可以展示所有定义的变量
      whos命令
      可以更详细的展示变量的信息

    然后,可以键入文件名,来display
    可以发现,clear命令可以删除一个变量
    但是,单单一个clear要小心使用,会删除所有变量

    1. 如何储存数据?

      v = priceY(1:10)
      

      此时,v就是一个1*10的向量,而且数值是从priceY中得到的,设置为前10个元素

      如果要存入磁盘,用:

      save hello.mat v
      

      将v 储存为 “hello.mat”
      这个save命令将v用二进制储存
      如果要用人看懂的来储存.用

      save hello.txt v -ascii
      
    2. 如何操作数据?

      索引操作和其他语言都一样,:和python差不多

      注意切片,matlab可以对行和列进行切片操作

      A(:,2)
      A(2,:)
      A([1 3], :)
      %返回第一行和第三行
      %当然,索引的同时也可以赋值
      %也可以这样赋值
      A = [A, [100;101;102]]
      %还可以通过类似的方式实现矩阵相连
      C = [A B]%横向相连
      C = [A;B]%竖向相连
      %所以,分号可以相当于换到下一行
      

      还有一个特殊的语法:
      A(:)

      作用是,把A中的所有元素放入一个列向量中

    5. 数据处理computing date

    矩阵乘法

    * 矩阵乘法
    .* 对应数值相乘.点乘

    以此类推,“ . ” + “运算符”
    可以把运算推广到整个矩阵

    运算符:

    log, exe ,abs(取绝对值)

    除了这个,还可以用ones

    v = v + x * ones(length(v),1)
    

    对矩阵取转置:
    A'

    max函数:(可以对矩阵用!)

    a<3:

    可以说是一种过滤数据的用法

    magic函数:
    相当于构建了一个数独:

    (几乎没什么用处(笑))

    sum函数,把所有的数据加起来
    prod函数,把所有数据乘起来
    floor函数,把所有数据想下去取整
    ceil 函数,把所有数据向下取整
    max函数还可以对某一列或者某一行来取最大值:

    在二维数据集,想要得到最大的数用
    max(max(A))

    或者用之前提到过的方法:
    max(A(:))

    sum函数还可以逐行或者逐列相加

    参数1是按行相加,参数2是按列相加
    其实吧,这个参数1,2,实际上指的是维数dimension ,行是第一维,列是第二维,等等

    如何只去对角元素?
    可以与单位矩阵点乘!
    脑洞再开一点,可以用
    sum(sum(A.*eye(9)))
    来计算斜边F和
    当然,如果你想计算反过来的斜边,
    可以用函数:
    flipud(eye(9))
    这样可以得到镜面对称的单位矩阵

    最重要的一点!!!!
    矩阵求逆!!!
    pinv(A)

    ...但是遇到不可逆的,仍然可以求逆,这叫假求逆!

    6. Plotting Data 数据可视化

    plot(t,y1)
    这样的代码,可以让t作为自变量,y2作为因变量
    来绘制出图形:

    但是,这样一次只能在一张figure上绘制一种图像,如果要同时绘制的话,要用:
    hold on;

    当然,同一张图的话,可以设定不同图像采取不同的颜色来进行
    还可以设置x,y轴的名字,不同图像的名字。整个图像的标题等等。总之感觉和matplotlib差不多吧。
    还可以保存图像,当然,你要得先进入你要保存到哪里

    tuxiang hold on;
    plot(t,y2,'r');
    xlabel('time')
    ylabel('value')
    legend('sin','cos')
    title('my plot')
    print -dpng 'myplot.png'
    

    close这个命令可以让图像关掉
    也可以为你的图像标号:

    figure(1);plot(t,y1);
    figure(2);plot(t,y2);
    

    也可用绘制子图:(十分方便,建议使用)

    subplot(1,2,1)
    将图像分为1*2的格子,然后使用第一个格子。
    注意对应参数

    subplot(1,2,3);
    plot(t,y1);
    subplot(1,2,2);
    plot(t,y2);
    

    最后,学习改变轴的刻度:
    axis([0.5 1 -1 1])

    还有几个命令

    clf 清理所有的图像

    可视化矩阵:

    A = magic(5);
    imagesc(A)
    

    可视化矩阵

    还可以添加一些命令,在imagesc后面clorbar,colormap gray
    这样就可以很直观的从颜色的深浅来看出矩阵哪里偏小,哪里偏大

    imagesc(magic(15)),colorbar,colormap gray;
    

    逗号是链接函数调用
    意思是,逗号链接的一个接一个执行
    称为:逗号连接的命令或者函数调用


    7. 控制语句:

    感觉这节不需要做什么笔记,记住就行,反正大同小异

    • for
    for i =1:10,
    	v(i) = 2^i;
    end;
    

    循环结构差不多就这样吧。

    • while

      i=1;
      while i<= 5,
      	v(i) = 100;
      	i = i+1;
      end;
      

      当然,循环中可以加上break语句

    • if-else

      v(1) =2;
      if v(1) = 1,
      	disp('wrong');
      elseif v(1) = 2,
      	disp('right');
      else
      	disp('wrong');
      end;
      
    • 定义和使用函数
      如何定义函数?

      ---第一种方法

      首先,要在文本编辑器中写出你的函数:like this

      function t = squreThisNumber(x)
      
      y = x^2;
      

      y是返回值,x是参数。下面是定义的函数体

      然后,这时候,要将这个东西保存到一个地址中去,调用的时候才知道调用哪里!!
      要调用函数的时候,用cd方法进入到储存函数的地址,然后就可以调用了

      ---第二种方法(高级)

      addpath('xxxxxx')
      

      xxxx指的是函数储存路径,所以这样就能自动的到那个地方去寻找函数

      当然,函数不仅仅只能返回一个,也可以返回矩阵,向量等等多个数值

  • 相关阅读:
    hdu--1026--Ignatius and the Princess I(bfs搜索+dfs(打印路径))
    hdu--1798--Doing Homework again(贪心)
    开启事务的两种方法
    事务的隔离级别,乐观锁,悲观锁
    树的结构,无限极关联
    微信小程序的加密解密以及小程序的支付
    微信小程序之登录连接django,以及用户的信息授权认证
    微信小程序三
    微信小程序二
    vue-cookies缓存
  • 原文地址:https://www.cnblogs.com/orangestar/p/11181205.html
Copyright © 2020-2023  润新知