MATLAB符號計算(收藏版)

2021-02-19 工科男的Matlab學習日誌

歡迎關注工科男的Maltab學習日誌,採用Mardown文本編輯器編寫文章,全新排版升級,內容、代碼更簡潔,同時開通了視頻號,工科男的日常gōng kē nán de rì cháng歡迎大家關注。 ——工科男

MATLAB符號計算

1 符號計算基礎

1.1符號運算

1.2 符號對象

1.3 符號表達式中變量的確定

2 符號導數及其應用

3 符號積分

4 級數符號求和

5 代數方程的符號求解

6 常微分方程(組)符號求解

往期精彩閱讀

1 符號計算基礎
1.1符號運算符號運算無須事先對獨立變量賦值,運算結果以標準的符號形式表達。1.2 符號對象sym函數
sym函數用來建立單個符號量,例如,a=sym(『a』)建立符號變量a,此後用戶可在表達式中使用變量a進行各種運算。syms函數
syms函數調用格式為:syms  var1 var2 … varn變量間用空格而不要用逗號分隔

例1 考察符號變量和數值變量的差別

a=sym('a');
b=sym('b');
c=sym('c');
d=sym('d');   
%定義4個符號變量
 w=10; x=5; y=-8; z=11;                     
 %定義4個數值變量
 A=[a, b; c, d]                             
 %建立符號矩陣A
 B=[w, x; y, z]                            
 %建立數值矩陣B
 det(A)                                  
 %計算符號矩陣A的行列式
 det(B)                                  
 %計算數值矩陣B的行列式
a=sym('a');
b=sym('b');
c=sym('c');
d=sym('d');  
%定義4個符號變量
w=10; x=5; y=-8; z=11;                     
%定義4個數值變量
A=[a, b; c, d]                            
%建立符號矩陣A
B=[w, x; y, z]                           
%建立數值矩陣B
det(A)                                  
%計算符號矩陣A的行列式
det(B)                                  
%計算數值矩陣B的行列式

例2 比較符號常數與數值在代數運算時的差別

pi1=sym('pi');
k1=sym('8');
k2=sym('2');
k3=sym('3');    
% 定義符號變量
pi2=pi; 
r1=8; 
r2=2; 
r3=3;                         
% 定義數值變量
sin(pi1/3)                                    
% 計算符號表達式值  
sin(pi2/3)                                     
% 計算數值表達式值
sqrt(k1)                                        
% 計算符號表達式值
sqrt(r1)                                       
% 計算數值表達式值
sqrt(k3+sqrt(k2))                         
% 計算符號表達式值
sqrt(r3+sqrt(r2))                         
% 計算數值表達式值

例3 利用3種方法建立符號表達式

U=sym('3*x^2+5*y+2*x*y+6') 
%定義符號表達式U
syms x y;                                       
%建立符號變量x、y
V=3*x^2+5*y+2*x*y+6             
%定義符號表達式V
2*U-V+6                                       
%求符號表達式的值
W='3*x^2+5*y+2*x*y+6'           
%定義符號表達式W

例4 建立x, y的一般二元函數

f = sym('f(x,y)');   
f = 『f(x,y)』;

例5 符號表達式的四則運算示例

syms x y z;    
f=2*x+x^2*x-5*x+x^3   
%符號表達式的結果為最簡形式
f=2*x/(5*x)                      
%符號表達式的結果為最簡形式
f=(x+y)*(x-y)                   
%符號表達式的結果不是x^2-y^2,而是(x+y)*(x-y)

factor(S)  對S分解因式,S是符號表達式或符號矩陣;expand(S)  對S進行展開,S是符號表達式或符號矩陣;collect(S)  對S合併同類項,S是符號表達式或符號矩陣;collect(S, v) 對S按變量v合併同類項,S是符號表達式或符號矩陣。

例6  對符號矩陣A的每個元素分解因式

