1. 程式人生 > 其它 >Matlab筆記

Matlab筆記

技術標籤:數學建模matlab數學建模

0. 目錄

文章目錄

1. Matlab 基礎語法

1.1 變數和語句

1.1.1 變數

  • 變數命名與其他語言相同。
  • 變數不宣告,不定義,拿來即用(類似Python)。
  • 變數都儲存在變數空間中(Workspace)

語句

  • 語句:回車代表結束,如果末尾加上分號 ;
    ,控制檯不輸出結果,反之如果不加分號,那麼控制檯輸出這個語句的結果。
  • 一行無法寫完那麼使用 ... 來續行,否則預設語句完成。
  • 註釋以 % 表示。

賦值

  • 變數=表示式
  • 前者以及複製給了某一個變數,後者將表示式的賦值給預設變數 ans
  • ans 為Matlab當中的保留字

變數管理

  • 工作空間裡面
  • 在控制檯中使用下面兩個命令來獲取
    • who 可以得到當前全部變數的名字
    • whos 得到我們當前記憶體中的變數,型別,每個變數所分配的記憶體空間,以及它們是否是複數
  • 清除當前工作空間的變數
    • clear命令 現在假設我們要全部重新開始,要這樣做,我們輸入clear 命令。要清除全部變數只需輸入clear 然後回車即可,要清除特定變數,則在clear
      後面帶上變數名列表。clear x y z
  • 儲存資料的命令
    • save命令:save [檔名] [變數名] [-append] [-ascii]
    • save命令將Matlab中選擇的變數儲存在.mat形式的二進位制檔案中
    • [-append] 表示可以將某一個變數增加到某個檔案裡面
    • [-ascii] 更改檔案格式
  • 匯入資料
    • load [檔名]

常數變數

常數名稱代號
虛數 − 1 \sqrt{-1} 1 i 或者 j
圓周率 π \pi πpi
自然常數 e e eeps
最小正實數,約等於0(無窮小)realmin
最大正實數,大約為無窮大realmax
無窮大Inf
無意義的數NaN

資料輸出

  • format函式:format 格式符(比如long,short之類的)

    表示控制檯中答案的顯示樣式

    format 預設格式
    format short 5字長定點數,顯示5位(scaled fixed point format with 5 digits)
    format long 15字長定點數,顯示15位雙精度,7位單精度(scaled fixed point)
    format short e 5字長浮點數
    format long e 15字長浮點數
    format hex 16進位制
    format bank 定點貨幣形式
    format rat 小數分數表示
    format + +,-,空格
    format compact 壓縮空格
    format loose 包括空格和空行
    format short g 5位定點或浮點格式。
    format long g 對雙精度,顯示15位定點或浮點格式,對單精度,顯示7位定點或浮點格式。

    獲取當前格式

    獲取當前數值格式。

    f = get(0,'Format')
    f =
    shortG
    

    獲取當前行距,可以將其設為 loosecompact

    S = get(0,'FormatSpacing')
    S =
    loose
    

    輸出顯示格式,指定為下列選項之一。

    這些樣式可控制數值變數的輸出顯示格式。

    Style結果示例
    short (default)固定十進位制短格式,小數點後包含 4 位數。3.1416
    long長固定小數格式,double 值的小數點後包含 15 位數,single 值的小數點後包含 7 位數。3.141592653589793
    shortE短科學記數法,小數點後包含 4 位數。3.1416e+00
    longE長科學記數法,double 值的小數點後包含 15 位數,single 值的小數點後包含 7 位數。3.141592653589793e+00
    shortG短固定小數格式或科學記數法(取更緊湊的一個),總共 5 位。3.1416
    longG長固定小數格式或科學記數法(取更緊湊的一個),對於 double 值,總共 15 位;對於 single 值,總共 7 位。3.14159265358979
    shortEng短工程記數法,小數點後包含 4 位數,指數為 3 的倍數。3.1416e+000
    longEng長工程記數法,包含 15 位有效位數,指數為 3 的倍數。3.14159265358979e+000
    +正/負格式,對正、負和零元素分別顯示 +- 和空白字元。+
    bank貨幣格式,小數點後包含 2 位數。3.14
    hex二進位制雙精度數字的十六進位制表示形式。400921fb54442d18
    rat小整數的比率。355/113

    行距格式

    Style結果示例
    compact隱藏過多的空白行以便在一個螢幕上顯示更多輸出。theta = pi/2theta = 1.5708
    loose新增空白行以使輸出更易於閱讀。theta = pi/2theta = 1.5708

資料型別

使用class(變數名)檢查變數名的資料型別

  • 數值型

    • 雙精度(8位元組)

      a = 1

    • 單精度

    • 無符號/有符號整型

      雙精度的基礎上 b = uint8(a); a轉化為無符號8位整型

  • 字串

    • ​ 使用單撇號(與Python類似)

    • doule(變數名) 獲取字串的ASCII碼值

    • char(int)獲取字元

    • ​ str2num:str2num('1234')的輸出結構為1234這個值

    • ​ num2str同理

    • eval函式:eval(‘語句’)將語句裡面當成語句來使用,類似Python

  • 結構體

    • 建立:結構體.成員名=表示式
    • 操作
      • isstruct(a):是否是結構體
      • fieldnames(a):返回結構體全部成員的名字,返回型別為字串陣列
      • isfield(結構體名,“成員名”) :返回某個成員是否是結構體的成員
      • rmfield(結構體名,“成員名”) :刪除某個成員
      • getfield(結構體名,“成員名”) :獲取某個成員
  • 單元

    • 建立:使用{}括號起來建立
      • a={1,'str',[11 22 33 44]};
    • 單元類似Python裡面的元組
  • 多維矩陣

  • 稀疏矩陣

資料的運算

  • a + b
  • a - b
  • a * b
  • a / b
  • 乘冪 a ^ b
  • 以e為底的指數 e a e^a eaexp(a)
  • a的平方根 a \sqrt{a} a sqrt(a)
  • a的自然對數 l o g e a log_ea logealog(a)
  • 其他底的對數 l o g 10 a log_{10}a log10alog10(a)
  • 三角函式:cos(pi/4)
  • 反三角函式,在三角函式前面加一個字元a:atan(pi/3)
  • 複數 i = − 1 i = \sqrt{-1} i=1 i=x+iy 或者 i=x+yi

特殊操作指令

  • clc:清除命令視窗的內容,對工作環境中的全部變數無任何影響
  • close:關閉當前的Figure視窗
  • close all:關閉所有的Figure視窗
  • clear:清除工作空間的所有變數
  • clear all:清除工作空間的所有變數,函式,和MEX檔案

2.Matlab 基礎數學操作

2.1 向量和矩陣

向量vector

  • 行向量,使用分號 “;” 隔開 a = [1; 2; 3; 4]
  • 列向量,使用空格或者逗號隔開 a = [1 2 3 4] 或 a = [1,2,3,4]
  • 向量的數量乘:b = c*a(其中c是一個數量)
  • 向量的轉置:在向量後面加一個單引號(‘)比如 b = a'
  • 向量的加和減,直接使用加號和減號使用:A + B 和 A - B
  • 向量的合併,直接將兩個向量使用分號或者逗號隔開:列向量D = [A;B],行向量D = [A,B]

向量的操作

  • 返回矩陣的長度,length(向量)

    >> a=[1,2,3,4,5];
    >> length(a)
    
    ans =
    
         5
    
  • 返回向量裡面的最大元素和最小元素,max(向量)和min(向量)

    >> a=[1,2,3,4,5];
    >> min(a)
    
    ans =
    
         1
    
    >> max(a)
    
    ans =
    
         5
    
  • 向量的數量積(點乘),使用陣列乘法(.*),即 向量 . * 向量

    >> a=[1,2,3,4,5];
    >> a.*a
    
    ans =
    
         1     4     9    16    25
    
  • 向量中全部元素的和,sum(向量)

    >> a=[1,2,3,4,5];
    >> sum(a)
    
    ans =
    
        15
    
  • 計算向量的模,即 ∣ v ∣ = v 1 2 + v 2 2 + v 3 2 + . . . + v n 2 |v|=\sqrt{v_1^2+v_2^2+v_3^2+...+v_n^2} v=v12+v22+v32+...+vn2

    先使用點乘(.*)求得全部元素各自的平方,然後使用sum求和,最後sqrt取方根

    >> a=[1,2,3,4,5];
    >> sqrt(sum(a.*a))
    
    ans =
    
        7.4162
    
  • 兩個向量的數量積(點乘),dot(向量A,向量B)

    >> a = [1;4;7]; b = [2;-1;5];
    >> c = dot(a,b)
    c =
    	33
    
  • 兩個向量的向量積(叉乘),cross(向量A,向量B)

    >> A = [1 2 3]; B = [2 3 4];
    >> C = cross(A, B)
    C =
    	-1 2 -1
    
  • 使用括號(向量(下標))引用向量的元素一個元素,注意在MATLAB中下標以1開始

    如果使用冒號(v(:)),等於告訴MATLAB 列出向量的所有元素:

    使用多個引用(v(開始元素:結束元素)),開始元素和結束元素都被計算在內

    >> A = [12 17 -2 0 4 4 11 19 27];
    >> A(2)
    ans =
        17
    >> A(:)
    ans =
        12
        17
        -2
         0
         4
         4
        11
        19
        27
    >> A(2:5)
    ans =
        17    -2     0     4
    

向量和矩陣的快速生成

  • ==等差元素行向量==的生成 x = [首元素:步長:尾元素]

    >> x = [0:2:10]
    x =
    	0 2 4 6 8 10
    
  • 等差列向量的生成,即對生成的行向量進行轉置 x = [首元素:步長:尾元素]'

    >> x = [0:2:10]'
    
    x =
         0
         2
         4
         6
         8
        10
    
  • 生成一個==零矩陣==,zeros(矩陣的階數)

    >> zeros(4)
    
    ans =
    
         0     0     0     0
         0     0     0     0
         0     0     0     0
         0     0     0     0
    
  • 生成一個==全部都是1的矩陣==,ones(矩陣的階數)

    >> ones(3)
    
    ans =
    
         1     1     1
         1     1     1
         1     1     1
    
  • 產生一個==主對角矩陣==,diag(v,k)

    v為向量,返回值為矩陣,以向量v的元素作為矩陣X的第k條對角線元素,當k=0時,v為X的主對角線;當k>0時,v為上方第k條對角線;當k<0時,v為下方第k條對角線。

    >> v=[1 2 3];
    >> x=diag(v,-1)
    x =
         0     0     0     0
         1     0     0     0
         0     2     0     0
         0     0     3     0
    
  • 取主對角線的元素v=diag(X,k)

    X為矩陣,v為向量

    取矩陣X的第K條對角線元素為向量v

    >> aa=randn(3,3)
    
    aa =
    
       -1.3282   -1.7925    0.4092
       -0.3803    0.5858   -0.4684
       -0.9560    0.7356    0.8292
    
    >> diag(aa)
    
    ans =
    
       -1.3282
        0.5858
        0.8292
    
    >> diag(aa,1)
    
    ans =
    
       -1.7925
       -0.4684
    
    >> diag(aa,2)
    
    ans =
    
        0.4092
    
  • 生成==單位矩陣==,eye(矩陣的階數)

    >> eye(3)
    
    ans =
    
         1     0     0
         0     1     0
         0     0     1
    
  • 取一個矩陣的下三角tial(矩陣)

    >> tril(randn(3,3))
    
    ans =
    
        2.7694         0         0
       -1.3499   -0.0631         0
        3.0349    0.7147    1.4897
    
  • 取一個矩陣的上三角triu(矩陣)

    >> triu(randn(3,3))
    
    ans =
    
        1.4090   -1.2075    0.4889
             0    0.7172    1.0347
             0         0    0.7269
    
  • 生成一個**魔術矩陣**,magic(矩陣的階數)

    數字1~9填到三行三列的表格中,要求每行、每列、及兩條對角線上的和都相等

    >> magic(3)
    
    ans =
    
         8     1     6
         3     5     7
         4     9     2
    
  • 生成一個**pascal矩陣**,pascal(矩陣的階數)

    由楊輝三角形表組成的矩陣稱為帕斯卡(Pascal)矩陣。Pascal矩陣的第一行元素和第一列元素都為1,其餘位置處的元素是該元素的左邊元素加起上一行對應位置相加而得

    >> pascal(5)
    
    ans =
    
         1     1     1     1     1
         1     2     3     4     5
         1     3     6    10    15
         1     4    10    20    35
         1     5    15    35    70
    

