Implemented some form of LM optimization, but it's proper fucked somehow.

This commit is contained in:
2023-01-30 02:07:10 +01:00
parent cb2dad39ec
commit 32fb672bf5
7 changed files with 107 additions and 42 deletions

View File

@@ -12,6 +12,7 @@ import Petzval.Optimization
import Petzval.Types
import Linear
import Numeric.AD.Mode (Scalar, Mode)
import qualified Numeric.LinearAlgebra as L
bk7 = SellemeierMat [ (1.03961212, 6.00069867e-3 )
, (0.231792344, 2.00179144e-2 )
@@ -56,7 +57,7 @@ merit system = result
. rights
. map fst
. map (raytrace baked . createRay Nothing ep angle)
$ spiralPattern 10)
$ hexapolarPattern 6)
$ [0, 7.07, 15]
type Id a = a -> a
@@ -69,13 +70,17 @@ main =
ep = (entrancePupil baked){position=20.4747094540}
fa = 20
in do
print $ L.norm_2 (L.fromList [3.0 , 4.0] :: L.Vector Double)
putStrLn $ show ep
putStrLn $ show $ rearFocalLength $ lensRTM baked
putStrLn $ show $ mconcat (seidel ep fa baked :: [Seidel Double])
defaultMain [
{- defaultMain [
bgroup "merit" [ bench "system1" $ nf merit (system1 :: [Element SellemeierMat Double])
, bench "system2" $ nf merit (system2 :: [Element ConstMat Double])
]
, bgroup "ad" [ bench "system1" $ nf (gradientAt (ix 1.thickness) merit) system1
, bgroup "ad" [ bench "system1" $ nf (gradientAt (ix 1.thickness) merit) system1,
bench "system2" $ nf (gradientAt (ix 1.thickness) merit) system2
]
]
-}