#Fragment zadanie 3: szukanie punktów na łuku elipsy, w których może być ekstremum 

var('u,v')

f=16*u^2+8*u*v+4*v^2
g=8*u^2+2*v^2-4

fu=diff(f,u) #pochodne czšstkowe f
fv=diff(f,v) 

print 'grad(f)=',[fu,fv]

gu=diff(g,u) #pochodne czšstkowe funkcji więzów
gv=diff(g,v) 

print 'grad(g)=',[gu,gv]
rozwiazanie=solve([g==0,fu*gv-fv*gu==0],u,v)

print  'punkty na elipsie, w których grad(f) i grad(g) sš liniowo zależne', rozwiazanie

#-----------------------------------------------------------------------------------------

#rysunek do zadania 3

punkt1=disk((-1/2,1), 0.02, (0, 2*pi), color='red')
punkt2=disk((1/2,1), 0.02, (0, 2*pi), color='red')

pole_gradientowe=plot_vector_field((fu,fv),(u,-1,1),(v,-0.5,1.5),color='red')

pole_wiezow=plot_vector_field((gu,gv),(u,-1,1),(v,-0.5,1.5),color='blue')

elipsa=implicit_plot(g==0, (u, -1, 1), (v, 0, 1.5))

show(elipsa+pole_wiezow+pole_gradientowe+punkt1+punkt2,figsize=[10,10])