歡迎關注工科男的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 考察符號變量和數值變量的差別
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)的時間曲線圖
方程解