def exercise(args): verbose = "--verbose" in args if (not verbose): out = StringIO() else: out = sys.stdout hkl = (1, 2, 3) d_star_sq = 1e-3 for n_params in xrange(2, 5): for i_trial in xrange(5): params = [] for i in xrange(n_params): params.append( parameters(xyz=[random.random() for i in xrange(3)], u=random.random() * 0.1, w=random.random(), fp=(random.random() - 0.5) * 2, fdp=(random.random() - 0.5) * 2)) sf = structure_factor(hkl=hkl, d_star_sq=d_star_sq, params=params) obs = abs(sf.f()) compare_analytical_and_finite(obs=obs, hkl=hkl, d_star_sq=d_star_sq, params=params, out=out) compare_analytical_and_finite(obs=obs * (random.random() + 0.5), hkl=hkl, d_star_sq=d_star_sq, params=params, out=out) print "OK"
def exercise(args): verbose = "--verbose" in args if (not verbose): out = StringIO() else: out = sys.stdout hkl = (1,2,3) d_star_sq = 1e-3 for n_params in xrange(2,5): for i_trial in xrange(5): params = [] for i in xrange(n_params): params.append(parameters( xyz=[random.random() for i in xrange(3)], u=random.random()*0.1, w=random.random(), fp=(random.random()-0.5)*2, fdp=(random.random()-0.5)*2)) sf = structure_factor(hkl=hkl, d_star_sq=d_star_sq, params=params) obs = abs(sf.f()) compare_analytical_and_finite( obs=obs, hkl=hkl, d_star_sq=d_star_sq, params=params, out=out) compare_analytical_and_finite( obs=obs*(random.random()+0.5), hkl=hkl, d_star_sq=d_star_sq, params=params, out=out) print "OK"
def d2_target_d_params_finite(obs, hkl, d_star_sq, params, eps=1.e-8): result = [] params_eps = copy.deepcopy(params) for i_param in xrange(len(params)): for ix in xrange(7): gs = [] for signed_eps in [eps, -eps]: pi_eps = params[i_param].as_list() pi_eps[ix] += signed_eps params_eps[i_param] = parameters(pi_eps[:3], *pi_eps[3:]) sf = structure_factor(hkl=hkl, d_star_sq=d_star_sq, params=params_eps) target = least_squares(obs=obs, calc=sf.f()) dp = sf.d_target_d_params(target=target) gs.append(pack_gradients(dp)) result.append([(gp-gm)/(2*eps) for gp,gm in zip(gs[0],gs[1])]) params_eps[i_param] = params[i_param] return result
def d_target_d_params_finite(obs, hkl, d_star_sq, params, eps=1.e-8): result = [] params_eps = copy.deepcopy(params) for i_param in xrange(len(params)): dx = [] for ix in xrange(7): ts = [] for signed_eps in [eps, -eps]: pi_eps = params[i_param].as_list() pi_eps[ix] += signed_eps params_eps[i_param] = parameters(pi_eps[:3], *pi_eps[3:]) sf = structure_factor(hkl=hkl, d_star_sq=d_star_sq, params=params_eps) target = least_squares(obs=obs, calc=sf.f()) ts.append(target.f()) dx.append((ts[0]-ts[1])/(2*eps)) result.append(gradients(dx[:3], *dx[3:])) params_eps[i_param] = params[i_param] return result
def d2_target_d_params_finite(obs, hkl, d_star_sq, params, eps=1.e-8): result = [] params_eps = copy.deepcopy(params) for i_param in xrange(len(params)): for ix in xrange(7): gs = [] for signed_eps in [eps, -eps]: pi_eps = params[i_param].as_list() pi_eps[ix] += signed_eps params_eps[i_param] = parameters(pi_eps[:3], *pi_eps[3:]) sf = structure_factor(hkl=hkl, d_star_sq=d_star_sq, params=params_eps) target = least_squares(obs=obs, calc=sf.f()) dp = sf.d_target_d_params(target=target) gs.append(pack_gradients(dp)) result.append([(gp - gm) / (2 * eps) for gp, gm in zip(gs[0], gs[1])]) params_eps[i_param] = params[i_param] return result
def d_target_d_params_finite(obs, hkl, d_star_sq, params, eps=1.e-8): result = [] params_eps = copy.deepcopy(params) for i_param in xrange(len(params)): dx = [] for ix in xrange(7): ts = [] for signed_eps in [eps, -eps]: pi_eps = params[i_param].as_list() pi_eps[ix] += signed_eps params_eps[i_param] = parameters(pi_eps[:3], *pi_eps[3:]) sf = structure_factor(hkl=hkl, d_star_sq=d_star_sq, params=params_eps) target = least_squares(obs=obs, calc=sf.f()) ts.append(target.f()) dx.append((ts[0] - ts[1]) / (2 * eps)) result.append(gradients(dx[:3], *dx[3:])) params_eps[i_param] = params[i_param] return result