manuelcampagnolo / S2CHANGE

1 stars 0 forks source link

Instabilidade numérica #20

Open danielm09 opened 5 months ago

danielm09 commented 5 months ago

Só para deixar registado que encontrei alguma instabilidade numérica ao executar o código, na secção do tmask, onde há uso de bibliotecas de algebra linear do SciPy.

A instabilidade que causa erro ocorre no modulo robust_fit.py, na linha E = X.dot(numpy.linalg.inv(R[0:X.shape[1],0:X.shape[1]])), embora talvez pareca ter origem já na linha Q, R = scipy.linalg.qr(X).

Alguns valores em float point são diferentes em Win/Linux. Pode haver diferença tb entre Win10 e Win11. Devido a tais instabilidades, não consegui correr na minha máquina pessoal com Win10. Mas corre sem problemas na máquina do ISA (Win11). A diferença entre Win10 e Win11 pode estar ligada ao compilador (Visual C++?).

Ainda não encontrei solução para contornar essa situação. Portanto, fica registado que o código poderá não correr como esperado em algumas máquinas/plataformas.

danielm09 commented 5 months ago

Materiais de referência para estudo do problema:

https://numpy.org/doc/stable/user/basics.types.html#extended-precision

https://github.com/scikit-learn-contrib/py-earth/issues/166

https://stackoverflow.com/questions/3829990/same-code-using-floats-on-two-computers-gives-two-different-results