Matlab基础入门手册(第六章 符号运算)
Matlab基礎入門手冊(第六章 符號運算)
第六章 符號運算
1.53 符號對象
1.符號數值 、變量和表達式的創(chuàng)建方法
2.認識函數
sym、syms
3.說明
符號數學工具箱
符號數學工具箱引入了一種特殊的數據類型 - 符號對象
該數據類型包括符號數字,符號變量 ,符號表達式和符號函數,還包含符號矩陣及上述變量組成的符號數組。
符號數學工具箱提供求解 、繪圖和操作符號數學方程的功能
4.實例演示
%1_53%freexyn1/6 %雙精度浮點型1/6,在Matlab中使用小數表達x=sym(1/6) %創(chuàng)建符號變量,分數形式表達class(x) %測試x類型為符號對象sin(pi) %對雙精度浮點pi值求sin值,有舍入誤差sin(sym(pi)) %對符號對象數值pi求sin值,完整表達%% 創(chuàng)建符號變量sym('x') %方法1syms x %方法2 聲明后可直接使用,無輸出結果,但工作區(qū)會存儲syms x y zsym('x',[1 5]) %方法1的形式也可賦值多個符號變量,并自動編號%% 創(chuàng)建符號表達式f=2*x+1g=x*y+z1.54 符號函數和符號矩陣
1.符號函數和符號矩陣的創(chuàng)建和應用
2.說明
符號函數和符號矩陣的用法與常規(guī)的矩陣和函數相同 ,差異在于處理的數據類型不同,用符號對象運算時 ,需要首先聲明符號對象。
3.實例演示
%1_54syms x %聲明符號對象xf=2*x+1 %符號表達式f(x)=2*x+1 %符號函數f(1) %結果是符號對象3,與雙精度3不同syms f(x,y) %直接創(chuàng)建(聲明)沒有函數表達式的函數f(x,y) %調用f(1,2) %運算結果%% 符號矩陣syms a b c d %聲明符號變量A=[a b;c d] %符號矩陣,結果每行用中括號單獨表達B=[a 1;c 3] %混合類型符號矩陣sum(A) %符號矩陣運算,與常規(guī)矩陣算法相同sum(B)sym('x',[2 2]) %創(chuàng)建2行2列矩陣
,自動添加下標sym('x%d%d',[2 2]) %分別引用2個下標sym('x%d2018%d',[2 2]) %2個下標中間添加數字%% 普通矩陣轉化為符號矩陣C=hilb(3) %創(chuàng)建3階希爾伯特矩陣sym(C) %轉化為符號矩陣1.55 基本運算
1.符號對象的算術運算 、關系運算和邏輯運算
2.認識函數
isAlways %判斷符號表達式是否為真
3.說明
符號對象的基本代數運算與浮點型數據的運算大體相同
4.實例演示
%1_551+1sym(1)+1syms a b x %聲明符號變量a+1a+bf=a+b+1f+xg(x)=a*x+b %函數運算g(10)m=[a b;b a] %符號矩陣運算m+1m.*2 %每個元素都乘2m*m %矩陣乘法%% 關系運算1<2>=0)isAlways(abs(a)*abs(b)>=abs(a*b))isAlways(abs(a)>=0 | 1>2) %第一項為真
,取或運算后,結果為真isAlways(abs(a)>=0 & 1>2) %結果為假a | ba & b1.56 使用假設
1.符號變量使用假設
2.認識函數
設置assume
添加assumeAlso
顯示assumptions
3.說明
在符號數學工具箱中,符號變量默認是復數變量
若要運算中不使用全體復數域,可以為變量添加假設指定范圍
可以通過假設設置變量屬于集合 :整數 、正數和實數
4.實例演示
%1_56%作者
:freexynsyms xassumptions(x) %x不存在假設,屬于復數域assume(x>=0) %設置假設assumptions(x) %查看假設% assume(x<=5)% assumptions(x) %會覆蓋前面假設內容assumeAlso(x<=5) %追加假設assumptions(x)%% 設置x屬于集合assume(x,'integer') %假設x屬于整數assumptions(x)assume(x,'positive') %假設x為正數assume(x,'real') %假設x屬于實數assumptions(x)%% 符號變量聲明時同時設置假設sym('x')sym('x','real') %創(chuàng)建(聲明)符號變量并假設屬于實數assumptions(x)syms y positive %另一方法,創(chuàng)建(聲明)符號變量并假設屬于正數assumptions(y)assumptions %不給定參數時,會顯示所有假設%% 設置假設的用法solve(y+1==0,y) %solve函數用來解方程,solve(x+1==0,x)1.57 清除假設
1.清除假設和重置符號引擎
2.認識函數
reset
3.說明
符號變量和它們的假設是分開存儲的
符號引擎工作空間通常是空的 ,Matlab工作空間記錄符號變量并在需要時把他們傳遞到符號引擎工作空間進行計算
符號引擎空間存儲了所有的關于符號變量的假設 ,這些假設會影響方程的求解 、化簡和變換
清除變量和清除假設是兩個過程,運算結束后注意清除假設
4.實例演示
%1_57syms x y z positive %假設不存在工作區(qū)中,而在符號引擎工作空間中assumptions %查看所有假設whos %查看所有變量clear x %清除變量x
,并不會清除掉假設assumptionswhos% assume(x,'clear') %清除假設 :變量x是訪問和調用x假設的橋梁,變量若被清除了
,則無法訪問或清除假設syms x %重新聲明假設xassume(x,'clear')assumptionswhosassume([x y],'clear') %可同時清除多個假設,以數組形式assumptionsreset(symengine) %重制符號引擎工作空間:清理所有符號假設assumptions1.58 可變精度算術
1.可變精度算術的應用
2.認識函數
vpa
3.說明
默認的,Matlab雙精度浮點數使用16位數字精度
而符號數學工具箱的vpa函數 ,提供了無限大的可變精度
它默認使用32位數字精度 ,32位指的是有效數字的位數
4.實例演示
%1_58pi %默認雙精度浮點型pi值,16位精度,默認short格式小數點后4位vpa(pi) %pi轉換為可變精度數值 ,32位精度vpa(pi)+1 %先轉換為可變精度數值再運算vpa(pi,100) %通過輸入第2個參數指定精度vpa(sqrt(2),100)%% 讓整個運行環(huán)境使用可變精度digits %獲取當前運行環(huán)境的精度i=digits(100) %設置運行環(huán)境精度100
,i返回設置前的精度值digitsvpa(pi) %顯示pi的可變參數值,已變?yōu)?00位vpa(pi)+1digits(32)digitsvpa(pi)1.59 運算精度的選擇
1.分別在以下三種算術條件下求sin(pi)的值
符號運算
可變精度運算
雙精度浮點型運算
2.說明
2.1 符號算術
默認的,符號數學工具箱使用確切的數字,進行精確的符號計算
2.2 可變精度算術
是符號數學工具箱的功能 ,是符號計算的近似數值計算
通過控制數值顯示的有效位數實現可變精度
默認32位 ,運算速度稍快,內存消耗量依賴于設定的精度
2.3 雙精度浮點數算術
雙精度浮點運算就是常規(guī)的Matlab數值計算
有舍入誤差,精確到16位精度,運算速度最快,內存消耗最少
3.實例演示
%1_59a=sym(pi) %符號型sin(a)b=vpa(pi) %可變精度型sin(b)c=pi %雙精度sin(c)1.60 數值型的轉換
1. 符號型和數值型之間的轉換
2.說明
符號數學工具箱允許實現符號對象和常規(guī)Matlab數據類型的轉換(如數值、字符等)
也可以借助符號變量的精度控制方法實現高精度的數值計算
數值型轉換成符號型用sym,返回數值表達式的有理近似值
轉換的原理是 ,通過匹配p/q, pπ/q, (p/q)^1/2,2^q和10^q(其中p和q是中等大小的整數)這樣的形式來修正舍入誤差(符號型為精確值)
3.實例演示
%1_600.3 %雙精度sym(0.3) %轉化為符號型sym(0.333333333333333333333333333) %轉化為符號型a=1/6 %取小數后4位sym(a)a=pi/6sym(a)a=3^(1/3) %開立方近似值sym(a) %轉換成符號型時,無法將近似值轉換成精確值的a=3^(1/2) %開平方近似值sym(a) %可以轉換成符號型