XIAN-FEM-2026June/三维matlab代码/matlab 3D一阶基+散射边界条件/extract_mph_Matrice.m

38 lines
1.0 KiB
Matlab

function [K, L] = extract_mph_Matrice(model, solnum)
%选择想要提取的解
str_sol = sprintf('sol%d', solnum);
% 直接从COMSOL提取解
model.sol(str_sol).runAll;
U = mphgetu(model,'solnum',solnum);
% 从COMSOL提取刚度矩阵K, 载荷向量L
mphproc = mphmatrix(model, str_sol, 'out',{'K','L'},'complexfun','on');
% 验证提取的刚度矩阵K, 载荷向量L求出的X与COMSOL求解的U是否一致
tic
X = mphproc.K\mphproc.L;
toc
tol = norm(X-U);
% 检测误差是否符合要求
if tol<1
K = mphproc.K;
L = mphproc.L;
% 提取刚度矩阵K的稀疏矩阵特征
else
% 如果误差过大考虑是否是刚度矩阵K, 载荷向量L有问题
disp("直接提取刚度矩阵, 载荷向量有问题, 考虑他们的消去形式: ")
mphproc = mphmatrix(model, str_sol, 'out', ...
{'Null','ud','Kc','Lc'},'complexfun','on');
K = mphproc.Kc;
L = mphproc.Lc;
Xn = K\L;
Xc = mphproc.ud + mphproc.Null * Xn;
fprintf('消去矩阵求解的误差是%2f\n', norm(Xc-U));
end
end