syms a b x y;
A=[2*a^2*b^3*x^2-4*a*b^4*x^3+10*a*b^6*x^4,3*x*y-5*x^2;4,a^3-b^3];
factor(A)              
%對A的每個元素分解因式

例7  計算表達式S的值

syms x y;
s=(-7*x^2-8*y^2)*(-x^2+3*y^2);
expand(s)      
%對s展開
collect(s,x)     
%對s按變量x合併同類項(無同類項)
factor(ans)     
% 對ans分解因式

基本的符號運算

simplify(S)  應用函數規則對S進行化簡

例8 表達式化簡舉例

syms x y;
s=(x^2+y^2)^2+(x^2-y^2)^2;
simplify(s)
simple(s)      
%MATLAB自動調用多種函數對s進行化簡,並顯示每步結果

transpose(S)       返回S矩陣的轉置矩陣

determ(S)           返回S矩陣的行列式值

colspace(S)        返回S矩陣列空間的基

[Q, D]=eigensys(S)     Q返回S矩陣的特徵向量,D返回S矩陣的特徵值

1.3 符號表達式中變量的確定

findsym可以幫助用戶查找一個符號表達式中的符號變量。該函數的調用格式為:

findsym(S,n)

函數返回符號表達式S中的n個符號變量,若沒有指定n,則返回S中的全部符號變量在求函數的極限、導數和積分時,如果用戶沒有明確指定自變量,MATLAB將按預設原則確定主變量並對其進行相應微積分運算。可用findsym(S,1)查找系統的預設變量,事實上,MATLAB按離字符'x'最近原則確定預設變量。

2 符號導數及其應用2.1函數的極限

limit函數的調用格式為:

limit(f,x,a)

limit函數的另一種功能是求單邊極限,其調用格式為:

limit(f,x,a,'right') 或 limit(f,x,a,'left')

例9

syms a m x; 
f=(x^(1/m)-a^(1/m))/(x-a);
limit(f, x, a)                   
%求極限(1)
f=(sin(a + x)-sin(a - x))/x;
limit(f)                         
%求極限(2)
limit(f, inf)                   
%求f函數在x→∞(包括+∞和-∞)處的極限
limit(f, x, inf, 'left')      
%求極限(3)
f=(sqrt(x)-sqrt(a)-sqrt(x-a))/sqrt(x*x-a*a);
limit(f, x, a, 'right')                 
%求極限(4)

2.2 符號函數求導及其應用

求導函數為:

diff(f, x, n)

diff函數求函數f對變量x的n階導數。參數x的用法同求極限函數limit,可以預設,預設值與limit相同,n的預設值是1;

例10 求函數的導數

syms a b t x y z;    
f=sqrt(1+exp(x));
diff(f)                  
%求(1)。未指定求導變量和階數,按預設規則處理
f=x*cos(x);
diff(f,x,2)               
%求(2)。求f對x的二階導數
diff(f,x,3)               
%求(2)。求f對x的三階導數
f1=a*cos(t);f2=b*sin(t);
diff(f2)/diff(f1)           
%求(3)。按參數方程求導公式求y對x的導數
f=x*exp(y)/y^2;
diff(f,x)                 
%求(4)。z對x的偏導數
diff(f,y)                 
%求(4)。z對y的偏導數
f=x^2+y^2+z^2-a^2;
zx=-diff(f,x)/diff(f,z)      
%求(5)。按隱函數求導公式求z對x的偏導數
zy=-diff(f,y)/diff(f,z)      
%求(5)。按隱函數求導公式求z對y的偏導數

例11 在曲線

x=sym('x');   
y=x^3+3*x-2;         
%定義曲線函數
f=diff(y);                
%對曲線求導數
g=f-4;
solve(g)                 
%求方程f-4=0的根,即求曲線何處的導數為4

3 符號積分

求不定積分和定積分的函數是int,其調用格式為

int(f)       求f對默認自變量的不定積分;

int(f, x)           求f對自變量t的不定積分;

int(f, a, b)       求f對默認自變量的定積分,積分區間為[a,b];

int(f, x, a, b)   求f對自變量x的定積分,積分區間為[a,b]

參數x可以預設,預設原則與diff函數相同

例12 求不定積分

x=sym('x');
f=(3-x^2)^3;
int(f)                       
%求不定積分(1)
f=sqrt(x^3+x^4);
int(f)                        
%求不定積分(2)
g=simple(ans)         
%調用simple函數對結果化簡

例13 求定積分

x=sym(『x』);
t=sym(『t』); 
nt(abs(1-x),1,2) 
%求定積分
f=1/(1+x^2);  
int(f, -inf, inf)    
%求定積分
int(4*t*x,x,2,sin(t))                
%求定積分
f=x^3/(x-1)^100;
I=int(f, 2, 3)          
%用符號積分的方法求定積分
double(I)               
%將上述符號結果轉換為數值

例14 軸的長度為10米,若該軸的線性密度計算公式是

%(1)符號積分
syms x;  
f=6+0.3*x;   
m=int(f,0,10)

%(2)數值積分
%先建立一個函數文件fx.m:
function fx=fx(x)
fx=6+0.3*x;
%輸入命令:
m=quad('fx',0,10,1e-6)

4 級數符號求和4.1 級數的符號求和

級數符號求和函數symsum,調用格式為:

symsum(a,n,n0,nn)

例15 求級數之和

n=sym('n');
s1=symsum(1/n^2,n,1,inf)        
s2=symsum((-1)^(n+1)/n,1,inf)
%未指定求和變量,預設為n
s3=symsum(n*x^n,n,1,inf)   
%此處的求和變量n不能省略。
s4=symsum(n^2,1,100)              
%計算有限級數的和

4.2 函數的泰勒級數

函數taylor調用格式為:

taylor(f, v, n, a)

例16 求函數在指定點的泰勒展開式。

x=sym('x');
f1=(1+x+x^2)/(1-x+x^2);
f2=sqrt(1-2*x+x^3)-(1-3*x+x^2)^(1/3);
taylor(f1,x,5)                
%展開到x的4次冪時應選擇n=5
taylor(f2,6)        

5 代數方程的符號求解

線性代數方程組求解函數linsolve,其調用格式:

linsolve(A,b)

一般代數方程(組)求解函數是solve,其調用格式:

solve(f)                  —— 求一個方程的解

solve(f1,f2, …fn)    —— 求n個方程的解

solve('eqn1','eqn2',...,'eqnN','var1','var2',...'varN')

例17 求線性方程組AX=b的解

%解方程組(1)的命令如下:
A=[34, 8, 4; 3, 34, 3; 3, 6, 8]; 
b=[4; 6; 2];
X=linsolve(A,b)   

%調用linsolve函數求(1)的解
A\b          
%用另一種方法求(1)的解

%解方程組(2)的命令如下:
syms a11 a12 a13 a21 
syms a22 a23 a31 a32 
syms a33 b1 b2 b3;
A=[a11,a12,a13;a21,a22,a23;a31,a32,a33]; 
b=[b1;b2;b3];
X=linsolve(A,b)                
%調用linsolve函數求(2)的解

XX=A\b                              
%用左除運算求(2)的解

6 常微分方程(組)符號求解

常微分方程符號求解函數dsolve,其調用格式為:

dsolve('eqn1','condition','var')

求解微分方程eqn1在初值條件condition下的特解,若沒有給出初值條件,求方程的通解

dsolve('eqn1','eqn2',…,'eqnN','condition1',…,'conditionN','var1',…,'varN')

求解微分方程組eqn1、…、eqnN在初值條件conditoion1、…、conditionN下的解,若沒有給出初值條件,求方程組的通解

例18 求下列方程的解

y=dsolve('D2y+2*Dy+2*y=0','y(0)=1','Dy(0)=0')
ezplot(y) 
% 方程解y(t)的時間曲線圖

方程解

點擊即可閱讀原文

