fitting algorithm