2011年1月12日星期三

Octave笔记

Octave可以看作是开放源代码版本的Matlab,它的命令几乎和Matlab完全一样,因此可以用Matlab的书籍和文档来学习Octave。另外,绝大多数Matlab的代码也可以不经修改在Octave中运行。对于初学者来说,下面这些笔记可以帮助快速上手Octave。更多的功能,可以参考Octave文档或者其他Matlab的资料。
  1. 脚本文件,以下面一行开始:
    #!/usr/bin/octave -qf
  2. 注释,以%或者#开始
  3. 虚数单位:i, j, I, J都可以 两种方法定义复数:3 + 4i或者complex(3, 4)
  4. 定义矩阵:
    octave:1> a = [1, 2; 3, 4]
    a =
    
    1   2
    3   4
  5. 随机数:rand()或者rand(m, n)
  6. 定义一段连续序列:
    octave:1> 1:5
    ans =
    
    1   2   3   4   5
    还可以指定步长:
    octave:2> 1:2:10
    ans =
    
    1    3    5    7    9
  7. 字符串:单引号或者双引号
  8. 定义Data Structure:
    octave:1> x.name = ”Yusuf”
    octave:2> x.age = 33
    octave:3> x.phone = “46103”
    octave:4> x
    x =
    {
    name = Yusuf
    age = 33
    phone = 46103
    }
  9. 定义Cell Array:
    octave1:> a = {”random matrix”, rand(2)}
    a =
    
    {
    [1,1] = random matrix
    [1,2] =
    
    0.417140   0.460380
    0.337105   0.078835
    
    }
    
    octave2:> a{2}(1,2)
    ans =  0.460380
  10. 声明全局变量:
    global c = 3e8
  11. 算术符号
    x + y 加法
    x - y 减法
    x * y 矩阵乘法
    x .* y 元素相乘
    x / y 右除,相当于(inverse (y’) * x’)’
    x ./ y 元素右除
    x \ y 左除,相当于inverse (x) * y
    x .\ y 元素左除,每个y元素被相应的x元素除
    x ^ yx ** y 乘方
    x .^ yx .** y 元素乘方
    x’ 转置复共轭
    x.’ 转置
  12. 比较符号
    x < y 小于
    x <= y 小于等于
    x == y 等于
    x >= y 大于等于
    x > y 大于
    x != yx ~= y 不等于
  13. if语句
    • 形式一:
      if (condition)
        then-body
      endif
    • 形式二:
      if (condition)
        then-body
      else
        else-body
      endif
    • 形式三:
      if (condition)
        then-body
      elseif (condition)
        elseif-body
      else
        else-body
      endif
  14. switch语句
    switch expression
      case label
        command_list
      case label
        command_list
      …
      otherwise
        command_list
    endswitch
  15. while语句
    while (condition)
      body
    endwhile
  16. do-until语句
    do
      body
    until (condition)
  17. for语句
    for var = expression
      body
    endfor
  18. 定义函数
    • 形式一:无自变量 function name body endfunction
    • 形式二:带自变量 function name (arg-list) body endfunction
    • 形式三:单个返回值 function ret-var = name (arg-list) body endfunction
    • 形式四:多个返回值 function [ret-list] = name (arg-list) body endfunction
  19. 可变自变量长度函数 function val = smallest (varargin) val = min ([varargin{:}]); endfunction
  20. 函数Handles(指向函数的指针) @function-name
  21. 匿名函数 @(argument-list) expression
  22. 终端输出 disp (x)
  23. 写读包含分隔符的数据文件 dlmwrite (file, a) dlmwrite (file, a, delim, r, c) dlmwrite (file, a, key, val ...) dlmwrite (file, a, "-append", ...) a是待写矩阵,delim是分隔符,默认为逗号。r, c分别为起始的空行和空列。key包含下列参数:
    • "append" 即上面的"-append","on"或者"off"
    • "delimiter" 即上面的delim
    • "newline" 换行符
    • "roffset" 即上面的r
    • "coffset" 即上面的c
    • "precision" 精确度,可以用类似fprintf的格式字符串,或者有效数字位数
    data = dlmread (file) data = dlmread (file, sep, range) range为四元素的矢量:[R0, C0, R1, C1],为数据块左上角和右下角的标记,从0开始
  24. Octave可以使用大多数类似C的I/O函数(fprintf,fopen等)
  25. 常用数学函数
    exp (x)指数函数sinh (x) 双曲正弦
    log (x)自然对数cosh (x) 双曲余弦
    log10 (x)以10为底的对数 tanh (x) 双曲正切
    log2 (x)以2为底的对数 coth (x) 双曲余切
    sqrt (x) 平方根 sech (x) 双曲正割
    abs (z) 绝对值 csch (x) 双曲余割
    arg (z) 辐角 asinh (x) 反双曲正弦
    conj (z) 复共轭 acosh (x) 反双曲余弦
    real (z) 复数实部 atanh (x) 反双曲正切
    imag (z) 复数虚部 acoth (x) 反双曲余切
    sin (x) 正弦 asech (x) 反双曲正割
    cos (x) 余弦 acsch (x) 反双曲余割
    tan (x) 正切 sum (x) 求和
    cot (x) 余切 prod (x) 求积u
    sec (x) 正割 ceil (x) 不小于x的最小整数
    csc (x) 余割 floor (x) 不大于x的最大整数
    asin (x) 反正弦 factorial (n) 阶乘
    acos (x) 反余弦 max (x) 最大值
    atan (x) 反正切 min (x) 最小值
    acot (x) 反余切 round (x) 四舍五入
    asec (x) 反正割 sign (x) 符号函数
    acsc (x) 反余割
    atan2 (y, x) 计算atan (y / x)
    sind (x),… 以度数为单位的三角函数
  26. 特殊函数
    [a, ierr] = airy (k, z, opt) Airy函数
    [j, ierr] = besselj (alpha, x, opt) 第一类Bessel函数
    [y, ierr] = bessely (alpha, x, opt) 第二类Bessel函数
    [i, ierr] = besseli (alpha, x, opt) 变形第一类Bessel函数
    [k, ierr] = besselk (alpha, x, opt) 变形第二类Bessel函数
    [h, ierr] = besselh (alpha, k, x, opt) 第一类(k=1)和第二类(k=2)Hankel函数
    beta (a, b) Beta函数
    gamma (z) Gamma函数
    bincoeff (n, k) 二项式系数
    erf (z) 误差函数
    legendre (n, x, normalization) n阶Legendre函数,m = 0…n
  27. 线性代数
    det (a) 行列式
    eig (a) 本征值
    dot (x, y) 点乘
    inv (a) 逆矩阵
  28. 解非线性方程 [x, fval, info] = fsolve (fcn, x0, options) fcn是包含待解方程组的函数,x0是自变量初始值,x为返回的数值解,fval为返回的函数值,如果结果收敛,info为1,否则为其他值。例子: function y = f (x) y(1) = -2*x(1)^2 + 3*x(1)*x(2) + 4*sin(x(2)) - 6; y(2) = 3*x(1)^2 - 2*x(1)*x(2)^2 + 3*cos(x(1)) + 4; endfunction [x, fval, info] = fsolve (@f, [1; 2]) 结果: x = 0.57983 2.54621 fval = 6.1872e-08 -3.2708e-07 info = 1
  29. 数值积分(各函数对应不同算法) [v, ier, nfun, err] = quad (f, a, b, tol, sing) quadl (f, a, b, tol) quadgk (f, a, b, prop, val, ...) quadl (f, a, b, tol)

没有评论: