有限元的Matlab程序(三角形区域)
function Finite_element_tri(Imax,Jmax)
% 用有限元法求解三角形形区域上的Possion方程
% 其中Imax Jmax分别表示x轴和y轴方向的网格数,其中Jmax等于Imax的两倍
% 定义一些全局变量
global ndm nel na
% ndm 总节点数
% nel 基元数
% na 表示活动节点数
V=0; J=0;X0=1/Imax;Y0=X0;
domain_tri % 调用函数画求解区域
[X,Y,NN,NE]=setelm_tri(Imax,Jmax); %
给节点和三角形元素编号,并设定节点坐标
% 求解有限元方程的求系数矩阵
T=zeros(ndm,ndm);
for n=1:nel
n1=NE(1,n); n2=NE(2,n);
n3=NE(3,n);
s=abs((X(n2)-X(n1))*(Y(n3)-Y(n1))-(X(n3)-X(n1))*(Y(n2)-Y(n1)))/2;
for k=1:3
if
n1<=na|n2<=
Sobolev空间在偏微分方程中的应用
陈荣亮(计算数学)
在数学本身的发展中,也时常要求冲破古典分析对一些基本运算使用的限制。远在三十年代,苏联数学家Sobolev为了确定偏微分方程的解的存在唯一性,发现如果仅限于在古典意义下来
function [x]=Jacobi_iterative(A,b)
% 用Jacobi迭代求解线性方程组,矩阵A是方阵
x0=zeros(1,length(b)); % 赋初值
tol=10^(-6); % 给定误差界
N=100; % 给定最大迭代次数
[n,n]=size(A); % 确定矩阵A的阶
k=1;
% 迭代过程
while k<=N
for i=1:n
x(i)=(b(i)-A(i,:)*x0'+x0(i)*A(i,i))/A(i,i);
end
if
max(abs(x-x0))<=tol
fid = fopen('J_Inter_result.txt', 'wt');
fprintf(fid,'\n********用Jacobi迭代求解线性方程组的输出结果********\n\n');
function [x]=SOR_iterative(A,b)
% 用SOR迭代求解线性方程组,矩阵A是方阵
x0=zeros(1,length(b)); % 赋初值
tol=10^(-2); % 给定误差界
N=1000; % 给定最大迭代次数
[n,n]=size(A); % 确定矩阵A的阶
w=1; % 给定松弛因子
k=1;
% 迭代过程
while k<=N
x(1)=(b(1)-A(1,2:n)*x0(2:n)')/A(1,1);
for i=2:n
x(i)=(1-w)*x0(i)+w*(b(i)-A(i,1:i-1)*x(1:i-1)'-A(i,i+1:n)*x0(i+1:n)')/A(i,i);
end
if
max(abs(x-x0))<=tol
fid = fopen('SOR_iter_result.txt', 'wt');
function [x]=Gauss_Seidel_iterative(A,b)
% 用Gauss_Seidel迭代求解线性方程组,矩阵A是方阵
x0=zeros(1,length(b)); % 赋初值
tol=10^(-2); % 给定误差界
N=1000; % 给定最大迭代次数
[n,n]=size(A); % 确定矩阵A的阶
k=1;
% 迭代过程
while k<=N
x(1)=(b(1)-A(1,2:n)*x0(2:n)')/A(1,1);
for i=2:n
x(i)=(b(i)-A(i,1:i-1)*x(1:i-1)'-A(i,i+1:n)*x0(i+1:n)')...
/A(i,i);
end
if
max(abs(x-x0))<=tol
fid = fopen('G_S_iter_result.txt', 'wt');
&