我正在尝试通过无网格方法求解方程。形状函数(及其衍生物)具有紧凑的支持域。因此,在用于数值积分的给定积分单元上,只有少数形状函数具有非零值。同时,对于属于一个单元的每个积分点,非零形函数的个数和索引可能不同。因此,我无法像典型的 FEM 代码那样构建局部刚度矩阵,因为它们的大小是未知的。并且不可能构造一些数组然后使用稀疏命令进行组装。我使用 sparse 命令定义刚度矩阵,如下:
K=sparse(NDOF,NDOF)
然后尝试在计算过程中
for j=1:ngauss
//subroutint to "find v" here
[fi, fix, fiy]=shape(xg,yg,v);
for i=1:length(fi)
sub_K=fiy*fiy(i)+fix*fix(i));
K(v(i),v(:))=K(v(i),v(:))+sparse(weight(j)*areaj*sub_K);
end
end
其中v
是非零形状函数的索引数组。但是这种使用稀疏命令的速度太慢了。有什么建议或任何其他方式吗?