Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def delta(pab,xt,yt):
- a = pab[0];
- b = pab[1];
- yc = [0 for i in range(len(xt))]
- for i in range(len(xt) - 1):
- yc[i] = a * xt[i] + b
- e = list(abs(yt[i] - yc[i]) for i in range(len(yt)))
- cr = sum(list(e[i] / yt[i] for i in range(len(yt)))) / len(xt)
- # print cr
- return cr
- def mre(xt, yt):
- ll = len(xt)
- am, aM, bm, bM = adm(xt, yt)
- lb = [am, bm]
- rb = [aM, bM]
- vv =[] ; feas = []
- p = 20
- for i in range(p):
- feas += [[0, 0]]
- for j in range(len(lb)):
- feas[i][j] = (rb[j] - lb[j]) * np.random.uniform() + lb[j]
- count = 0; iters = 200; funp = 0
- for j in range(1, p):
- vv.append(delta(feas[j], xt, yt))
- funi = np.min(vv); ini = np.argmin(vv)
- soli = feas[ini]
- si = 0.5
- flag = 1; count = 0; si = 1
- while count < iters:
- count += 1
- for i in range(len(feas)):
- for j in range(len(feas[i])):
- feas[i][j] = feas[i][j] + si * np.random.randn()
- vec = [0]*p
- for i in range(p):
- feas[i] = max(lb, feas[i])
- feas[i] = min(rb, feas[i])
- vec[i] = delta(feas[i],xt,yt)
- fun = np.min(vec); init = np.argmin(vec)
- sol = feas[init]
- wf, wi = np.max(vec), np.argmax(vec)
- # print wi, len(feas), len(vec)
- wun = feas[wi]
- if wf > funi:
- feas[wi] = soli
- vec[wi] = funi
- if fun < funi:
- soli = sol
- funi = fun
- if count % 1000 == 0:
- print soli, residvar
- a = soli[0]
- b = soli[1]
- return a, b, funi
- q = mre(datab, data)
- print q
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement