matlab画微分方程的矢量场图_MATLAB偏微分方程
4.8.2? 偏微分方程
在自然科學的很多領域內,都會遇到微分方程初值問題,特別是偏微分方程,它的定解問題是描述自然界及科學現象的最重要的工具。可以說,幾乎自然界和各種現象都可以通過微分方程(特別是偏微分方程)來描述。
MATLAB提供了一個專門用于求解偏微分方程的工具箱PDE Toolbox。本小節僅介紹一些最簡單、經典的偏微分方程,如橢圓型、雙曲型、拋物型等偏微分方程,并給出求解方法。用戶可以從中了解其解題的基本方法,從而解決類似的問題。
1.橢圓型問題
assempde函數是PDE工具箱中的一個基本函數,它使用有限元法組合PDE問題。該函數用來有選擇地生成PDE問題的解。可以用assempde函數求解下面的標量橢圓型問題:
或系統橢圓型問題:
對于標量的情況,用解的列向量代表解矢量u,列矢量中的值對應于p的對應節點處的解。對于具有np個節點的N維系統,u1的前np行描述u的第1個元素,接下來的np行描述u的第2個元素,依次類推。這樣,u的元素就作為N塊節點行放到u中。assempde函數的調用語法如下。
(1)u=assempde(b,p,e,t,c,a,f): 通過在線性方程組中剔除Dirichlet邊界條件來組合和求解PDE問題。
(2)[K,F]=assempde(b,p,e,t,c,a,f):?通過剛性位移近似Dirichlet邊界條件來組合和求解PDE問題。K和F分別為剛性矩陣和右邊項。PDE問題的有限元解為u1=K\F。
(3)[K,F,B,ud]=assempde(b,p,e,t,c,a,f):通過從線性方程組剔除Dirichlet邊界條件來組合PDE問題。u1=K\F,則返回非Dirichlet點上的解。完整的PDE問題可以通過MATLAB中的表達式u=B*u1+ud求解。
(4)[K,M,F,Q,G,H,R]=assempde(b,p,e,t,c,a,f):給出PDE問題的分離表示。
(5)u=assempde(K,M,F,Q,G,H,R):將PDE問題的分離表示轉換為單一矩陣或矢量的形式,然后通過從線性方程組中剔除Dirichlet邊界條件來求解。
(6)[K1,F1]=assempde(K,M,F,Q,G,H,R):用很大的常數修改Dirichlet邊界條件,從而將PDE問題的分離表示轉換為單一矩陣或矢量的形式。
(7)[K1,F1,B,ud]=assempde(K,M,F,Q,G,H,R):從線性方程組中剔除Dirichlet邊界條件,從而將PDE問題的分離表示轉換為單一矩陣或矢量的形式。
b描述PDE問題的邊界條件。b也可以是邊界條件矩陣或邊界M文件的文件名。PDE問題幾何模型由網絡數據p,e,t描述。網格數據的生成可以查詢help文檔中的initmesh函數。
系數c,a,d,f可以通過多種方式給定。這些系數也可以與時間t相關,在assempde函數中可以看到所有選項的列表。
【例4-47】? 求解L型薄膜的方程,為Dirichlet邊界條件。最后繪圖顯示結果。
>> [p,e,t]=initmesh('lshapeg','hmax',0.2); ?? %生成初始三角形網格,hmax指網格大小
>> [p,e,t]=refinemesh('lshapeg',p,e,t);???? ? %? 將初始的三角形網格細化
>> u=assempde('lshapeb',p,e,t,1,0,1);?????? ? %? 求解方程
>> pdesurf(p,t,u)?????????????????????????????? ?%? 繪制結果圖形
lshapeg和lshapeb分別為表示對象幾何模型和邊界條件的M文件,為工具箱自帶文件。initmesh函數和 refinemesh函數分別對網格模型進行初始化和細化。pdesurf函數繪制解的表面圖。L型薄膜泊松方程的解如圖4-15所示。
2.拋物型問題
MATLAB提供了parabolic函數求解標量拋物型問題:
圖4-15? L型薄膜泊松方程的解
或系統PDE問題:
該函數的調用語法如下。
(1)u1=parabolic(u0,tlist,g,b,p,e,t,c,a,f,d):p,e,t為網格數據,b為邊界條件,初值為u0。
(2)u1=parabolic(u0,tlist,b,p,e,t,c,a,f,d,rtol,atol):atol和rtol為絕對和相對容限。
(3)u1=parabolic(u0,tlist,K,F,B,ud,M):生成下面PDE問題的解。
的初始值為u0。
【例4-48】? 求解熱傳導方程:。其中。在的區域內令,在其他區域內令。使用Dirichlet邊界條件。要求計算時間linspace(0,0.1,20)處的解。
%? 生成初始三角形網格數據
>> [p,e,t]=initmesh('squareg');????????????? ? %? 參數squareg指計算區域是方形的
>> [p,e,t]=refinemesh('squareg',p,e,t);????? ?%? 將初始的三角形網格細化
>> u0=zeros(size(p,2),1);
>> ix=find(sqrt(p(1,:).^2+p(2,:).^2)<0.4);? ? %? 查找區域內的元素
>> u0(ix)=ones(size(ix));????????????????????? ?%? 令
>> tlist=linspace(0,0.1,20);????????????????? ?%? 時間列表
>> u1=parabolic(u0,tlist,'squareb1',p,e,t,1,0,1,1);?? %? 求解偏微分方程
本例首先調用initmesh函數生成偏微分方程的初始網格,然后調用parabolic函數求解偏微分方程,運行結束將顯示如下信息:
96 successful steps
0 failed attempts
194 function evaluations
1 partial derivatives
20 LU decompositions
193 solutions of linear systems
具體的結果u1是一個665*20的矩陣,這里就略去不顯示了。
3.雙曲型問題
MATLAB提供了hyperbolic函數來求解標量雙曲型問題:
或系統雙曲型問題:
hyperbolic函數的調用語法如下。
u1=hyperbolic(u0,ut0,tlist,b,p,e,t,c,a,f,d,rtol,atol):p,e,t為網格數據,b為邊界條件,u0為初值,初始導數為ut0。atol和rtol為絕對和相對容限。
u1=hyperbolic(u0,ut0,tlist,K,F,B,ud,M)生成下面PDE問題的解。
u的初始值為u0和ut0。
在MATLAB命令窗口輸入:
>> [p,e,t]=initmesh('squareg');????????????? ????????????? %?? 生成初始三角形網格
>> x=p(1,:)';
>> y=p(2,:)';
>> u0=atan(cos(pi/2*x));
>> ut0=3*sin(pi*x).*exp(cos(pi*y));
>> tlist=linspace(0,5,31);??????????????????? ????????????? %? 時間列表
>> uu=hyperbolic(u0,ut0,tlist,'squareb3',p,e,t,1,0,0,1);? ?%? 求解方程
本例首先調用initmesh函數生成偏微分方程的初始網格,然后調用hyperbolic函數求解偏微分方程,運行結束將顯示如下信息:
462 successful steps
70 failed attempts
1066 function evaluations
1 partial derivatives
156 LU decompositions
1065 solutions of linear systems
具體的結果uu是一個177*31的矩陣,這里就略去不顯示了。
總結
以上是生活随笔為你收集整理的matlab画微分方程的矢量场图_MATLAB偏微分方程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python的try和except_py
- 下一篇: c++定义一个动态对象数组_如何在Pyt