Rn⟨y,x⟩≜Re(yHx)
Uma coisa que você deve ter cuidado ao implementar o CG (ou abordagens iterativas semelhantes) com operadores lineares gerais é implementar corretamente o acessório do seu operador linear. Ou seja, as pessoas geralmente acertam , mas cometem um erro ao implementar .z = F ∗ ( y )y=F(x)z=F∗(y)
Eu recomendo implementar um teste simples que aproveite a seguinte identidade: para qualquer e conformidade ,
Portanto, o que você faz é gerar valores aleatórios de e , executá-los através de suas operações avançadas e adjuntas, respectivamente, e calcular os dois produtos internos acima. Verifique se eles correspondem à precisão razoável e repita algumas vezes.y ⟨ y , F ( x ) ⟩ = ⟨ F * ( y ) , x ⟩ . x yxy
⟨y,F(x)⟩=⟨F∗(y),x⟩.
xy
EDIT: o que você faz se o seu operador linear é simétrico? Bem, você também precisa verificar essa simetria. Portanto, use o mesmo teste, apenas observando que --- aplica a mesma operação a e . Obviamente, o OP possui um operador assimétrico e um simétrico para lidar com ... x yF=F∗xy