1. 程式人生 > >MATLAB學習之符號運算

MATLAB學習之符號運算

本文介紹MATLAB中的符號運算;

1. 建立符號變數

符號常量是不含變數的符號表達式,用 sym 命令來建立符號常量。

  • sym(‘常量’):建立符號常量。
    a=sym('sin(2)')

sym 命令也可以把數值轉換成某種格式的符號常量。

  • sym(常量,引數):引數可以選擇為 d、f、e 或 r 四種格式,也可以省略。d 表示返回最接近的十進位制數值(預設位數為32位)。f 表示返回該符號值最接近的浮點數。r 表示返回該符號值最接近的有理數型(為系統預設方式),可表示為 p/q、p*q、10^q、pi/q、2^q 和 sqrt(p) 形式之一。e 表示返回最接近的帶有機器浮點誤差的有理值。
    % 建立數值常量和符號常量 

    a1 = 3*sqrt(5)+pi           %建立數值常量
    a2 = sym('3*sqrt(5)+pi')    %建立符號表達式
    a3 = sym(3*sqrt(5)+pi)      %按最近的有理數型表示符號常量
    a4 = sym(3*sqrt(5)+pi,'d')  %按最近的十進位制浮點數表示符號常量
    a31= a3-a1                  %數值常量和符號常量的計算
    a5 = '3*sqrt(5)+pi'         %字串常量
  • sym(‘變數’, 引數)
    :把變數定義為符號物件。說明:引數用來設定限定符號變數的數學特性,可以選擇為 positive、real和unreal、positive 表示為“整數”、“實數”符號變數,real 表示為“實數”符號變數,unreal 表示為“非實數”符號變數。如果不限定,則引數可以省略。
    % 建立符號變數,用引數設定其特性

    syms x y real         % 建立實數符號變數
    z=x+i*y;              % 建立z為複數符號變數
    real(z)               % 複數z的實部是實數x
    sym('x','unreal'
); % 清除符號變數的實數特性 real(z) % 複數z的實部
  • sym(‘表示式’):建立符號表達式。
    f1=sym('a*x^3+b*x+c')
  • syms(‘arg1’,’arg2’,…,引數):把字元變數定義為符號變數。syms 用來建立多個符號變數,這種方式建立的符號物件是相同的。引數設定和前面的 sym 命令相同,省略時符號表達式直接由各符號變數組成。
    % 使用syms命令建立符號變數和符號表達式

    syms a b c x            % 建立多個符號變數
    f2 = a*x^2 + b*x + c    % 建立符號表達式
    syms('a','b','c','x')
  • A=sym(‘[a , b ; c , d]’):建立符號矩陣。
    syms a b c d
    A = [a b;c d]

下面我們通過一個簡單的例子來比較符號矩陣與字串矩陣的不同。

    A=sym('[a,b;c,d]')    % 建立符號矩陣
    B='[a,b;c,d]'         % 建立字元矩陣
    syms a b c d          
    C=[a,b;c,d]           % 建立數值矩陣

執行結果如下:

這裡寫圖片描述

2. 數值與符號的轉換

在MATLAB中,利用 sym 函式將數值結果轉換為符號表達式。呼叫方法如下:

  • sym(a1,’f’) 表示返回符號浮點表示式

  • sym(a1,’r’) 表示返回符號有理數表示式

  • sym(a1,’e’) 表示返回符號有理數表示式,同時根據eps給出r的理論和實際計算差

  • sym(a1,’d’) 表示返回符號十進位制小數

3. 數值矩陣轉換為符號矩陣

在 MATLAB 中,必須事先定義符號矩陣,才能對矩陣進行符號運算。

  • sym(矩陣名):數值矩陣轉換為符號矩陣。
    A=hilb(3)
    A=sym(A)

執行結果如下:
這裡寫圖片描述

4. 符號替換

在 MATLAB 中,subs 函式用於符號變數的替換,該命令適用於單個符號矩陣、符號表達式、符號代數方程和微分方程,該函式的使用方法如下:

  • subs(S, new):表示用新的變數 new 替換 S 中的預設變數 。
  • subs(S, old, new):表示用新變數 new 替換 S 中的指定的變數 old 。如果新變數是符號變數,必須將新變數名以 ‘new’ 形式給出。
    % 以符號變數 '5' 替換符號表達式 f 中的 'A'

    f=sym('sin(1/2*A*pi)');
    subs(f, 'A', '5')