Matlab符號計算(實例)

%% 1.數值常量轉換爲符號變量
%% 2.符號表達式的創建
%% 3.符號表達式中符號自變量的確定
%% 4.符號對象和數值對象的轉換
%% 5.符號數值的精度控制
%% 6.合併同類項
%% 7.因式分解
%% 8.分子多項式和分母多項式的提取
%% 9.符號表達式的展開
%% 10.符號表達式的化簡
%% 11.符號表達式的置換
%% 12.符號極限
%% 13.符號微分
%% 14.級數求和
%% 15.符號積分
%% 16.代數方程的求解
%% 17.符號微分方程的求解


% Matlab中常用函數除了angle()、atan2()、log2()、log10()只能用於數值運算外,其餘的都可用於符號運算
% 同時符號運算符中沒有邏輯操作符、關係運算符也只有是否等於的概念


% 1.數值常量轉換爲符號變量


a1=sym(cos(0.8*pi)+4,'d');%返回最接近32位的十進制數值
a2=sym(cos(0.8*pi)+4,'e');%返回最接近的帶有機器浮點誤差的有理值
a3=sym(cos(0.8*pi)+4,'f');%返回最接近的浮點表示
a4=sym(cos(0.8*pi)+4,'r');%返回該符號值最接近的有理數值
x=sym('a','real');     %創建正實數的符號變量a,如果用戶對創建的符號變量的數學特性不加說明則默認爲複數變量
                       %但是一旦定義了符號變量的數學特性,即使用clea清除下次也默認爲上次的數學特性除非重啓matlab
y=sym('c');            %默認爲複數變量
syms d;                %默認爲實數變量


% 2.符號表達式的創建


y1=sym('a*x^2+b*x+c');%一次性創建,但是沒有創建單個變量
syms a b c x;
y2=a*x^2+b*x+c;%逐個創建,最終合成表達式,創建了單個變量


% 3.符號表達式中符號自變量的確定(這裏沒有舉矩陣的例子)


    %%自變量選擇順序:先x,在x最近的數(先比較變量的第一個字母),若距離相同則取x後面的數,最後是大寫字母
syms d e f x t w X Y;
k=sym('2+pi');
n=sym('c*sqrt(alpha)+y*sin(delta)');
g=k*x*Y+d*n*X-w^2+t^f;
g_all=findsym(g);%找出所以自變量,n不獨立所以不能做爲自變量
g_1=findsym(g,1);%找出表達式中1個自變量
g_2=findsym(g,2);%           2
g_5=findsym(g,5);%           3


% 4.符號對象和數值對象的轉換


h=sym('[sin(0.9*pi);sqrt(2)]');
double(h);%將符號變量轉化爲數值常量


% 5.符號數值的精度控制


t=sqrt(2)*log(7);
digits;%缺省精度 32
t1=vpa(t); %用當前位數計算並顯示
t1=vpa(t,5); %指定5位精度進行計算並顯示
digits(8);%和下面一行聯合來對精度進行控制
t1=vpa(t);


% 6.合併同類項


syms x t;
f=sym((x^2+x^2*exp(-t)+1)*(x+exp(-t)));
f1=collect(f);%合併x的同類項係數
f2=collect(f,exp(-t));%合併 exp(-t) 同類項係數


% 7.因式分解


syms x a;
t=factor(a^3-x^3);%分解爲多因式相乘
factor(sym('123488'));%分解爲多個質數相乘
horner(x^6-5*x^3+4*x^2+4*x-6);%分解爲x疊乘的形式


% 8.分子多項式和分母多項式的提取


syms x;
A=[x^2 1/x^3+3;(2*x^2+1)/x-1/x^2 1/(x-3)];%將各個元素的分子和分母進行分解
[n d]=numden(A);%n對應分解後的分母,d對應分解後的分母


% 9.符號表達式的展開


syms x1 y1 alpha beta;
g=(x1-y1)^5;
expand(g);%將符號表達式展開
g1=[sin(alpha+beta) cos(alpha-beta);tan(alpha+beta) sin(3*beta)];%展開矩陣的各個元素
expand(g1);


% 10.符號表達式的化簡


syms t;
g3=2*t/(t^2-t+1)+3/(t+1);
simplify(g3);%只給出化簡結果


% 11.符號表達式的置換


syms a b x y;
f=a*sin(x)+b;
f1=subs(f,'sin(x)',y);%將f表達式中的sin(x)替換爲y(可以用數值進行替換,若替換後表達式中
                      % 變量全爲數值計算的結果爲數值常量,否則爲變量或符號常量)


 % 12.符號極限
 
 syms x2 t2;
 g4=limit(sin(x2)/x2,x2,0);%表達式sin(x2)/x2在x2趨於0時的極限
 g5=limit(sin(x)+x,x,0,'left');%表達式的左極限
 g6=limit(sin(t2)+t2^3/(t2+1),t2,0,'right');%表達式的右極限
 
%  13.符號微分


syms x y a;
f=[a y^3;y*cos(x) log(x)];
dx=diff(f);%求f對x的導數
dy2=diff(f,y,2);%求f對y的二階導數
dxdy=diff((diff(f,x)),y);%求f對x,y的二階混合偏導數
syms z;
g=[x+log(y*z);y^2+tan(z);sin(x)+cos(y)];
t=[x y z];
gj=jacobian(g,t);%計算雅克比矩陣


% 14.級數求和
syms t;
symsum(1/(t^2-1),t,2,9);%求表達式1/(t^2-1)在區間[ 2,9]的和


% 15.符號積分


syms x6 a t5 t6;%注意下面的規則同樣適用於矩陣
g6=int(a^x6*cos(x6),0,pi);%對表達式積分
g7=int(x6^4,t5,t6);%對表達式積分,積分上下限可以取變量
g8=int(1/x6,1,inf);%積分上限爲無窮
g9=int(1/t5);%缺省時默認爲不定積分


% 16.代數方程的求解


syms a b c x;
solve('x^3+2*x=4','x')%解方程 x^3+2*x=4
solve('sin(x+1)',x)%解方程 sin(x+1)=0,無窮解只輸出0附近的,有限個解則全部輸出
solve('a*(x^2-6)+b*(x+9)-c')%解方程 a*(x^2-6)+b*(x+9)-c 缺省時默認變量爲第一自變量x
s=solve('x^2+2*y+1','x+3*z=4','y*z=-1');%求解非線性方程組
disp([s.x s.y s.z],6);%顯示求解結果
%下面是用來求解非線性方程組的舉例
syms d n p q;
eq1=d+n/2+p/2-q;
eq2=n+d+q-p-10;
eq3=q+d-n/4-p;
[n,p,q]=solve(eq1,eq2,eq3,n,p,q);


% 17.符號微分方程的求解


syms x y;
y=dsolve('Dy=1+y^2','y(0)=3','x');%一階微分方程,必須是Dy、D2y...這些形式
y=dsolve('D2y=cos(2*x)-y','y(0)=log(5)','Dy(0)=0','x');%二階微分方程,y(0)、Dy(0)順序可變,x必須在最後
%下面是用來求微分方程dx/dt=2y,dy/dt=-x
g=dsolve('Dx=2*y,Dy=-x');
gx=g.x;
gy=g.y;
%下面是用來求dy/dx=3y+z,dz/dx=-4y+3z的特解和通解
g1=dsolve('Dy=3*y+z,Dz=-4*x+3*z','x');% 通解
g1y=g1.y
g1x=g1.z
g2=dsolve('Dy=3*y+z,Dz=-4*x+3*z','y(0)=0,z(3)=1','x');% 特解
g2y=g2.y;
g2x=g2.z;












發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章