给方程编号_二维泊松方程的有限元程序实现

本文详述了一个二维泊松方程的有限元程序实现过程,包括网格生成、组装刚度矩阵和右端向量、处理边界条件以及结果展示。文章通过两种方式解释了有限元方法的组装过程,强调了'act local'的原则,并指出虽然实现方式不同,但最终计算结果一致。
摘要由CSDN通过智能技术生成

主要部分

麻雀虽小,五脏俱全

从程序的主函数入口开始看:

  • 网格生成,这里调用了 matlab 的 pde 工具箱中的函数,设置了网格尺寸参数
  • 定义了 pde,这里主要包括泊松方程的系数函数和右端项函数
  • 循环是不断的在加密网格,然后在每一层网格上进行计算
  • 组装刚度矩阵
  • 组装右端向量
  • 边界条件处理
  • 求解线性方程组
  • 画图

上述过程在任何一个有限元程序中都会有体现 麻雀虽小五脏俱全.

[p, e, t] = initmesh('squareg', 'hmax', 0.25);
coef = @(x, y) 1;
righthand = @(x, y) 2;

for i = 1: 5
    [p,e,t] = refinemesh('squareg',p,e,t);
    pdemesh(p, e, t);
    boundarynodes = unique([e(1, :) e(2, :)]);
    boundaryedges = boundarynodes;
    A = assemble_matrix_2D2(coef, p, t);
    b = assemble_vector_2D(righthand, p, t);
    [A, b] = treat_boundary_condition(A, b, p, boundarynodes, e);
    u = A  b;
    trisurf(t(1: 3, :)', p(1, :)', p(2, :)', u)
end

组装刚度矩阵

在下面给出了两种实现方式(看第二种更加能理解有限元组装的过程),但
有限元的组装只需要记住一个准则:act local, 就是在一个单元上思考程序的实施,所以会涉及

  • 循环每个单元,每个单元上完成了组装就完成了所有
  • local2global 单元到全局的过程(单元刚度矩阵到总刚度矩阵的组装)
  • 雅克比行列式的计算,因为计算单刚的过程涉及到在单元上积分的问题
function A = assemble_matrix_2D(coef, p, t)
%获取单元个数和节点个数
number_of_elements = length(t);
number_of_nodes = length(p);
%初始化总刚度矩阵
A = zeros(number_of_nodes, number_of_nodes);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值