病态革兰氏基质组装

计算科学 有限元 条件数
2021-12-12 17:26:25

我试图在有限维多项式空间相对于标准基向量的最佳近似值内积exP4B={1,x,x2,x3,x4}

(f,g)=01f(x)g(x)(x(1x))12dx

其中那么,的最佳近似满足正交性: w=j=04ajϕjϕj=xjwex

(exw,ϕi)=0
对于因此, i=0,...,4

j=04aj(ϕj,ϕi)=(ex,ϕi)
对于. 这会生成我要解决的线性方程组。不幸的是,积分有点难以手动评估。因此,我尝试使用三点高斯求积法则来近似积分并求解系统。不幸的是,我一直得到一个几乎单一的系统。当我观察到这一点时,我尝试使用更高阶的求积法则,但矩阵仍然是病态的。 i=0,...,4.

我一遍又一遍地查看我的代码,似乎在实现中找不到任何错误。我很想相信这些内积根本无法用高斯求积法则很好地评估。这对 Gram 矩阵很常见吗?我应该使用不同的求积法则吗?还是我的代码中的错误?

我在下面提供了组装此矩阵系统的 matlab 代码以供参考。任何帮助将不胜感激。

n=5;
%Quadrature points on [-1,1]
z1=-sqrt(3/5);
z2=0;
z3=sqrt(3/5);

%Quadrature points on [0,1]
x1=z1/2+1/2;
x2=z2/2+1/2;
x3=z3/2+1/2;

A=zeros(n,n);
b=zeros(n,1);

%assemble gramm matrix
for i=1:n
    for j=1:n
        F1=x1^(i-1+j-1)/sqrt(x1*(1-x1));
        F2=x2^(i-1+j-1)/sqrt(x2*(1-x2));
        F3=x3^(i-1+j-1)/sqrt(x3*(1-x3));
        A(i,j)=(1/2)*((5/9)*F1+(8/9)*F2+(5/9)*F3);
    end
    G1=x1^(i-1)*exp(x1)/sqrt(x1*(1-x1));
    G2=x2^(i-1)*exp(x2)/sqrt(x2*(1-x2));
    G3=x3^(i-1)*exp(x3)/sqrt(x3*(1-x3));
    b(i)=(1/2)*((5/9)*G1+(8/9)*G2+(5/9)*G3);
end
2个回答

初步观察

  • 如果你有一个大小为,你必须至少有正交点。您可以通过将内积写成来看到这一点,其中是对角权重矩阵,是基础评估矩阵。如果正交点的行数少于,因此{ϕi(x)}nn(u,v)=uTBTWBvWBij=ϕj(xi)nBnrank(BTWB)<n

  • 您的权重函数无法使用高斯积分精确积分,具体取决于顺序和所需的精度,可能会有不可接受的误差。您可以找到有关各种特定函数形式的特殊求积的论文。请注意,右侧积分也存在正交误差。幸运的是,这些函数是平滑的,并且权重有效地要求端点附近有更多的点,所以高斯正交并不是那么糟糕。有关通用正交的更多信息,请参见Trefethen (2008) Is Gauss Quadrature Better Than Clenshaw-Curtis

  • 表示是编写代码的更方便的方式。A=BTWB

  • 方便时使用矩阵和向量表示法被认为是良好的 Matlab 风格。它大大压缩和简化了代码。

重构和工作代码

n = 5;
qpoints = 10;

% Quadrature points on [-1,1]; see Golub & Welsch (1969) and Trefethen (2008)
beta = .5 ./sqrt(1-(2*(1:qpoints-1)).^(-2)); % 3-term recurrence coefficients
T = diag(beta,1) + diag(beta,-1);            % Jacobi matrix
[V,D] = eig(T);                              % eigenvalue decomposition
[x,i] = sort(diag(D));                       % Gauss-Legendre points
w = 2*V'(i,1).^2;                            % weights
% Map quadrature to interval [0,1]
x = 0.5 + 0.5*x; w = 0.5*w;

% assemble Gram matrix
B = fliplr(vander(x,n));         % basis evaluation matrix
W = diag(w ./ sqrt(x.*(1-x)));   % diagonal quadrature weight matrix
A = B'*W*B;                      % Gram matrix
b = B'*W*exp(x);                 % exponential integrated against test functions

taylor = 1./factorial(0:n-1)';
ceoffs = [A \ b, taylor]

进一步的观察

  • 众所周知,单项式基础是病态的。如果您想使用更高次多项式,您应该选择条件良好的基础,例如 (a) Legendre/Chebyshev 多项式,(b) 像 Gauss-Lobatto 这样的良好点集上的拉格朗日插值,或 (c) 牛顿形式(除差)与良好点集相关的多项式。其中,(b) 是 PDE 计算中最流行的。
  • 计算的系数与指数中的前导项不匹配,因为它们在区间最优,而不是仅在的限制中。相反,泰勒多项式仅适用于极限,并且在任何范数的有限区间上都没有界限。L2[0,1]x0x0
  • 您可以针对诸如之类的非光滑范数生成最优多项式。中的近似,有时称为“切比雪夫近似”,可为您提供整个区间内的最佳逐点误差界限。这篇博文有一些不错的数字、算法介绍以及文献的进一步链接。L(Ω)L

众所周知,幂的 gram 矩阵是非常病态的。如果您根据切比雪夫多项式对 [-1,1] 中的积分进行扩展,然后将积分转换到该范围,则效果会更好。