矩陣的操作

  • 提取全部元素為**絕對值**,abs(矩陣)

    >> randn(3,3)
    
    ans =
    
        0.3252   -1.7115    0.3192
       -0.7549   -0.1022    0.3129
        1.3703   -0.2414   -0.8649
    
    >> abs(ans)
    
    ans =
    
        0.3252    1.7115    0.3192
        0.7549    0.1022    0.3129
        1.3703    0.2414    0.8649
    
  • 矩陣的**數量乘**,常數*矩陣

    >> A = [-2 2; 4 1]
    A =
    	-2 2
    	4 1
    >> C = 2*A
    C =
    	-4 4
    	8 2
    
  • 矩陣的==加法矩陣+矩陣),減法矩陣-矩陣),轉置==(矩陣'

    >> A=[1 2 3;4 5 6;7 8 9];
    >> B=[10 11 12; 13 14 15; 16 17 18];
    >> A+B
    ans =
        11    13    15
        17    19    21
        23    25    27
    >> A-B
    ans =
        -9    -9    -9
        -9    -9    -9
        -9    -9    -9
    >> A'
    ans =
         1     4     7
         2     5     8
         3     6     9
    
  • 陣列乘法(點乘 .*),和==除法==(.\),即對應位置元素運算,需要兩矩陣行和列相同

    >> A=[1 2 3;4 5 6;7 8 9];
    >> B=[10 11 12; 13 14 15; 16 17 18];
    >> A.*B
    ans =
        10    22    36
        52    70    90
       112   136   162
    >> A./B
    ans =
        0.1000    0.1818    0.2500
        0.3077    0.3571    0.4000
        0.4375    0.4706    0.5000
    
  • 矩陣乘法矩陣*矩陣

    >> A=[1 2 3;4 5 6;7 8 9];
    >> B=[10 11 12; 13 14 15; 16 17 18];
    >> A*B
    ans =
        84    90    96
       201   216   231
       318   342   366
    
  • 數量與矩陣加法與減法,即這個數加在矩陣的每一個元素上面,數量+矩陣數量-矩陣

    >> A=[1 2 3;4 5 6;7 8 9];
    >> A+5
    ans =
         6     7     8
         9    10    11
        12    13    14
    >> A-5
    ans =
        -4    -3    -2
        -1     0     1
         2     3     4
    >> 5-A
    ans =
         4     3     2
         1     0    -1
        -2    -3    -4
    
  • 矩陣的乘方矩陣^次數,注意此矩陣一定要為方陣

    >> A=[1 2 4; 1 5 7; 2 10 14]
    A =
           1              2              4       
           1              5              7       
           2             10             14       
    >> A^3
    ans =
         211           1022           1444       
         391           1895           2677       
         782           3790           5354   
    

矩陣的引用

  • 使用 矩陣(行,列) 來引用某個元素,注意MATLAB裡面下標從1開始

    使用 : 來代替一整行或者一整列

    在某一行或者某一列選中某些元素,使用語法 開始下標:結束下標

    >> A
    A =
         1     2     3
         4     5     6
         7     8     9
    >> A(2,2)
    ans =
         5
    >> A(:,2)
    ans =
         2
         5
         8
    >> A(1:2,2:3)
    ans =
         2     3
         5     6
    
  • 使用 矩陣(行:列)=某個新值 來改變某一個元素的值

    同樣,使用 矩陣(:,某一列)=向量 或 矩陣(某一行,:)=向量 來改變某一行某一列的值,如果要刪除,則這個向量置空,比如 矩陣(:,某一列)=[]

    複製某一行或者列,矩陣([要複製行的下標,要複製行的下標,...],:)

    >>A
    A =
    	-8	2	3
    	4	5	6
    	7	8	9
    >> A(2,:)=[]
    A =
    	-8 	2 	3
    	7 	8 	9
    >> E = A([1,1,1,1],:)
    E =
    	-8 	2 	3
    	-8 	2 	3
    	-8 	2 	3
    	-8 	2 	3
    >> F = A([1,2,1],:)
    F =
    	-8 	2 	3
    	7 	8 	9
    	-8 	2 	3
    

行列式和線性代數

  • 求矩陣對應**行列式的值**,det(矩陣)

    >> A=[1 2 3;4 5 6;7 8 9];
    >> det(A)
    
    ans =
    
      -9.5162e-16
    
  • 矩陣的****,rank(矩陣)

    >> A
    A =
         1     2     3
         4     5     6
         7     8     9
    
    >> rank(A)
    ans =
         2
    
  • 矩陣的**逆矩陣**,inv(矩陣)

    >> A=[1 2 4; 1 5 7; 8 3 2]
    A =
         1     2     4
         1     5     7
         8     3     2
    >> inv(A)
    ans =
        0.2157   -0.1569    0.1176
       -1.0588    0.5882    0.0588
        0.7255   -0.2549   -0.0588
    >> format rat
    >> ans
    ans =
          11/51          -8/51           2/17    
         -18/17          10/17           1/17    
          37/51         -13/51          -1/17 
    
  • 最簡行階梯矩陣rref(矩陣)

    >> A=[1 2 4; 1 5 7; 2 10 14]
    A =
           1              2              4       
           1              5              7       
           2             10             14       
    >> rref(A)
    ans =
           1              0              2       
           0              1              1       
           0              0              0  
    

2.2 多項代數式相關

係數多項式

  • 多項式的存貯使用係數向量來表示,稱為係數向量,比如 a x 4 + b x 3 + c x 2 + d x + e ax^4+bx^3+cx^2+dx+e ax4+bx3+cx2+dx+e 這個多項式可以使用五維向量 [a,b,c,d,e] 表示

  • 多項式加法,直接將兩個係數向量相加即可,如果係數維度不同,低次的需要新增0向高次補齊。

  • 多項式的乘法,使用函式 conv() 將兩個向量相乘,conv(多項式係數向量A,多項式係數向量B)

    比如, x 4 + 8 x 3 − 10 x^4+8x^3-10 x4+8x310 2 x 2 − x + 3 2x^2-x+3 2x2x+3 兩個相加

    >> A=[1,8,0,0,-10];
    >> B=[2,-1,3];
    >> conv(A,B)
    ans =
         2    15    -5    24   -20    10   -30
    
  • 多項式除法,使用 deconv() 函式計算,[商式,餘式]=deconv(多項式A,多項式B)

    >> p1=[1 2 0 0 -10];
    >> p2=[2 -1 3];
    >> [a,b]=deconv(p1,p2)
    a =
        0.5000    1.2500   -0.1250
    
    b =
             0         0         0   -3.8750   -9.6250
    
  • 多項式求導數,函式 polyder()

    • 導數=polyder(多項式) 求多項式p1的導數
    • 導數=polyder(多項式A,多項式B)求多項式p1和p2乘積的導數
    • [分子表示式,分母表示式]=polyder(多項式分子,多項式分母) 多項式p1和p2之商的導數
    >> p1=[1 2 0 0 -10];
    >> p2=[2 -1 3];
    >> [p,q]=polyder(p1,p2)
    p =
         4     1     8    18    40   -10
    
    q =
         4    -4    13    -6     9
    
  • 求多項式在某點的值,函式 polyval()結果=polyval(係數向量,自變數向量)

    >> p=[1,2,1];
    >> ans=polyval(p,1:5)
    ans =
         4     9    16    25    36
    
  • 求多項式的根,結果向量=roots(係數向量)

    >> p=[1,2,1];
    >> roots(p)
    ans =
        -1
        -1
    

符號代數式

  • 要使用符號代數,需要提前定義符號變數,即要生成一個符號物件,可以利用sym以及syms函式,sym可以生成單個符號物件,而syms可以生成多個符號物件,符號物件的運算是完全精確的,沒有舍入誤差。例如:a = sym(‘5’); syms b c d;

  • 在符號代數等式中,使用雙等於 == 來表示符號代數式中的等於符號 ( = = =) ,使用 ~= 表示符號代數式中不等於符號( ≠ \neq = ),比如代數式 x 2 + 3 x − 10 = 2 y x^2+3x-10=2y x2+3x10=2y 可以表示為:

    >> clear all
    >> syms x y
    >> eq = x^2 + 3*x - 10==2*y
     
    eq =
     
    x^2 + 3*x - 10 == 2*y
    
  • 解方程,使用 solve() 函式進行求解,Symbolic solution of algebraic equations.
    S = solve(eqn1,eqn2,...,eqnM,var1,var2,...,varN)
    S = solve(eqn1,eqn2,...,eqnM,var1,var2,...,varN,'ReturnConditions',true)

  • [未知變數組]=solve(方程A,方程B,...,方程N,變數A,變數B,...,變數N)

    但是在2019版本中出現了更新,如下:

    >> syms x y z
    >> eq1 = 'x^2 + sin(y) - z = 100';
    >> eq2 = 'x - y + z = 5';
    >> eq3 = 'x * z + cos(y) = 6 * z';
    >> [x, y, z] = solve(eq1, eq2, eq3, 'x', 'y', 'z');
    
    錯誤使用 solve>getEqns (line 418)
    List of equations must not be empty.
    
    出錯 solve (line 226)
    [eqns, vars, options] = getEqns(varagin[:]);
    

    問題出在:matlab 2019 中已經不接受向 solve 中傳入字串。我們需要對方程組改進如下:

    • eq 賦值時去掉等號;
    • 表示公式的等式中的 = 改成 == 表示條件判斷;
    • solve 中去掉符號的單引號。

    即如下:

    >> syms x y z
    >> eq1 = x^2 + sin(y) - z == 100;
    >> eq2 = x - y + z == 5;
    >> eq3 = x * z + cos(y) == 6 * z;
    >> [x, y, z] = solve(eq1, eq2, eq3, x, y, z);
    
  • 求帶常數引數的方程,同樣使用 solve 函式

    >> syms a x
    >> solve(a*x+8==0)
     
    ans =
     
    -8/a
    
  • solve 函式遇到的其他問題,我們會遇到解方程的時候答案不是數值解,這個時候我們可以使用變數轉換來得到數值解

    >> syms x;
    >> eq=x^4 - 5*x^3 + 4*x^2 - 5*x + 6==0;
    >> solve(eq)
     
    ans =
     
     root(z^4 - 5*z^3 + 4*z^2 - 5*z + 6, z, 1)
     root(z^4 - 5*z^3 + 4*z^2 - 5*z + 6, z, 2)
     root(z^4 - 5*z^3 + 4*z^2 - 5*z + 6, z, 3)
     root(z^4 - 5*z^3 + 4*z^2 - 5*z + 6, z, 4)
     
    >> double(ans)
    
    ans =
    
       1.1164 + 0.0000i
      -0.1876 - 1.1076i
      -0.1876 + 1.1076i
       4.2588 + 0.0000i
    
  • solve 函式解方程組,結果存在一個結構體之中,要訪問它,需要使用結構體的引用方法,如:

    >> clear
    >> syms x y z
    >> eq1 = x^2 + sin(y) - z == 100;
    >> eq2 = x - y + z == 5;
    >> eq3 = x * z + cos(y) == 6 * z;
    >> a = solve(eq1, eq2, eq3, x, y, z);
    警告: Unable to solve symbolically. Returning a numeric solution using vpasolve. %這裡的警告是指沒有找不到絕對的解,給出的數值解
    > In solve (line 304) 
    >> a.x
    ans =
    10.044861348830706718130912031098
     
    >> a.y
    ans =
    4.9795861545146561508942123172393
     
    >> a.z
    ans =
    -0.06527519431605056723669971385847
    
  • 方程展開,比如展開代數式 ( x + 2 ) ( x − 3 ) (x+2)(x-3) (x+2)(x3) 為代數式 x 2 − x − 6 x^2-x-6 x2x6 ,我們使用 expand() 函式

    >> clear
    >> syms x
    >> eq=(x+2)*(x-3);
    >> expand(eq)
    ans =
    	x^2 - x - 6
    
    >> syms x y
    >> eq=sin(x+y);
    >> expand(eq)
    ans =
    	cos(x)*sin(y) + cos(y)*sin(x)
    
  • 因式分解,是方程展開的逆操作,使用 factor() 函式,我們對上面的展開代數式操作

    >> syms x;
    >> eq=(x+2)*(x-3);
    >> eq=expand(eq);
    >> factor(eq)
     
    ans =
     
    [ x + 2, x - 3]
    
  • 合併同類項,使用 collect() 函式,在沒有定義的時候按預設x合併

    答案=collect(代數式)

    答案=collect(代數式,指定變數)

    >> clear
    >> syms x y
    >> factor(x^2-y^2)
     
    ans =
     
    [ x - y, x + y]
    

ly. Returning a numeric solution using vpasolve. %這裡的警告是指沒有找不到絕對的解,給出的數值解

In solve (line 304)

a.x
ans =
10.044861348830706718130912031098

a.y
ans =
4.9795861545146561508942123172393

a.z
ans =
-0.06527519431605056723669971385847


- 方程展開,比如展開代數式 $(x+2)(x-3)$ 為代數式 $x^2-x-6$ ,我們使用 `expand()` 函式

```matlab
>> clear
>> syms x
>> eq=(x+2)*(x-3);
>> expand(eq)
ans =
	x^2 - x - 6

>> syms x y
>> eq=sin(x+y);
>> expand(eq)
ans =
	cos(x)*sin(y) + cos(y)*sin(x)
  • 因式分解,是方程展開的逆操作,使用 factor() 函式,我們對上面的展開代數式操作

    >> syms x;
    >> eq=(x+2)*(x-3);
    >> eq=expand(eq);
    >> factor(eq)
     
    ans =
     
    [ x + 2, x - 3]
    
  • 合併同類項,使用 collect() 函式,在沒有定義的時候按預設x合併

    答案=collect(代數式)

    答案=collect(代數式,指定變數)

    >> clear
    >> syms x y
    >> factor(x^2-y^2)
     
    ans =
     
    [ x - y, x + y]