用Matlab求解偏微分方程,可以用pde工具箱來解決。例如,簡單的點熱源方程
求解步驟及主要函數:
1、問題定義
2、創建具有單個因變量的PDE模型, createpde()
3、創建幾何結構並將其追加到PDE模型中,geometryFromEdges()
4、使用邊界條件,pdegplot()
5、指定PDE系數
6、指定初始條件,setInitialConditions()
7、生成網格,pdemesh()
8、生成時間離散化
9、求解數值解,solvepde()
10、繪圖解的圖形,pdeplot()
執行代碼:
clc
R1 = [3;4;-1;1;1;-1;-1;-1;1;1];
C1 = [1;0;0;0.4];
C1 = [C1;zeros(length(R1) - length(C1),1)];
gd = [R1,C1];
sf = 'R1+C1';
ns = char('R1','C1')';
g = decsg(gd,sf,ns);
numberOfPDE = 1;
pdem = createpde(numberOfPDE);
geometryFromEdges(pdem,g);
figure
pdegplot(pdem,'edgeLabels','on','subdomainLabels','on')
axis([-1.1 1.1 -1.1 1.1]);
axis equal
title 'Geometry With Edge and Subdomain Labels'
applyBoundaryCondition(pdem,'Edge',(1:4),'u',0);
specifyCoefficients(pdem,'m',0, 'd',1, 'c',1, 'a',0,'f',1);
setInitialConditions(pdem,0);
setInitialConditions(pdem,1,'face',2);
msh = generateMesh(pdem);
figure;
pdemesh(pdem);?
axis equal
nframes = 20;
tlist = linspace(0,0.1,nframes);
pdem.SolverOptions.ReportStatistics ='on';
result = solvepde(pdem,tlist);
u1 = result.NodalSolution;
figure
umax = max(max(u1));
umin = min(min(u1));
for j = 1:nframes,
pdeplot(pdem,'xydata',u1(:,j),'zdata',u1(:,j));
caxis([umin umax]);
axis([-1 1 -1 1 0 1]);
Mv(j) = getframe;
end
movie(Mv,1);
運行結果