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;

  • ZilogR
    #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.
  • ZilogR
    #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