import sympy as S eta = S.Symbol('eta') xi = S.Symbol('xi') X10 = S.Symbol('X10') X20 = S.Symbol('X20') X50 = S.Symbol('X50') eta = X10 * X20 *(1-X50 )+ X10 * (1-X20) *(X50 )+ (1-X10) * X20 *(X50 ) xi = 10*X10 +20* X20+ 50*X50 num=S.summation(xi*eta,(X10,0,1),(X20,0,1),(X50,0,1)) den=S.summation(eta*eta,(X10,0,1),(X20,0,1),(X50,0,1)) alpha=num/den print alpha import numpy as np from numpy import array x=np.random.randint(0,2,(3,5000)) print (160/3.,np.dot(x[:,x.sum(axis=0)==2].T,array([10,20,50])).mean()) from sympy.abc import a,b eta = X10 * X20 * 30 + X10 * (1-X20) *(10 )+ (1-X10) * X20 *(20 ) h = a*eta + b J=S.summation((xi - h)**2 * S.Rational(1,8),(X10,0,1),(X20,0,1),(X50,0,1)) sol=S.solve( [S.diff(J,a), S.diff(J,b)],(a,b) ) print sol x=np.random.randint(0,2,(3,5000)) # random samples for 3 coins tossed eta=np.dot(x[:2,:].T,array([10,20])) # sum of 10p and 20p print np.dot(x[:,eta==0].T,array([10,20,50])).mean() # E(xi|eta=0) print np.dot(x[:,eta==10].T,array([10,20,50])).mean()# E(xi|eta=10) print np.dot(x[:,eta==20].T,array([10,20,50])).mean()# E(xi|eta=20) print np.dot(x[:,eta==30].T,array([10,20,50])).mean()# E(xi|eta=30) %pylab inline x=S.Symbol('x') c=S.Symbol('c') xi = 2*x**2 eta=S.Piecewise((1,S.And(S.Gt(x,0),S.Lt(x,S.Rational(1,3)))), # 0 < x < 1/3 (2,S.And(S.Gt(x,S.Rational(1,3)),S.Lt(x,S.Rational(2,3)))), # 1/3 < x < 2/3, (0,S.And(S.Gt(x,S.Rational(2,3)),S.Lt(x,1))), ) h = a + b*eta + c*eta**2 J=S.integrate((xi - h)**2 ,(x,0,1)) sol=S.solve( [S.diff(J,a), S.diff(J,b), S.diff(J,c), ], (a,b,c) ) print sol print S.piecewise_fold(h.subs(sol)) x = np.random.rand(1000) f,ax= subplots() ax.hist(2*x**2,bins=array([0,1/3.,2/3.,1])**2*2,normed=True,alpha=.5) ax.vlines([2/27.,14/27.,38/27.],0,ax.get_ylim()[1],linestyles='--') ax.set_xlabel(r'$2 x^2$',fontsize=18); x,a=S.symbols('x,a') xi = 2*x**2 half = S.Rational(1,2) eta_0=S.Piecewise((2, S.And(S.Ge(x,0), S.Lt(x,half))), (0, S.And(S.Ge(x,half), S.Le(x,1)))) eta_1=S.Piecewise((0, S.Lt(x,half)), (x, S.And(S.Ge(x,half),S.Le(x,1)))) v=S.var('b:3') # coefficients for quadratic function of eta h = a*eta_0 + (eta_1**np.arange(len(v))*v).sum() J=S.integrate((xi - h)**2 ,(x,0,1)) sol=S.solve([J.diff(i) for i in v+(a,)],v+(a,)) hsol = h.subs(sol) f=S.lambdify(x,hsol,'numpy') print S.piecewise_fold(h.subs(sol)) t = np.linspace(0,1,51,endpoint=False) fig,ax = subplots() ax.plot(t, 2*t**2,label=r'$\xi=2 x^2$') ax.plot(t,[f(i) for i in t],'-x',label=r'$\mathbb{E}(\xi|\eta)$') ax.plot(t,map(S.lambdify(x,eta_0+eta_1),t),label=r'$\eta(x)$') ax.set_ylim(ymax = 2.3) ax.grid() ax.legend(loc=0); #ax.plot(t,map(S.lambdify(x,eta),t)) x,a=S.symbols('x,a') xi = 2*x**2 eta = 1 - abs(2*x-1) half = S.Rational(1,2) eta=S.Piecewise((1+(2*x-1), S.And(S.Ge(x,0),S.Lt(x,half))), (1-(2*x-1), S.And(S.Ge(x,half),S.Lt(x,1)))) v=S.var('b:3') # assume h is quadratic in eta h = (eta**np.arange(len(v))*v).sum() J=S.integrate((xi - h)**2 ,(x,0,1)) sol=S.solve([J.diff(i) for i in v],v) hsol = h.subs(sol) print S.piecewise_fold(h.subs(sol)) t = np.linspace(0,1,51,endpoint=False) fig,ax = subplots() fig.set_size_inches(5,5) ax.plot(t, 2*t**2,label=r'$\xi=2 x^2$') ax.plot(t,[hsol.subs(x,i) for i in t],'-x',label=r'$\mathbb{E}(\xi|\eta)$') ax.plot(t,map(S.lambdify(x,eta),t),label=r'$\eta(x)$') ax.legend(loc=0) ax.grid() x,a=S.symbols('x,a') half = S.Rational(1,2) xi = 2*x**2 eta=S.Piecewise((2*x, S.And(S.Ge(x,0),S.Lt(x,half))), ((2*x-1),S.Ge(x,half)), ) v=S.var('b:3') h = (eta**np.arange(len(v))*v).sum() J=S.integrate((xi - h)**2 ,(x,0,1)) sol=S.solve([J.diff(i) for i in v],v) hsol = h.subs(sol) print S.piecewise_fold(h.subs(sol)) t = np.linspace(0,1,51,endpoint=False) fig,ax = subplots() fig.set_size_inches(5,5) ax.plot(t, 2*t**2,label=r'$\xi=2 x^2$') ax.plot(t,[hsol.subs(x,i) for i in t],'-x',label=r'$\mathbb{E}(\xi|\eta)$') ax.plot(t,map(S.lambdify(x,eta),t),label=r'$\eta(x)$') ax.legend(loc=0) ax.grid() xs = np.random.rand(100) print np.mean([(2*i**2-hsol.subs(x,i))**2 for i in xs]) print S.integrate((2*x**2-hsol)**2,(x,0,1)).evalf()