particle-FF-mlton.sml

fun naive_euler w =
    let val charges = [[(Base 10.0), ((Base 10.0)-w)],
		       [(Base 10.0), (Base 0.0)]]
	val x_initial = [(Base 0.0), (Base 8.0)]
	val xdot_initial = [(Base 0.75), (Base 0.0)]
	val delta_t = (Base 1e~1)
	fun p x = foldl op +
			(Base 0.0)
			(map (fn c => (Base 1.0)/(distance x c)) charges)
	fun loop x xdot =
	    let val xddot = ktimesv (Base ~1.0) (gradient_F p x)
		val x_new = vplus x (ktimesv delta_t xdot)
	    in if (Base 0.0)<(List.nth (x_new, 1))
	       then loop x_new (vplus xdot (ktimesv delta_t xddot))
	       else let val delta_t_f = ((Base 0.0)-(List.nth (x, 1)))/
					(List.nth (xdot, 1))
			val x_t_f = vplus x (ktimesv delta_t_f xdot)
		    in sqr (List.nth (x_t_f, 0)) end end
    in loop x_initial xdot_initial end

val _ = write_real let val w0 = (Base 0.0)
		       val [w_star] = multivariate_argmin_F
					  (fn [w] => naive_euler w)
					  [w0]
		   in w_star end

Generated by GNU enscript 1.6.4.