在學習中得到樂趣,在樂趣中收穫學習zài xué xí zhōng dé dào lè qù ,zài lè qù zhōng shōu huò xué xí歡迎關注和分享該公眾號。如果您有什麼建議可以公眾號直接回復即可。期待您的加入,也希望您分享給您身邊有需要的人,建議直接將該公眾號設為星標記公眾號,以免錯失精內容,該公眾號同時開通了視頻號工科男的日常gōng kē nán de rì cháng,歡迎掃描下方二維碼關注。

QQ技術交流群:272558566

微信視頻號微信公眾號

相關焦點

  • Matlab:符號變量、符號函數、泰勒級數
    符號變量在介紹matlab一文中,我們寫道在matlab中使用變量時不需要預先定義,但是在特殊情況下我們是需要先定義變量然後才能使用的,這種情況就是符號變量。在matlab中用 syms 聲明一個符號變量。聲明了符號變量後就可以構造一個函數了,然後可以在基礎上應用,例如簡單的函數求值。
  • matlab入門(四)-符號運算
    matlab符號運算1. 符號對象的建立:sym 和 symssyms 符號變量1 符號變量2 ...
  • matlab符號微積分及應用舉例
    符號函數的極限求符號函數極限的命令為limit ,其調用格式為:limit(f,x,a)即求函數f關於變量x在a點的極限。對於 limit函數,還有另一種調用格式,用來求單邊極限:limit(f,x,a,『right』)右極限;limit(f,x,a,『left』)左極限 例、求當n趨於無窮時,(1+1/n)^n的值。
  • MATLAB符號
    MATLAB的21種特殊符號,總有一種你不知道的用法讀書人的應該不叫偷吧?今天/和\用錯了很是懊惱應該不會有人查到這裡,此乃法外之地本文所指的特殊符號是指除了字母、數字、運算符以外的符號,包括:=;(), []:.{}''""%@~.../\*!?..+。我儘量先從常見的符號說起,非新手可以跳過前面的常見符號。
  • matlab符號推導應用及相關技巧
    在戰略上手推公式,而在戰術上用matlab符號推導輔助和驗證可以大幅度減少出錯,並提高效率。1. 符號推導第一步,學會使用sym和syms    a.生成 單個符號變量    b.生成 單個符號變量   c.生成矩陣符號變量sym和syms的區別
  • MATLAB符號計算(一)
    其中,A可以是一個數值常量、數值矩陣或數值表達式(不加單引號),此時符號對象為一個符號常量;A也可以是一個變量名(加單引號),這是符號對象為一個符號變量。ans = -39由上面的例子可以看出:符號計算的結果是一個精確的數學表達式。
  • MATLAB符號計算(二)
    一、代數方程符號求解在MATLAB中,求解用符號表達式表示的代數方程可由函數solve()實現,其調用格式為:①solve(s):求解符號表達式s的代數方程式,求解變量為默認變量。②solve(s,v):求解符號表達式s代數方程,求解變量為v。③solve(s1,s2,..,sn,v1,v2,...
  • Matlab有限元計算
    ,因此這篇文章僅僅以一個簡單的一維線性彈簧單元為例,簡述一下有限元計算的基本思想,主要參考書目《有限元方法基礎教程》-Daryl L.Logan和《matlab有限元分析與應用》-P.I. Kattan。前者有詳細的剛度矩陣等推導,主要從理論上對有限元方法進行說明,後者主要是結合著名的矩陣實驗室matlab對結構有限元進行分析與計算,兩者可以結合來看。下面我就《有限元方法基礎教程》一書中的習題2.17為例,使用matlab來說明一下如何對其進行計算。
  • matlab vs R
    特別需要注意的是 R 是針對向量進行四則運算,它等同於 matlab 裡的點運算。接下來,將分類別比較各類計算相關的函數。剩下的主要是數值計算和符號計算的比較。R 語言同樣支持符號計算,但和 matlab 還是有一些不同之處,需要在下次集中展示它們之間的區別,另一些則是比較碎的知識點,比如:點乘和叉乘的計算
  • 關於matlab程序運行時間計算方法的思考
    簡介:在matlab中,為了驗證比較兩個算法直接的效率,我們常常需要計算某段程序的運行時間,而常用的也就是三種方法:本文引用地址:http://www.eepw.com.cn/
  • MATLAB符號計算
    (1)sym函數    sym函數用來建立單個符號量,例如:符號變量名=sym(符號字符串)
  • matlab和c語言的區別
    MATLAB功能特性:數值分析數值和符號計算工程與科學繪圖控制系統的設計與仿真數字圖像處理數位訊號處理通訊系統設計與仿真MATLAB應用:MATLAB產品族可以用來進行以下各種工作:●數值分析●數值和符號計算●工程與科學繪圖●控制系統的設計與仿真
  • 有關matlab三角函數角度與弧度計算的小竅門
    不知你有沒有注意到,當在matlab計算sin(30),cos(60)時候出來的並不是你想要的0.5,這到底是為啥呢,原來matlab這種形如「sin, cos, tan」等函數計算的時候採用的是弧度制而不是我們平常所理解的角度制。那麼問題來了,該如何解決這個問題呢?
  • Matlab基礎(三)
    符號表達式之前已經介紹過,利用符號表達式可以定義一個函數表達式,所有的符號表達式定義都從syms指令開始,比如你的表達式包含x,y兩個變量,那麼你要首先定義兩個符號變量:syms x y緊接著就可以寫出你的符號表達式
  • MATLAB中,你必須知道的!(二)
    符號運算無須事先的運算對象可以使沒有賦值的符號變量,可以獲得任意精度的解。 1·符號表達式可以代表數字、函數、算子、變量的matlab字符串。 2·建立單個符號量:符號量名 = sym(『符號表達式』)。
  • 過冷水帶您走進matlab數據轉換新世界
    數據轉換對於經常使用matlab的夥伴來說是很基礎且實用的知識點,but! 相互之間轉換關係不太容易釐清,免不了書到用時求谷哥度娘。
  • 32個實用matlab編程技巧
    今天給大家介紹一些matlab編程小技巧,希望對大家學習matlab有所幫助。 1、能用矩陣計算的就用矩陣計算,不能用矩陣計算的想方設法也要往矩陣計算上靠。 2、少用循環,尤其是避免多重循環嵌套,儘量用向量化的運算來代替循環操作。在必須使用多重循環的情況下,若各層循環執行的次數不同,則在循環的外層執行循環次數少的,內層執行循環次數多的。
  • Matlab基礎知識概述
    MATLAB 以商品形式出現後的短短幾年,就以其良好的開放性和運行的可靠性,使原先控制領域裡的封閉式軟體包紛紛淘汰,而改在MATLAB 平臺上重建。在時間進入20 世紀九十年代的時候,MATLAB 已經成為國際控制界公認的標準計算軟體。到九十年代初期,在國際上30 幾個數學類科技應用軟體中,MATLAB 在數值計算方面獨佔鰲頭,而Mathematica 和Maple 則分居符號計算軟體的前兩名。
  • 幫你快速入門MATLAB
    小提示: ">>"是MATLAB的提示符號(Prompt),但在PC中文視窗系統下,由於編碼方式不同,此提示符號常會消失不見,但這並不會影響到MATLAB的運算結果。我們也可將上述運算式的結果設定給另一個變數x:x = (5*2+1.3-0.8)*10^2/25x = 42此時MATLAB會直接顯示x的值。
  • Matlab基礎(四)
    符號表達式首先還是要用到符號表達式,用來定義一個符號函數。之前說過,所有的符號表達式的定義都要從syms指令開始,比如你的表達式包含x,y兩個變量,那麼首先需要定義符號變量:syms x y緊接著寫出你的符號表達式。下面以2021年考研數學一第17道大題為例,演示符號表達式的威力。