(* Losowy generator wzorów funkcji *)

Import["https://raw.githubusercontent.com/VA00/SymbolicRegressionPackage/master/SymbolicRegression.m"];

wzor = ZadanieNOF[]

(* Wzór funkcji, próby uproszczenia i przekształcenia *)

wzor=Cos[Cos[x]+Sin[x]] Sin[Cos[x]+Sin[x]]

wzor//FullSimplify

TrigFactor[Cos[x]+Sin[x]]

(* Definicja funkcji zadanej wzorem *)

F=Function[x,Evaluate@wzor]

(* Z braku pomysłu pierwszy z brzegu przedział w którym rysujemy funkcję; do skorygowania później*)

xMAX=12

(* Sprawdzenie dziedziny, True oznacza cały zbiór liczb rzeczywistych Reals *)

dziedzina=FunctionDomain[wzor,x]

(* Poszukiwania pkt. osobliwych, x oznacza że ich nie znaleziono *)

punktyOsobliwe=x/.FindInstance[!dziedzina&&Abs[x]<xMAX,x,Reals,12]

(* Pierwsza próba narysowania wykresu *)

Plot[F[x],{x,-xMAX,xMAX},Exclusions->punktyOsobliwe]

(*Spr. różnych własności *)

Check[FunctionSurjective[wzor,x],fail]

FunctionBijective[wzor,x]

FunctionInjective[wzor,x]

FunctionSign[wzor,x]

(* Zbiór wartości *)

FunctionRange[wzor,x,y]//Simplify

(*Okres funkcji*)

T=FunctionPeriod[wzor,x]

xMAX=T

Plot[F[x],{x,-xMAX,xMAX}]

(*Wykres zdaje się wykazywać pewne symetrie względem +Pi/4 i -Pi/4, co okaże się później *)

Plot[F[x+Pi/4],{x,-T,T}]

Plot[F[x-Pi/4],{x,-T,T}]

(* Symetrie potwierdzają się *)

FullSimplify[F[x-Pi/4]==-F[-x-Pi/4]]

FullSimplify[F[x+Pi/4]==F[-x+Pi/4]]

(*Szukamy miejsc zerowych *)

FindInstance[F[x]==0&&-4<x<6,x,4]//FullSimplify

miejscaZerowe=x/.%

pktZerowe={miejscaZerowe,F/@miejscaZerowe}//Transpose//FullSimplify

(* Druga wersja wykresu, zaznaczony zakres i m. zerowe *)

Plot[F[x],{x,-xMAX,xMAX},PlotRange->{-3/4,3/4},Epilog->Point[pktZerowe],GridLines->{None,{-1/2,1/2}}]

(* Ekstrema i pkt. przegięcia *)

pochodna1=D[wzor,x]//FullSimplify

Solve[pochodna1==0&&0<x<T,x]//FullSimplify

extrema=x/.%

extremaWartosci = F/@extrema//Simplify

pktExtrema=Transpose[{extrema,extremaWartosci}]//N

pktZerowe//N

Options[Point]

Plot[F[x],{x,0,xMAX},PlotRange->{-3/4,3/4},Epilog->{Point[pktExtrema,VertexColors->{Red,Red,Red,Red,Red}],Point[pktZerowe]},GridLines->{None,{-1/2,1/2}}]

pochodna2=D[wzor,{x,2}]//FullSimplify

Solve[pochodna2==0&&0<x<T,x]//FullSimplify

pktPrzegiecia=x/.%//NumericalSort

pktPrzegieciaWart = F/@pktPrzegiecia

pktPrzegieciaSeg=Transpose[{pktPrzegiecia,pktPrzegieciaWart}]//N

(*Ponieważ okazało się, iż niektóre ekstrema i m. zerowe są wielokrotnościami Pi/4, zmieniam oznaczenia na osiach*)

ticsX=Table[x,{x,0,T,Pi/4}]

ticsY=Table[y,{y,-1/2,1/2,1/4}]

(* Finalna postać wykresu *)

w0=Plot[F[x],{x,0,xMAX},PlotRange->{-3/4,3/4},GridLines->{None,{-1/2,1/2}},GridLinesStyle->Directive[DotDashed, Black,Thin],Ticks->{ticsX,ticsY}]

w1=ListPlot[Legended[pktZerowe,"Miesca zerowe"],PlotStyle->Black]

w2=ListPlot[Legended[pktExtrema,"Ekstrema lokalne"],PlotStyle->Red]

w3=ListPlot[Legended[pktPrzegieciaSeg,"Pkt. przegiecia"],PlotMarkers->"X"]

(* Wynik końcowy *)

Show[w0,w1,w2,w3,AspectRatio->1/Pi,ImageSize->600,Epilog->{Text["Parzysta\nwzględem\nx=π/4",{Pi/4,-1/2},{1,-1}],{Dotted,Line[{{Pi/4,-1},{Pi/4,1}}]},Text["Nieparzysta\nwzględem\nx=7π/4",{7Pi/4,-1/2},{-1,-1}],{Dotted,Line[{{7Pi/4,-1},{7Pi/4,1}}]},{Arrowheads[{-0.02,0.02}],Arrow[{{0,-0.7},{T,-0.7}}]},Text["Okres T="<>ToString[T],{T/2,-0.7},{0,-1}]},
PlotLabel->wzor]