Naloge iz polinomov

Kako izberemo naključno število (eksperimenti)

V Mathematici izberemo naključno število takole:

RandomInteger[{-5,5}]

Več števil naenkrat:

RandomInteger[{-5,5},10]

Kako izberemo ulomek?

stevec=RandomInteger[{-8,8}]
imenovalec=RandomInteger[{1,4}]
stevec/imenovalec

Kaj se zgodi, če delimo dva seznama?

{a,b,c}/{x,y,z}

{a,b,c}/{x,y}

Z ukazom Outer lahko naredimo vse kombinacije argumentov za dano funkcijo:

Outer[f,{a,b,c},{x,y}]

Z ukazom Flatten lahko seznam seznamov “sploščimo”:

Flatten[Outer[f,{a,b,c},{x,y}],1]

Flatten[Outer[Divide,{a,b,c},{x,y,z,w}],1]

Seznam ulomkov:

ulomki[n_]:=RandomInteger[{-8,8},n]/RandomInteger[{1,5},n]

ulomki[10]

Če imamo seznam ničel, kako dobimo polinom s temi ničlami:

x-{a,b,c}

Prav nam pride ukaz Apply:

Apply[f,{a,b,c}]

Times[4,5,10]

Apply[Times,{x,x,x,y,z,y,y}]

Apply[Times,x-{a,b,c}]

Expand[(x-a)(x-b)(x-c)]

Polnom z danim seznamom ničel:

polinom[lst_,x_]:=Expand[Apply[Times,x-lst]]

polinom[{1,2,-3},x]

polinom[{2,2,-3},t]

Tako generiramo seznam polinomov z racionalnimi koeficienti:

Table[polinom[ulomki[3],x],{10}]//ColumnForm

Koeficienti danega polinoma:

CoefficientList[(3/5)-((2 x)/5)-((77 (x^2))/60)+(x^3),x]

Imenovalec ulomka:

Denominator[-77/60]

Denominator[3]

Denominator[{1/2,1/6,3/7}]

Imenovalci koeficeintov polinoma:

Denominator[CoefficientList[(3/5)-((2 x)/5)-((77 (x^2))/60)+(x^3),x]]

LCM[{5,5,60,1}]

LCM[5,5,60,1]

Apply[LCM,{5,5,60,1}]

Kako izberemo iz seznama števil:

RandomChoice[{a,b,c,d,e}]

RandomChoice[{a,b,c,d,e},5]

RandomChoice[{1,1,1,1,2,2,3,3,4,5},10]

Funkcija za generiranje polinomov

Funkcija za naključni polinom stopnje n v spremenljivki x:

dobriImenovalci={1,1,1,1,2,2,3,3,4,5}

ClearAll[ulomki]
ulomki::usage = "seznam n ne preveč grdih ulomkov";
ulomki[n_]:=RandomInteger[{-5,5},n]/RandomChoice[dobriImenovalci,n]

ClearAll[polinom]
polinom::usage="polinom z danim seznamom ničel v dani spremenljivki";
polinom[lst_,x_]:=Expand[Apply[Times,x-lst]]

ClearAll[nakljucniPolinom]
nakljucniPolinom::usage="Naključno izbran polinom stopnje 3 do 5 v dani spremenljivki";
nakljucniPolinom[x_]:=Module[
{n,nicle,p,c},
n=RandomChoice[{3,3,3,4,4,5}]; (* stopnja polinoma *)
nicle=ulomki[n]; (* seznam ničel *)
p=polinom[nicle,x]; (* polinom, trebe je se mnoziti s konstanto *)
c=Apply[LCM,Denominator[CoefficientList[p,x]]];
Return[{Expand[c*p],nicle}]
]

nakljucniPolinom[x]

Table[nakljucniPolinom[x],{10}]//MatrixForm

Coefficient[3x+17x^2+x^6,x,2]

Vodilni koeficient:

Coefficient[6+x+2x^2,x,2]

Kdaj je polinom sprejemljiv:

kandidatiZaNicle[p_,x_]:=
Module[{koeficienti,konstantniClen,vodilniClen},
koeficienti=CoefficientList[p,x];
konstantniClen=First[koeficienti];
vodilniClen=Last[koeficienti];
Union[Flatten[Outer[Divide,Divisors[konstantniClen],Divisors[vodilniClen]]]]
]

kandidatiZaNicle[6+x+2x^2,x]

najvecjiKoeficient[p_,x_]:=Max[CoefficientList[p,x]]

ClearAll[doberPolinom]
doberPolinom[x_][p_]:=
Length[kandidatiZaNicle[p,x]]≤8&&Abs[najvecjiKoeficient[p,x]]≤200

Select[Table[nakljucniPolinom[x],{100}],doberPolinom[x]]//MatrixForm