625
A Maple egy fejlett matematikai problémamegoldó és programozói szoftver.
-
xDJCx #545
Igen, ezt én is tapasztaltam.
Valószínű a 2D-s beviteli mód hibája. Ez még nem elég kiforrott a Maple-ben. Biztosabb általában a karakteres bevitelt használni (Maple input).
Mindenesetre a solve-val és isolate-tel u-ra nyert eredmények a Maple szerint - egyszerűsítés után - azonosak, Továbbá behelyettesítve őket F kifejezésébe 0-át kapunk.
Q1:=solve(F,u);
Q2:=rhs(isolate(F,u));
verify(Q1,Q2,simplify);# azonosak-e?
simplify(eval(F,u=Q1),symbolic);# F-be helyettesítése u-nak.
simplify(eval(F,u=Q2),symbolic);# F-be helyettesítése u-nak.
-
Kele85 #544 Igen, ezzel kapok valami eredményt. Csak azt nem tudom, hogy jó-e. Viszont van egy másik érdekesség is. Ha megfogom, és kimásolom az F-et egy teljesen üres maple dokumentumba, akkor ott már működik a solve parancs.
Erről van szó:
> F := sin(gamma[b])*sin(theta)*(-(1/2)*f^2*omega*`ϕ`/(Pi^2*sqrt(4*R^2-f^2*`ϕ`^2/Pi^2))+omega*(-sin(gamma)*(r[b]*sin(theta)+u*cos(gamma[b])*cos(theta))-cos(gamma)*(p*(theta-z*`ϕ`)-u*sin(gamma[b]))))+(sin(gamma)*sin(gamma[b])*cos(theta)-cos(gamma)*cos(gamma[b]))*(p*z*omega*cos(gamma)-omega*(r[b]*cos(theta)+u*cos(gamma[b])*sin(theta)+(1/2)*sqrt(4*R^2-f^2*`ϕ`^2/Pi^2)-R+r))+(-cos(gamma)*sin(gamma[b])*cos(theta)-sin(gamma)*cos(gamma[b]))*(p*z*omega*sin(gamma)+(1/2)*f*omega/Pi);
> solve(F, u);
Egyszerűen fogalmam sincs, hogy ezt miért csinálja. Valami tipp?
-
xDJCx #543
Próbáld meg az isolate-tel:
isolate(F,u); -
Kele85 #542 Az nekem nem jó, ha konkrét értéket adok, mert nekem csak egy teoretikus számítás kell. Egy képlet, amit később fel tudok használni.
Leírom a teljes programot, remélem így többet tudsz majd mondani róla.
#
> restar; with(LinearAlgebra);
> r[1] := `<,>`([r[b]*cos(theta)+u*cos(gamma[b])*sin(theta), r[b]*sin(theta)+u*cos(gamma[b])*cos(theta), p*(theta-z*`ϕ`)-u*sin(gamma[b]), 1]);
> n[1] := `<,>`([sin(gamma[b])*sin(theta), -sin(gamma[b])*cos(theta), cos(gamma[b])]);
> e := f*`ϕ`/(2*Pi);
> a := sqrt(R^2-e^2)-R+r;
> M[21] := Matrix(4, 4, {(1, 1) = 1, (1, 2) = 0, (1, 3) = 0, (1, 4) = a, (2, 1) = 0, (2, 2) = -sin(gamma), (2, 3) = -cos(gamma), (2, 4) = 0, (3, 1) = 0, (3, 2) = cos(gamma), (3, 3) = -sin(gamma), (3, 4) = (1/2)*f*`ϕ`/Pi, (4, 1) = 0, (4, 2) = 0, (4, 3) = 0, (4, 4) = 1});
> r[2] := evalm(`&*`(M[21], r[1]));
> M[32] := Matrix(4, 4, {(1, 1) = cos(`ϕ`), (1, 2) = sin(`ϕ`), (1, 3) = 0, (1, 4) = 0, (2, 1) = -sin(`ϕ`), (2, 2) = cos(`ϕ`), (2, 3) = 0, (2, 4) = 0, (3, 1) = 0, (3, 2) = 0, (3, 3) = 1, (3, 4) = 0, (4, 1) = 0, (4, 2) = 0, (4, 3) = 0, (4, 4) = 1});
> r[3] := evalm(`&*`(M[32], r[2]));
> L[21] := Minor(M[21], 4, 4, output = matrix);
> n[2] := Multiply(L[21], n[1]);
> w := `<,>`([0, 0, omega]);
> R[2] := `<,>`([r[2][1], r[2][2], r[2][3]]);
> v[2] := CrossProduct(w, R[2]);
> v[h] := `<,>`([0, p*z*omega*cos(gamma), p*z*omega*sin(gamma)]);
> v[f] := `<,>`([0, 0, f*omega/(2*Pi)]);
> v[r] := `<,>`([-v[f][3]*e/sqrt(R^2-e^2), 0, 0]);
> v[rel] := v[h]+v[f]+v[r]-v[2];
> F := DotProduct(v[rel]^%T, n[2], conjugate = false);
> solve(F, u);
Error, (in simplify/table) too many levels of recursion
>
Egy-két dolgot elég furán ír ki, de remélem érthető lesz.
Midnen jót!
-
xDJCx #541 Szervusz!
Célszerű lenne F konkrét értékét megadni, így nehéz segíteni. -
Kele85 #540 Sziasztok!
Látszólag kicsit halottnak tűnik a fórum, de azért hátha szerencsével járok. Szóval nem rég kezdtem el a Maple14 programmal foglalkozni, az egyetemen egy feladat megoldásához lesz rá szükségem. A teljes számolást nem írnám itt végig, mert elég hosszú.
Szóval lineáris algebrában felírtam az egyenleteimet, végig kiszámoltattam azt, ami nekem kell. A végén utolsó műveletként kapok egy "F" nevű skalárt (skalárszorzás után), amiben van egy "u" nevű ismeretlenem. Ezt kellene "u"-ra megoldani. Ezt a solve paranccsal akartam megcsinálni, a következő módon, majd a következő hibaüzenetet kaptam:
> solve(F, u);
Error, (in simplify/table) too many levels of recursion
Valami megoldás erre? A segítséget előre is köszönöm -
petinho26 #539 Köszönöm a segítséget. Ezt a zip parancsot nem ismertem. Megyek próbálkozom. -
xDJCx #538
A listához, az kell, hogy szögletes zárójelek között legyenek felsorolva vesszővel az értékek.
Ha van két lista az x-ekre és y-okra, akkor pl. a zip -paranccsal lehet belőlük x,y párokat csinálni:
with(plots):
xek:=[2,4.5,-3,-5,7];
yok:=[12,17,8,13,17];
pontok:=zip(`[]`,xek,yok);
pointplot(pontok);
A zip parancsnál van erre példa a súgóban.
-
petinho26 #537 az előzőt javítva annyi, hogy x:= [u];
Nem? -
petinho26 #536 Sziasztok
A következőben szeretném kérni a segítségeteket. Vannak alappontjaim x_1,x_2,...,x_30, és y_1,...,y_30 ezeket szeretném összefűzni 2 listába és utána ábrázolni őket a egy intervallumon.
Próbálkoztam már pár féle módon, elvileg sorozatba sikerült őket raknom de, valahogy úgy nem tudtam ábrázolni, aztán megpróbáltam listára alakítani, de azt meg nem értem, hogy de nem sikerült pedig az elvileg annyi, hogy pl: x := [u] vagy tévedek?
Előre is köszönöm a segítséget. -
szumurri #535 Köszönöm, így már rendben. A potenciális (?) felhasználóknak (??) fontos, hogy "matek óra kompatibilisen" lássanak mindent :-))) -
xDJCx #534
Egyik gond, hogy a tan és cot argumentumát nem pontosan a kívánt alakban írja, azaz 2*Pi/4-et Pi/2-vé egyszerűsíti a Maple. Ebben nehéz megakadályozni. Van rá trükk pl. az alábbi forma:
tan(2*x+ 2 * ``(Pi/4));
Ez a munkalapon működik, a megjelenítés megfelelő, de valamiért a mathcontainer-ben nem szépen jeleníti meg.
Ábra feliratként (pl. legend) viszont szépen megjeleníti a typeset alak használatával (lásd alább.) Így akár felesleges is a Mathcontainer-es kiíratása a képletnek.
Továbbá mivel Mathcontainer-ben és ábra feliratként nem kell a képlettel tovább számolni, ezért akár tg is írható a tan helyett ( és ctg cot helyett. Ekkor nem ismert függvényként a Maple nem alakítja át pl. cot-tá. Így felesleges az ajánlott applyrule-átalakítás.
Az ábra rácsozathoz érdemes megpróbálni a gridlines opciót.
A fentiek szerint átírtam a programot.
Do(%Plot1=plots:-pointplot([NULL]));
Do(%MathContainer1=0);
Do(%MathContainer2=0);
plots:-setoptions(thickness=2,labels=["x","y"],tickmarks = [spacing(Pi/4), default],gridlines=true);
f1:='f1';
f2:='f2';
a1:=0;a2:=0;
if Do(%CheckBox1)then
phi1:=Do(%Slider3)*Pi/4;
a1:=Do(%Slider1);
o1:=Do(%Slider2);
f1:=a1*tan(o1*x+phi1);
m1:=a1*tg(o1*x+phi1);
Do(%MathContainer1=m1);
end if;
if Do(%CheckBox2)then
phi2:=Do(%Slider6)*Pi/4;
a2:=Do(%Slider4);
o2:=Do(%Slider5);
f2:=a2*cot(o2*x+phi2);
m2:=a2*ctg(o2*x+phi2);
Do(%MathContainer2=m2);
end if;
ymax:=10;
gtan:=plot(f1,x=-2*Pi..2*Pi,y=-ymax..ymax,color="Blue",discont=true,gridlines=true,legend=typeset(a1*tg(o1*x+phi1/(Pi/4)* ``(Pi/4))));
gcot:=plot(f2,x=-2*Pi..2*Pi,y=-ymax..ymax,color="IndianRed",discont=true,gridlines=true,legend=typeset(a2*ctg(o2*x+phi2/(Pi/4)* ``(Pi/4))));
Do(%Plot1=plots:-display(gtan,gcot));
end use;
-
szumurri #533 A "nem vált be" persze nem azt jelenti, hogy nem működik, csak azt, hogy nem úgy, ahogy szeretném. Azért küldtem el a linket, mert ha lefuttatod, jobban látod miről beszélek.... -
szumurri #532 Nagyon köszönöm a választ. Sajnos nem vált be. (Itt van a teljes alkalmazás: ftp://jaguser:[email protected]/trigonometrikus_tancot.zip) -
xDJCx #531
1)
Ezt próbáld meg:
phi1:=Do(%Slider3)*Pi/4;
a1:=Do(%Slider1);
o1:=Do(%Slider2);
f1:=a1*tan(o1*x+phi1);
f1:=applyrule(cot(x::anything)='''-tan(x-Pi/2)''',f1);
Do(%MathContainer1=f1);
-
szumurri #530 Kedves Maple-tudorok!
1)
phi1:=Do(%Slider3)*Pi/4;
a1:=Do(%Slider1);
o1:=Do(%Slider2);
f1(x):=a1*tan(o1*x+phi1);
Do(%MathContainer1=f1(x));
Hogyan lehetne elérni, hogy a MathContainer1-ben pl. a1:=1, o1:=1 és phi1:=2*Pi/4-re ne azt írja ki, hogy -cot(x), hanem pl. azt, hogy tan(2*Pi/4)?
2)
Lehet e a TextArea komponensben állítani a karakterméretét (magasságát)? -
xDJCx #529
Egy ötlet kapcsolódva a modulban az alábbi
... proc(p::(polynom(constant)), x::name) sorhoz:
eljárás bemeneti argumentumának meg lehet mondani, hogy legyen olyan polinom típusú, amely polinom egy szintén megadott változó függvénye:
proc(p::depends(polynom(constant,x)), x::name)
...
end proc;
A súgóban erről itt lehet olvasni :
?Procedure Parameter Modifiers
-
Gimre #528 xDJCx nagyon szépen köszönöm a segitséget. müködik a progi.
Üdv Imre -
xDJCx #527
Van benne több hiba. Javítottam egy-kettőt,amit megtaláltam. Már szintaktikailag helyes, de tartalmilag még nem.
Jeleztem a javított sorokat, és azt is ami kérdéses.
Pl. boundRoots eljárás még biztos hibás: pl. a bb4: kezdetű sorban a t változó nincs előtte definiálva és itt mindenképpen kellene neki érték.
polyops:=module()
export leen, height, qnorm, boundRoots , boundRootsDense;
options package;
leen := proc (p::(polynom(constant)), x::name)
convert(map(abs, [coeffs(expand(p), x)]), `+`)
end proc;
height := proc (p::(polynom(constant)), x::name)
max(coeffs(collect(p, x, distributed, abs), x))
end proc;
qnorm := proc (p::(polynom(constant)), x::name)
sqrt(convert(map(z->z*conjugate(z) , [coeffs(expand(p), x)]), `+`))
end proc;
boundRoots := proc (p::(polynom(constant)), x::name)
local q, d, s, n, t, b, b1, b2, b3, bb4;
q := collect(p, x, distributed, evalf);
d := degree(q, x);
s := lcoeff(q, x);
n := nops(q);
if d = ldegree(q, x) then RETURN(0) end if;
if s <> 1. then q := expand(q/s) end if;
b1 := 1+polyops:-height(q-x^d, x);
b2 := max(1., leen(q-x^d, x));#javítva leen ?
b := min(b1, b2);
b3 := 0;
bb4 := (n*abs(lcoeff(t, x)))^(1./(d-degree(t, x)));# mi az a t?
for t in q-x^d while b3 < b do
b3 := max(b3, bb4);
end do;
userinfo(3, polyops, [b1, b2, b3]);
min(b, b3);
end proc;
boundRootsDense:=proc(p::polynom(constant), x::name)
local q, d, s, k, b, b4, b5;
q:=collect(p,x, distributed,evalf);
if ldegree(q)>0 then
q:=expand(q/(x^(ldegree(q))));
end if;
if type(q, constant) then
RETURN(0);
end if;
d:=degree(q,x);
s:=lcoeff(q,x);
if s<> 1. then
q:=expand(q/(s))
end if;
b:=polyops:-boundRoots(q,x);
b4:=convert([abs(coeff(q,x,0)),seq(abs(coeff(q,x,k-1)-coeff(q,x,k)),k=1..d)],`+`);
if nops(q)<d+1 then b5:=infinity;
elif type(q, polynom(positive,x)) then
b5:=max(seq(coeff(q, x, k-1)/coeff(q, x, k), k=2..d));# javítva;
else
b5:=max(abs(coeff(q, x, 0)/coeff(q, x, 1)), seq(2*abs(coeff(q, x, k-1)/coeff(q, x,k)), k=2..d));#javitva
end if;
#end if; javitva
userinfo(3, polyops, [b, b4,b5]);
min(b, b4, b5);# javítva
end proc;
end module;
-
Gimre #526 Sziasztok!
Egy kis segitségre lenne szükségem. Itt van ez a module csak az a baj, hogy vmiért nem müködik én képtelen vagyok rájönni, hogy hol a hiba. Aki tud az kérem segítsen ebben. Előre is köszönöm.
Itt a program:
polyops:=module()
export leen, height, qnorm, boundRoots , boundRootsDense;
options package;
leen := proc (p::(polynom(constant)), x::name)
convert(map(abs, [coeffs(expand(p), x)]), `+`)
end proc;
height := proc (p::(polynom(constant)), x::name)
max(coeffs(collect(p, x, distributed, abs), x))
end proc;
qnorm := proc (p::(polynom(constant)), x::name)
sqrt(convert(map(z->z*conjugate(z) , [coeffs(expand(p), x)]), `+`))
end proc;
boundRoots := proc (p::(polynom(constant)), x::name)
local q, d, s, n, t, b, b1, b2, b3, bb4;
q := collect(p, x, distributed, evalf);
d := degree(q, x);
s := lcoeff(q, x);
n := nops(q);
if d = ldegree(q, x) then RETURN(0) end if;
if s <> 1. then q := expand(q/s) end if;
b1 := 1+polyops:-height(q-x^d, x);
b2 := max(1., len(q-x^d, x));
b := min(b1, b2);
b3 := 0;
bb4 := (n*abs(lcoeff(t, x)))^(1./(d-degree(t, x)));
for t in q-x^d while b3 < b do
b3 := max(b3, bb4);
end do;
userinfo(3, polyops, [b1, b2, b3]);
min(b, b3);
end proc;
boundRootsDense:=proc(p::polynom(constant), x::name)
local q, d, s, k, b, b4, b5;
q:=collect(p,x, distributed,evalf);
if ldegree(q)>0 then
q:=expand(q/(x^(ldegree(q))));
end if;
if type(q, constant) then
RETURN(0);
end if;
d:=degree(q,x);
s:=lcoeff(q,x);
if s<> 1. then
q:=expand(q/(s))
end if;
b:=polyops:-boundRoots(q,x);
b4:=convert([abs(coeff(q,x,0)),seq(abs(coeff(q,x,k-1)-coeff(q,x,k)),k=1..d)],`+`);
if nops(q)<d+1 then b5:=infinity;
elif type(q, polynom(positive,x)) then
b5:=max(seq((coeff(q, x, k-1))/(coeff(q, x, k))), k=2..d);
else
b5: =max(abs((coeff(q, x, 0))/(coeff(q, x, 1))), seq(2*abs((coeff(q, x, k-1))/(coeff(q, x,k))), k=2..d);
end if;
end if;
userinfo(3, polyops, [b, b4,b5]);
min(b, b4 b5);
end proc;
end module;
-
#525 A listában az elemek sorrendje rögzített, a halmazban pedig nem.
Köszönöm! Utánajárok és tanulok még az adattípusokról egy kicsit! :P :) -
Gimre #524 Sziasztok! Azt szeretném kérdezni, hogy a mapleban hogy lehet egy polynomot
Pl: (x^2-x+1)^2= (x^2-x+1)*(x^2-x+1) alakra hozni, mert a factor nem csinálja meg az expand pedig kifejti. -
xDJCx #523
Jobb a solve-ban nem halmazként megadni az ismeretleneket, hanem listaként,azaz szögletes zárójelek között. Ekkor a megoldást is listában adja! A listában az elemek sorrendje rögzített, a halmazban pedig nem.
Egyszerűbben is hozzá lehet rendelni a megoldásokat az ismeretlenekhez az assign paranccsal:
restart;
mego:=solve({x-y = 9, x+y = 10}, [x, y]);
assign(mego);
x;y;
Ha több megoldáspár lenne, akkor ki kell választanom valamelyik meogldáspárt pl.
restart;
mego:=solve({x^2 = 9, x*y = 10}, [x, y]);
assign(mego[1]);# első megoldáspárt választottam a hozzárendeléshez
x;y;
Az assign-nal végzett hozzárendelés után x és y felvette a hozzárendelt értékeket, ha szükséges megszüntethetem a hozzárendelést:
pl. így
x:='x';y:='y';
De az unassign parancs is jó erre:
unassign('x');
-
polarka #522 Nálam teljesen jól működik, nem cserél semmit. Lehetséges, h nem ugyanazt írtad le ide?
Úgy vettem észre, h a solve ábécé sorrendben adja vissza az ismeretlenek értékeit. -
#521 Ismét belefutottam egy régi problémámba, amit valamiért nem tudok tisztességesen megoldani és nem vagyok benne biztos, hogy én rontom el - persze ki más, ha nem én... :)
Tehát:
Van egy egyenletrendszerem, aminek a megoldásait megkeresem a
mego:=SOLVE({egyenlet1, egyenlet2}, {ismeretlen1, ismeretlen2});
alakban.
Az eredmény amit kapok:
mego:={ismeretlen1=kifejezés1, ismeretlen2=kifejezés2}
Ebből a listából(?) az ismeretlenek értékeit a következő kis feltételvizsgálattal szedem ki:
> if lhs(mego[1])=ismeretlen1
> then
> ismeretlen1:=rhs(mego[1]); ismeretlen2:=rhs(mego[2]);
> else
> ismeretlen1:=rhs(mego[2]); ismeretlen2:=rhs(mego[1]);
> fi;
Az vele a gond, hogy sok esetben, ha újra nyomok egy ENTER-t ezen az IF-es szerkezeten, akkor mintha permutálódnának az ismeretlen1-hez és ismeretlen2-höz rendelt értékek. Hogy lehessen érteni:
Első futtatáskor: ismeretlen1=A, ismeretlen2=B
ENTER után: ismeretlen1=B, ismeretlen2=B
ENTER után: ismeretlen1=B, ismeretlen2=A
ENTER után: ismeretlen1=A, ismeretlen2=A
ENTER után: ismeretlen1=A, ismeretlen2=B
és így tovább...
Miért nem működik ez az IF?
Van-e erre elegánsabb megoldás? (az a gond, ugye, h a SOLVE nem biztos, h mindig ugyanabban a sorrendben adja vissza a két ismeretlen értékét!!)
Előre is köszönöm! -
xDJCx #520 Érdekességképpen: az indets parancsot használva automatikusan ki lehet keresni a kifejezés változóit:
eq := -4*x^3*y-83*x^2*y^2-10*y^4+97*x^2-73*y^2-62*x;
indets(eq);
type(eq, polynom(integer, indets(eq))); -
xDJCx #519 A polinomodnak 2 változója van x és y, ezért a helyes parancs a kérdéses típus vizsgálatára:
type(eq, polynom(integer, [x,y])); -
Gimre #518 Sziasztok! eq := -4*x^3*y-83*x^2*y^2-10*y^4+97*x^2-73*y^2-62*x erre a polynomra a type(eq, polynom(integer, x)) miért ad false értéket? Hiszen az x együtthato egész érték. Nem? Az integer helyére a numeric tipust irtam ugyan úgy false értéket adott vissza hogy van ez? -
xDJCx #517
A map(u->simplify(u, %), %%) -ban a % az előző eredményre utal a %%-pedig az azt megelőző számítási eredményre, itt most nem tudjuk mi volt az , de nem is lényeges. A map utasítás az első paraméterében megadott műveletet végzi el a második paraméterében megadott adattípus összes elemén. Ez utóbbi pl. ha egy lista típus, akkor annak minden elemén elvégzi a megadott műveletet, vagy ha ez egy összeg, akkor annak egyes tagjain sorban.
pl.
map(sin,[a,b,c]);
[sin(a), sin(b), sin(c)]
A művelet megadható operátoros alakban is azaz pl. u - > simplify(u,par2). Itt az u csak egy segédváltozó, gyakorlatilag tetszőleges más szimbólum is szerepelhetne. A map parancs majd az u-helyére behelyettesíti a második paraméterében szereplő adattípus elemeit sorra és elvégzi rajtuk a megadott műveletet.
map(u->u^2,[a,b,c]);
[a^2, b^2, c^2]
map(u->u^2,a+b);# összeg tagjait emeli négyzetre
a^2+b^2
Az operátoros alakban szabadabban meg lehet adni a műveletet, azaz pl. több paramétere is lehet a függvénynek.
Itt a simplify-parancsot alkalmazza a map. Amire érdemes felfigyelni, hogy a két példád közül az egyikben a simplify parancs két paraméteres változata szerepel azaz simplify(par1, par2) formában, a második példában pedig egy paraméteres alakja simplify(valami)
Ez a fő különbség. A map(simplify, valami) megadásban egy paraméteres simplify használható. Az operátoros formában meg lehet adni több paramaéteres függvényt is. pl.
map(t->f(t,d,e),[a,b,c]);
[f(a, d, e), f(b, d, e), f(c, d, e)]
Érdemes még megjegyezni, hogy lenne más lehetőség is (bár nem minden esetben) az operátoros forma elkerülésére több paraméteres függvény használata esetén, mert a map parancsnak is létezik más megadási formája is: azaz map(függvény, adat, par3,par4...) Itt a függvény 3. 4 stb. paraméterei szerepelhetnek a par3, par4 helyén. Lásd az alábbi példákat:
map(t->f(t,d,e),[a,b,c]);# több paraméteres függvény f operátoros formában
[f(a, d, e), f(b, d, e), f(c, d, e)]
map(f, [a,b,c],d,e);# map másféle megadási módja: több paraméteres f függvény nem operátoros formában
[f(a, d, e), f(b, d, e), f(c, d, e)]
Példa több paraméteres simplify parancsra, mappel:
map(u->simplify(u,symbolic),[sqrt(x^2),sqrt((x-1)^2)]);# operátoros formában
[x, x-1]
-
Gimre #516 Sziasztok!
Ismét kérnék egy pici segitséget. A map() utasitásrol kérdeznék. Ez a utasitás mitcsinál pontosan PL: map(u->simplify(u, %), %%) miért kell bele a -> operator? nem elég ha csak ennyit irumk map(simplify, %) ez nem ugyan azt csinálja?
Köszönöm. Gimre -
petinho26 #515 Már sikerült megoldanom. -
petinho26 #514 Szia
Ismét kérdezni szeretnék
A feladatom a következő: m= {3, 25, 72} e={4, 17, 23)
c=m^e mod 143
melyik j-re teljesül elsőre, hogy c^(e^j)=c mod 143
Én a következőt csináltam a c-ket kiszáolom kézzel és beírom ebbe a képletbe: pl most a 81 a 3^4
msolve(81^(4^j)=81 , 143);
de valami ilyesmit ír ki :
{j = `numtheory:-mlog`((1/4)*(ln(62)+I*Pi)/ln(3), 4, 143, phh)+phh*_Z2}
Tudod, hogy ez miért van, vagy valamit elrontottam a parancsban? -
petinho26 #513 Nagyon sokat segítettél.
Köszönöm szépen. -
xDJCx #512
Ha jól értem, az e-re 1..142 közé eső számok közül ki kel venni a felsoroltakat. Erre egy megoldás:
restart;
# Az új e számok halmaza (ek):
ek:={$1..142} minus {11,13,22,26,33,39,44,52,55,65,66,77,78,88,91,99,104,110,117,121,130,132} ;
mek:={seq(seq(`if`(m=m^e mod 143,m,NULL),e in ek),m=1..142)};`ennyi m számra teljesül`=nops(mek);
# Így pedig az összes megfelelõ m,e számpár is kilistázható:
meparok:=seq(seq(`if`(m=m^e mod 143,[m,e],NULL),e in ek),m=1..142);
nops([meparok]);# ezek száma
-
petinho26 #511 ÉS ha a feladat ugyan az csak e=1..142-{11,13,22,26,33,39,44,52,55,65,66,77,78,88,91,99,104,110,117,121,130,132}
És most a minden m-hez hány pár tartozik?
Ebben is tudsz légyszives segíteni? -
petinho26 #510 Nagyon szépen köszönöm.
-
xDJCx #509
A Mapleben nyers erővel:
Azok az m számok amelyekre teljesül a feltétel, és ezek száma:
restart;
mek:={seq(seq(`if`(m=m^e mod 143,m,NULL),e=1..142),m=1..142)};`ennyi m számra teljesül`=nops(mek);
# Így pedig az összes megfelelő m,e számpár is kilistázható:
meparok:=seq(seq(`if`(m=m^e mod 143,[m,e],NULL),e=1..142),m=1..142);
nops([meparok]);# ezek száma
-
petinho26 #508 Ismét segítség kéne...
A feladat: Számoljuk ki, hogy hány db m számra teljesül, hogy
m=m^e mod(143). m=1..142 , e=1..142
a segítséget előre is köszönöm. -
xDJCx #507 Megjelent már a Maple 15.
Itt lehet az újdonságokról olvasni:
http://www.maplesoft.com/products/maple/new_features/index.aspx -
xDJCx #506
A nonunit (nem egység) kulcsszó a Mapleben pl. az algebrai mintaillesztésnél fordul elő.
Az egység itt az adott matematikai művelet egységelemét jelenti (pl. szorzásnál 1-et, összeadásnál 0-át).
Ha pl. azt akarjuk ellenőrizni, hogy egy adott algebrai kifejezés x-nek egész számú hatványa, ahol ki akarjuk zárni azt az esetet amikor csak x szerepel (azaz x az első hatványon), ezt megtehetjük a patmatch paranccsal az alábbi módon.
A patmatch parancs ellenőrzi, hogy az első argumentuma olyan alakú-e, amelyet a másodikban megadtunk , azaz ebben a példában x^egész ,ahol most kizárjuk az egészek közül 1-et:
patmatch(x^2,x^n::(nonunit(integer))); # true-t ad. azaz ilyen alakú
patmatch(x^3,x^n::(nonunit(integer)));# ez is true
patmatch(x^(-3),x^n::(nonunit(integer)));# ez is true
patmatch(x,x^n::(nonunit(integer)));# ez false mert x^1 alakú
Az x^n::(nonunit(integer)) kifejezés definiálja a keresendő mintát, az n után a ::-nel kezdődő rész az n típusát írja le.
Lásd még a súgóban a példákat: ?patmatch
A nonunit a fenti példában azt jelentette, hogy az adott változó nem lehet 1, de az alábbi példában nonunit nem 1-et, hanem 0-át jelent (mert itt már összeadás műveletről van szó):
Itt a+b alakú kifejezéseket akarunk keresni, azaz nem engedjük meg a csak a-t vagy csak b-t sem:.
patmatch(a+b,A::nonunit(algebraic)+B::nonunit(algebraic));# true
patmatch(a,A::nonunit(algebraic)+B::nonunit(algebraic));# false