MATLAB PDE工具箱簡單教程


PDE 即 Partial Differential Equations

因為用起來太懵了所以寫下這篇博客

先說 Alt 菜單下面的一行按鈕,分別是:
以角點繪制矩形、中心點角點繪制矩形、直徑畫圓、半徑畫圓、折線繪制多邊形
邊界模式、PDE 說明、初始化網格、細化網格、求解、繪制圖像、縮放右邊的下拉菜單是選擇問題類型,因為許多物理學的方面都需要用到偏微分方程

分別是:通用標量(?)、通用系統、結構力學:平面應力、結構力學:平面應變
    靜電學、靜磁學、交流電源電磁學、直流導電介質、熱傳導、擴散
選擇這些主要是方便方程參數的輸入和求解時一些條件的設定,
選擇所求解的問題類型,MATLAB 會把參數/條件的框提示改成相應的物理意義

 

 

 

 下文按照這行按鈕的順序解釋用法

 

繪制圖形一般是隨意畫一個然后雙擊該圖形調整其位置,圖形名字也可以改
也可以在 Alt 菜單 Draw 下的對應指令

然后是邊界模式,跟 Alt 菜單 Boundary 下的 Boundary Mode 是一樣的
設置邊界條件一般是在邊界模式下雙擊要設置條件的邊界

界面如圖,上面是邊界條件的等式形式,是提示參數對應系數的
左邊是條件類型,紐曼邊界條件和狄利克雷邊界條件
右邊的 Description 在上文中選擇問題類型之后會給出各個方程系數的物理意義

之后是在區域內設置 PDE,我只能將它粗略翻譯為“PDE 說明”
設置各區域的 PDE 個人建議用 Alt 菜單 PDE 下的 PDE Mode,在該模式下可以對各個區域分別編輯設置 PDE
切換到該模式之后雙擊各個圖形區域即可

 界面如上圖
與邊界條件的界面相似,上邊是等式形式,左邊是方程類型,右邊是參數及其描述
由於通用類型下 MATLAB 沒給出 Description,這里以 Heat Transfer 熱傳導類型為例

之后就是網格划分了,先說第二個網格細化,其實就是把求解前離散化的網格划分的更細,這樣解也會更加精確
根據使用需求選擇合適的細化程度,但化的太細之后會嚴重增加計算負擔,並且甚至會超出 MATLAB 的矩陣大小導致不能導出解(這種情況應該只能導出圖像)
值得一提的是在后面導出解的時候,導出的解是各個離散后點的位置上的數值解,所以如果要導出解的話一般來說都是要將離散化前后對應點的標號和坐標一並導出的
導出離散化前后的對應關系在 Alt 菜單 Mesh 下的 Export Mesh 里,注意導出之前是需要先划分網格的(Mesh)

后面是求解,需要先在 Alt 菜單下 Parameters 里輸入各種參數/條件,由於不同問題類型下的參數不同,這里不做贅述
設置好參數/條件之后就可以求解了,求解之后可以導出解,解的矩陣對應列數是離散化后點的編號

最后是畫圖像,有3D有動圖,也可以調整顏色,根據所需選擇即可

 附上一段代碼:

% This script is written and read by pdetool and should NOT be edited.
% There are two recommended alternatives:
% 1) Export the required variables from pdetool and create a MATLAB script
%    to perform operations on these.
% 2) Define the problem completely using a MATLAB script. See
%    https://www.mathworks.com/help/pde/examples.html for examples
%    of this approach.
clear;
clc;

[pde_fig,ax]=pdeinit;
pdetool('appl_cb',9);
set(ax,'DataAspectRatio',[1 142.85714285714286 1]);
set(ax,'PlotBoxAspectRatio',[1.5000000000000004 1 142.85714285714286]);
set(ax,'XLim',[-0.001 0.02]);
set(ax,'YLim',[-0.5 1.5]);
set(ax,'XTickMode','auto');
set(ax,'YTickMode','auto');

%additional
thickness = 0.0207;
second_pos = 0.0006 + thickness;
third_pos = second_pos + 0.0036;
fourth_pos = third_pos + 0.0055;
%additional

% Geometry description:
pderect([0 0.0006 1 0],'R1');
pderect([0.0006 second_pos 1 0],'R2');
pderect([second_pos third_pos 1 0],'R3');
pderect([third_pos fourth_pos 1 0],'R4');
set(findobj(get(pde_fig,'Children'),'Tag','PDEEval'),'String','R1+R2+R3+R4');

% Boundary conditions:
pdetool('changemode',0);
pdesetbd(12,...
'dir',...
1,...
'0',...
'0');
pdesetbd(11,...
'dir',...
1,...
'0',...
'0');
pdesetbd(10,...
'dir',...
1,...
'0',...
'0');
pdesetbd(9,...
'dir',...
1,...
'0',...
'0');
pdesetbd(8,...
'dir',...
1,...
'0',...
'0');
pdesetbd(7,...
'dir',...
1,...
'0',...
'0');
pdesetbd(6,...
'dir',...
1,...
'0',...
'0');
pdesetbd(5,...
'dir',...
1,...
'0',...
'0');
pdesetbd(2,...
'neu',...
1,...
'8.36',...
'309.32');
pdesetbd(1,...
'dir',...
1,...
'1',...
'65');

% Mesh generation:
setappdata(pde_fig,'Hgrad',1.3);
setappdata(pde_fig,'refinemethod','regular');
setappdata(pde_fig,'jiggle',char('on','mean',''));
setappdata(pde_fig,'MesherVersion','preR2013a');
pdetool('initmesh');

% PDE coefficients:
pdeseteq(2,...
'0.082!0.028!0.37!0.045',...
'0!0!0!0',...
'(1)+(0).*(65)!(0)+(0).*(37)!(0)+(0).*(30)!(0)+(0).*(37)',...
'(300).*(1377)!(1.18).*(1005)!(862).*(2100)!(74.2).*(1726)',...
'0:3600',...
'37',...
'0.0',...
'[0 100]');
setappdata(pde_fig,'currparam',...
['300!1.18!862!74.2     ';...
'1377!1005!2100!1726   ';...
'0.082!0.028!0.37!0.045';...
'1!0!0!0               ';...
'0!0!0!0               ';...
'65!37!37!37           ']);

% Solve parameters:
setappdata(pde_fig,'solveparam',...
char('0','1260','10','pdeadworst',...
'0.5','longest','0','1E-4','','fixed','Inf'));

% Plotflags and user data strings:
setappdata(pde_fig,'plotflags',[1 1 1 1 1 1 6 1 0 0 0 5401 1 0 0 0 0 1]);
setappdata(pde_fig,'colstring','');
setappdata(pde_fig,'arrowstring','');
setappdata(pde_fig,'deformstring','');
setappdata(pde_fig,'heightstring','');

% Solve PDE:
pdetool('solve');
pdetool('export', 5);

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM