Skip to content
Snippets Groups Projects
Commit 11799234 authored by mehtank's avatar mehtank
Browse files

dunno.

parent ee9f4d8e
Branches
No related merge requests found
...@@ -37,11 +37,15 @@ def linfty(re, n=25, tmax=100, dt=0.1, timeplot=False): ...@@ -37,11 +37,15 @@ def linfty(re, n=25, tmax=100, dt=0.1, timeplot=False):
def idmgo(t, a, b, s, v, fmt=None): def idmgo(t, a, b, s, v, fmt=None):
idm = IDMLin(t=t, a=a, b=b, s0=s) idm = IDMLin(t=t, a=a, b=b, s0=s)
res = arange(100)/100. res = arange(100)/100.
idm.go(v, res) mr = ones(size(res))
for i, re in enumerate(res):
idm.go(v, re)
mr[i] = idm.maxresponse()
if fmt is None: if fmt is None:
return res, idm.os() return res, mr
else: else:
return res, idm.os(), fmt return res, mr, fmt
def sweep(fn, rngs, axis=None, separate=True, logx=False): def sweep(fn, rngs, axis=None, separate=True, logx=False):
if logx: if logx:
...@@ -77,20 +81,21 @@ if __name__ == "__main__": ...@@ -77,20 +81,21 @@ if __name__ == "__main__":
### What happens when you vary a? ### What happens when you vary a?
### ( enhance ) ### ( enhance )
avals = linspace(0.5, 0.7, 20) avals = linspace(0.6, 1.5, 10)
bvals = linspace(0.6, 1.5, 10)
dots = ["-"] * len(avals) dots = ["-"] * len(avals)
arng = {"name": "a", "color": "", "dots": dots, "default": 1.0, "values": avals } arng = {"name": "a", "color": "", "dots": dots, "default": 0.5, "values": avals }
trng = {"name": "T", "default": 1.5} trng = {"name": "T", "default": 1.2}
brng = {"name": "b", "default": 3.0} brng = {"name": "b", "color": "", "dots": dots, "default": 0.5, "values": bvals }
srng = {"name": "s_0", "default": 2.0} srng = {"name": "s_0", "default": 1.5}
vrng = {"name": "v_0", "default": 30.} vrng = {"name": "v_0", "default": 16.1}
rngs = [trng, arng, brng, srng, vrng] rngs = [trng, arng, brng, srng, vrng]
sweep(idmgo, rngs, axis=[0,0.1,-.05,.45]) sweep(idmgo, rngs)#, axis=[0,0.1,-.05,.45])
go = linfty(0.5, n=50, tmax=500) # go = linfty(0.5, n=50, tmax=500)
sweep(go, rngs) # sweep(go, rngs)
''' '''
### What happens when you vary IDM parameters? ### What happens when you vary IDM parameters?
......
...@@ -5,11 +5,12 @@ from scipy.optimize import fmin ...@@ -5,11 +5,12 @@ from scipy.optimize import fmin
from idmlin import IDMLin from idmlin import IDMLin
def maxStringResponse(idm, n, tau = 0): def maxStringResponse(fn, idm, n, **kwargs):
gammainv = humanstring(idm, n, tau) gammainv = fn(idm, n, **kwargs)
wmax = fmin(gammainv, 10) wmax = fmin(gammainv, 10)
gmax = -gammainv(wmax)
# print "wmax =", wmax # print "wmax =", wmax
return -gammainv(wmax) return gmax < 1e-2 and -1 or gmax
def human(idm, tau=0): def human(idm, tau=0):
f, g, h = idm.f, idm.g, idm.h f, g, h = idm.f, idm.g, idm.h
...@@ -21,30 +22,30 @@ def human(idm, tau=0): ...@@ -21,30 +22,30 @@ def human(idm, tau=0):
return num/den return num/den
return gamma return gamma
def humanstring(idm, n, tau = 0): def humanstring(idm, n, tau=0):
gamma = human(idm, tau) gamma = human(idm, tau)
def dbgammainv(w): def dbgammainv(w):
db = 20 * log10(absolute(gamma(w))) db = 20 * log10(absolute(gamma(w)))
return -n*db return -n*db
return dbgammainv return dbgammainv
def followedrobot(idm):#, ff, fb, gf, gb, hr, taur=0, tau=0): def followedrobotstring(idm, n, tau=0, alpha=0.5):#, ff, fb, gf, gb, hr, taur=0, tau=0):
tau = 0
taur = 0 taur = 0
ff = idm.f/2 fb = idm.f*alpha
fb = idm.f/2 ff = idm.f*(1-alpha)
gf = idm.g/2 gb = idm.g*alpha
gb = idm.g/2 gf = idm.g*(1-alpha)
hr = idm.h hr = idm.h
gamma = human(idm, tau) gamma = human(idm, tau)
stringinv = humanstring(idm, n, tau)
def dbgammainv(w): def dbgammainv(w):
s = w * 1j s = w * 1j
num = ff + gf * s num = ff + gf * s
den = ff + fb + (gf + gb + hr) * s + exp(taur * s) * s * s - (fb + gb * s) * gamma(w) den = ff + fb + (gf + gb + hr) * s + exp(taur * s) * s * s - (fb + gb * s) * gamma(w)
dbnum = 20 * log10(absolute(num)) dbnum = 20 * log10(absolute(num))
dbden = 20 * log10(absolute(den)) dbden = 20 * log10(absolute(den))
return (dbden-dbnum) return (dbden-dbnum)+stringinv(w)
return dbgammainv return dbgammainv
def teststability(idm, N): def teststability(idm, N):
...@@ -61,49 +62,70 @@ idm = IDMLin(t=t, a=a, b=b, s0=s) ...@@ -61,49 +62,70 @@ idm = IDMLin(t=t, a=a, b=b, s0=s)
nrange = logspace(1, 2.5, 20) nrange = logspace(1, 2.5, 20)
rerange = logspace(-2, -0.2, 20) rerange = logspace(-2, -0.2, 20)
rerange = linspace(0.1, 0.4, 20)
mgrid = zeros((len(nrange), len(rerange))) mgrid_h = zeros((len(nrange), len(rerange)))
mgrid2 = zeros((len(nrange), len(rerange))) mgrid_r25 = zeros((len(nrange), len(rerange)))
mgrid_r50 = zeros((len(nrange), len(rerange)))
mgrid_r75 = zeros((len(nrange), len(rerange)))
for i, n in enumerate(nrange): for i, n in enumerate(nrange):
for j, re in enumerate(rerange): for j, re in enumerate(rerange):
idm.go(v, re) idm.go(v, re)
mgrid[i,j] = teststability(idm, n) mgrid_h[i,j] = maxStringResponse(humanstring, idm, n)
mgrid2[i,j] = maxStringResponse(idm, n) mgrid_r25[i,j] = maxStringResponse(followedrobotstring, idm, n, alpha=0.25)
mgrid_r50[i,j] = maxStringResponse(followedrobotstring, idm, n, alpha=0.5)
mgrid_r75[i,j] = maxStringResponse(followedrobotstring, idm, n, alpha=0.75)
fig, axarr = plt.subplots(1,3, sharex=True, sharey=True) fig, axarr = plt.subplots(2,3, sharex=True, sharey=True)
im = axarr[2].imshow(mgrid, cmap=plt.cm.Reds, im = axarr[0,0].imshow(mgrid_h, cmap=plt.cm.bwr,
interpolation='none', interpolation='none',
aspect='auto', aspect='auto',
vmin=0, vmax=1, vmin=-1, vmax=1,
) )
im = axarr[1].imshow(mgrid2, cmap=plt.cm.Reds, im = axarr[0,1].imshow(mgrid_r50, cmap=plt.cm.bwr,
interpolation='none', interpolation='none',
aspect='auto', aspect='auto',
vmin=0, vmax=1, vmin=-1, vmax=1,
) )
im = axarr[0].imshow((mgrid2-mgrid)*100, cmap=plt.cm.Reds, im = axarr[0,2].imshow(mgrid_r50-mgrid_h, cmap=plt.cm.bwr,
interpolation='none', interpolation='none',
aspect='auto', aspect='auto',
vmin=0, vmax=1, vmin=-1, vmax=1,
)
im = axarr[1,0].imshow(mgrid_r25, cmap=plt.cm.bwr,
interpolation='none',
aspect='auto',
vmin=-1, vmax=1,
)
im = axarr[1,2].imshow(mgrid_r75, cmap=plt.cm.bwr,
interpolation='none',
aspect='auto',
vmin=-1, vmax=1,
) )
axarr[0].set_yticks(range(len(nrange))) axarr[0,0].set_title("Human cars only")
axarr[1].set_yticks(range(len(nrange))) axarr[0,1].set_title("Human cars followed by BCM50 robot")
axarr[1].set_xticks(range(len(rerange))) axarr[0,2].set_title("Difference")
axarr[1,0].set_title("Human cars followed by BCM25 robot")
axarr[1,2].set_title("Human cars followed by BCM75 robot")
axarr[0].set_yticklabels(nrange) axarr[0,0].set_yticks(range(0,len(nrange),4))
axarr[1].set_yticklabels(nrange) axarr[0,0].set_xticks(range(0,len(rerange),4))
axarr[1].set_xticklabels(around(rerange, 2))
axarr[0].set_ylabel("N") axarr[0,0].set_yticklabels(around(nrange[::4], 0))
axarr[1].set_ylabel("N") axarr[0,0].set_xticklabels(around(rerange, 2)[::4])
axarr[1].set_xlabel("R_e")
axarr[0,0].set_ylabel("N")
axarr[0,0].set_xlabel("R_e")
fig.subplots_adjust(right=0.8) fig.subplots_adjust(right=0.8)
cbar_ax = fig.add_axes([0.85, 0.15, 0.05, 0.7]) cbar_ax = fig.add_axes([0.85, 0.15, 0.05, 0.7])
fig.colorbar(im, cax=cbar_ax) fig.colorbar(im, cax=cbar_ax)
print nrange
print rerange
plt.show() plt.show()
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment