clear all;
disp('Rozwiazanie')
syms x y Dy D2y 
%F=x^2+y^2+Dy^2;
% Zadanie 1 
F=Dy^2+4*y^2-2*y;
%F=Dy^2+y*x^2;
%F=Dy^2+x^2;
%Zadanie 2 F=Dy^2-2*x*y;
%Zadanie 1 
x1=0;y1=0;x2=1;y2=0;
%Zadanie 2 x1=0;y1=1;x2=2;y2=5;

disp('Dane wejsciowe:')
fprintf(['Funkcja podcalkowa '...
  'F(x,y,y'')=%s\n'],char(F))
fprintf('Warunki z lewej strony: y(%d)=%d\n',x1,y1)
fprintf('warunki z prawej strony: y(%d)=%d\n',x2,y2)
dFdy=diff(F,y); %  Fy
dFdy1=diff(F,Dy); %  Fy'
fprintf('Fy=%s\n',char(dFdy))
fprintf('Fy''=%s\n',char(dFdy1))
d_dFdy1_dx=diff(dFdy1,x); % Fxy'x
d_dFdy1_dy=diff(dFdy1,y); % Fyy'
d_dFdy1_dy1=diff(dFdy1,Dy); % Fy'y'-warunek Legendre a
dFy1dx=d_dFdy1_dx+d_dFdy1_dy*Dy+d_dFdy1_dy1*D2y;
fprintf('dFy''/dx=%s\n',char(dFy1dx))
%Euler=simple(dFdy-dFy1dx); % rowniania Eulera
Euler=(dFdy-dFy1dx); % rowniania Eulera

deqEuler=[char(Euler) '=0']; % =0
fprintf('Rownianie Eulera:\n%s\n',deqEuler)
Sol=dsolve(deqEuler,'x'); % 
if length(Sol)~=1 % 
  error('Brak rozwiazan lub wiecej niz jedno rozwiazanie!');
else
  disp('Rozwiazanie ogolne rowniania Eulera :')
  fprintf('y(x)=%s\n',char(Sol))
end
%
SolLeft=subs(Sol,x,x1); %  x1
SolRight=subs(Sol,x,x2); %  x2
EqLeft=[char(SolLeft) '==' char(sym(y1))]; % =y1
EqRight=[char(SolRight) '==' char(sym(y2))]; % =y2
disp('Rowniania dla warunkow granicznych:')
fprintf('%s\n',EqLeft,EqRight)
%Con=solve(EqLeft,EqRight,'C1,C2');
syms C1 C2
Con=solve(SolLeft,SolRight,C1,C2)

C1=Con.C1; 
C2=Con.C2; 
Sol21=vpa(eval(Sol),14); 
disp('Rownanie ekstremali:')
fprintf('y(x)=%s\n',char(Sol21))
Fextr=subs(F,{y,Dy},{Sol21,diff(Sol21,x)});
Jextr=eval(int(Fextr,x,x1,x2))
ylin=(x-x1)*(y2-y1)/(x2-x1)+y1;
Flin=subs(F,{y,Dy},{ylin,diff(ylin,x)});
Jlin=eval(int(Flin,x,x1,x2))
xpl=linspace(x1,x2); 
y21=subs(Sol21,x,xpl); 
figure 
plot(xpl,y21,'-r') 
set(get(gcf,'CurrentAxes'),...
  'FontName','Times New Roman Cyr','FontSize',12)
title('\bfPrzyklad') 
xlabel('\itx') 
ylabel('\ity\rm(\itx\rm)') 

