625
A Maple egy fejlett matematikai problémamegoldó és programozói szoftver.
  • ZilogR
    #425
    ha valaki rendelkezik DOS vagy Win 3.1 alatt futtatható MAPLE verzióval, legyen szíves egy privátot küldeni...! Szeretnék egy nagyon régi notebook-ot éleszteni és kellene egy matek szoftver is a tesztelgetéshez... Előre is köszönöm!
  • xDJCx
    #424

    Érdekességképpen, az alábbi két sor helyett
    eqRe:=evalc(Re(eq));# az egyenlet valós részre
    eqIm:=evalc(Im(eq));# az egyenlet képzetes részre

    lehet ezt is írni:
    eqRe,eqIm:=((evalc@Re,evalc@Im)(eq));
  • xDJCx
    #423

    Az eőbbi egyenlet lépésenkénti megoldása Mapleben (mintha papír-ceruza módszerrel végeznénk):
    A %-jel az előző eredményt jelöli a Mapleben.

    restart;
    eq:=abs(z)-z=1+2*I;# megoldndó egynelet
    z:=a+b*I;
    eq;
    -evalc(Im(eq));# az egyenlet képzetes részénel képzése, ennek -1-szerese
    assign(%);b;# b-hez a bre kapott érétk hozzárendelése
    evalc(Re(eq));# egyenlet valós részének képzése
    %+a;# mindkét oldalhoz a hozzáadása
    map(t->t^2,%);# a kapott egyenlet mindkét oldala négyzetének képzése
    lhs(%)=expand(rhs(%));# a kapott egynelet jobb oldalán anégyzetre emeés kifejtése
    %-a*a;# a*a kivonása minsdkét oldalból
    isolate(%,a);# a kifejezése (egy oldalra rendezése)


    (Nem vizsgáltam fent minden feltételt, pl. a=0 eset..., ez nem ad megoldás, behelyettesítéssel látható).
  • xDJCx
    #422
    Matek topikbeli kérdés volt a |z|-z=1+2i egyenlet megoldása, (ahol z ismeretlen komplex szám, azaz z=a+bi alakú, a és b valósak ). Mapleben ez pl. így oldható meg:
    A solve parancs nem kezeli a komplex egyenleteket, de az eredeti komplex egyenletet valós és képzetes részekre bontva, és így kapott két egyenletet a solve-nak megadva (egyenletrendszerként) képes megoldani (ismeretlenek a és b):

    restart;
    eq:=abs(z)-z=1+2*I;
    z:=a+b*I;
    eqRe:=evalc(Re(eq));# az egyenlet valós részre
    eqIm:=evalc(Im(eq));# az egyenlet képzetes részre
    solve([eqRe,eqIm],[a,b]);
    assign(%);'z'=z;# ez csak a kiiratás kedvéért.
    evalc(eq);# ellenőrzés, eredeti egyenlet kiértékelése az a-ba és b-be behelyettesített értékekkel.
  • xDJCx
    #421
    Kiegészítve az előzőeket:
    Az alulvonással kezdődő változónevek a Mapleben szokásosan a Maple saját változóit jelölik.

    További példa az eljárások paramétereinek kezelésére: pl. a _passed változóval (átadott paramétereket tartalmazza):
    az alábbi eljárás kiírja a bemenetként megadott paramétereit, a _passed változó segítségével, amely a bemeneti paramétereket tárolja (tömbként):

    f := proc() local x;
    for x in _passed do print(x) end do;
    end proc:

    proc(m,n,5,a+2);

    Példa az expects ulcszsóra: megadható vele a paraméter elvárt típusa a bemenő paraméternek az eljárásban:
    Az alábbi eljárás egész típusú bemenő paramétert vár a b paraméterre, alapértelmezett értékként 100-at ad, ha nem adunk meg semmit, és a négyzetét állítja elő b-nek:

    f := proc(b::expects(integer) := 100) b^2 end proc:

    f(); # 100^2-et ad

    f(3); #9-et ad

    f(3.1); # hibát jelez, mert nem egész kapott.

    A helpben a többi parsméterkezelő kulcsszó és változó is megtalálható, a hagyományos programnyelvekhez képest jóval gazdagabbak a Maple paraméterkezelési lehetőségei, pl. akár összetett logikai feltételt is meg lehet adni bemenő paraméterre. Ha lesz időm erre is adok példát.
  • xDJCx
    #420
    Az újabb Maple verziókban léteznek ezek a kulcsszavak, a maple eljárások bemenő paramétereinek fejlettebb kezelésére. Pl. a dollár jellel (end of parameters marker) korlátozni lehet a procedurának megadható bemeneti paraméterek számát. Az _npassed belső változó pedig megadja hány paramétert adtak ténylegesen át a prodcedurának.
    Pl.
    f := proc(a,$)
    2*sin(a)
    end proc:


    f(Pi); # Ezt kiértékeli.

    f(Pi,3);
    # Erre hibát jelez, mert több paramétert kapott a megengedettnél.

    A helpben részletesen írnak ezekről.
  • GImre70
    #419
    Sziasztok! Egy kis segítséget szeretnék kérni. A maple12 verzióban vannak olyan "utasítások" amikről nem todom hogy miaz. pl:_params,_nparams,_rest,_nrest,_passed,_npassed,expect(paramnév), és a végén a dollár ($) jel a procedurákban. Szóval azt szeretném kérdezni, hogy ezek mire valok. Előre is köszönöm a válaszotokat. Maradok tisztelttel Imre
  • ZilogR
    #418
    Üdv! Újfent előkerült régi problémám és fejlövésem: DOS-os kis palmtopon szeretném kipróbálni a MAPLE-t és kellene teszteléshez DOS verziót birtokló ember, akit szintúgy érdekel, h egy 4.7MHz-en futó CGA masina (HP200LX) mit tud... Valakinek efféle elhivatottsága? Privátban keressen meg, aki ebben tud segíteni! Előre is thnx!
  • xDJCx
    #417
    Pontosítás: lemaradt a befoglaló téglalap területével való szorzás, (bár ebben a példában nem számít, mert ez a területet éppen 1-nek vettem.)
    A szövegben helyesen: ...A kérdéses tartományba eső pontok száma/összes pont szorozva a befoglaló téglalap területével jól közelíti a keresett területet...
    A programban a helyes sor:

    add(tart(X[i], Y[i]), i = 1 .. nops(X))*Alapter/N; evalf(%); gc();

    Ha növeljük N-et, akkor pontosabb megoldás várható.
  • xDJCx
    #416
    A matek fórumban nemrég feldobott integálos feladat egy közelítő megoldása (Monte Carlo szimuláción alapján) Mapleban az alábbi:

    A feladat átfogalmazva: Mennyi a területe az y=x, y=2*x, x*y=1, x*y=2 (x>0, y>0), görbékkel határolt tartománynak? Meg lehet oldani analitikusan is, új változók bevezetéséve, Jacobi-determináns számításával, de elemi úton is számolható a közelítő értéke:
    Véletlen P(x,y) pontokat generálunk egyenletes eloszlással egy olyan téglalapon, amely magában foglalja a kérdéses tartományt. A kérdéses tartományba eső pontok száma/összes pont arány jól közelíti a keresett területet.
    A számítás Mapleben (12)

    restart;
    with(Statistics): randomize();
    xa, xb := .5, 1.5; ya, yb := 1, 2;#A befoglaló téglalap sarokpontjai
    Alapter := (xb-xa)*(yb-ya);#ennek területe;
    velx := RandomVariable(Uniform(xa, xb));
    vely := RandomVariable(Uniform(ya, yb));
    N := 20000;# minták száma
    X := convert(Sample(velx, N), 'list'):
    Y := convert(Sample(vely, N), 'list'):
    # a kérdéses tartományba esést az alábbi rutin vizsgálja:
    tart := proc (x, y)
    if x < y and y < 2*x and y < 2/x and 1/x < y then return 1 else return 0 end if
    end proc;
    add(tart(X[i],Y[i]),i=1..nops(X))/N;evalf(%);gc();


    Nekem 0.348-at adott eredményül (minden futtatásnál ingadozik persze), a pontos érték kb. 0,35...

    A módszerhez nem szükséges feltétlenül Maple, akár Excelben, vagy bármely hagyományos programnyelvben is meg lehet csinálni.
  • xDJCx
    #415
    Maple a magyar nyelvű wikipedian:

    http://hu.wikipedia.org/wiki/Maple_(szoftver)
  • xDJCx
    #414
    Ilyenkor át kell váltani az F5-tel a Maple input módra (piros színű legyen a bevitel), ekkor nem teszi alsó indexbe.
  • bandus
    #413
    megvan a megoldás. az egyenleteket nem kerek, hanem kapcsos zárójelbe kell tenni. viszont nálam kicsi gebasz van. ha kapcsos zárójelet akarok írni, akkor úgy teszi, mintha alsó indexben írnék a word-ben, ez mitől lehet?

    maple 12 amugy

    köszi
  • bandus
    #412
    sziasztok!
    egy kis segítség elkelne nekem a maple-ben. nem akarja az igazságot:) egy komplex egyenletrendszert kellene megoldanom, két ismeretlen komplex számmal.
    definiálom őket, mint
    f1:=Complex(x1,y1), és f2:=Complex(x2,y2)

    begépelem a két 0-val egyenlő egyenletet, ezzel a két változóval, majd
    solve((e1, e2), [f1, f2]) és nem csinál semmit..

    hol rontom el?

    köszi előre is!
  • n3whous3
    #411
    már rájöttem, vagyis jól használtam eredetileg is csak valamit már a kódon belül rontottam el :)

    de azért kösz
  • xDJCx
    #410

    Egy példa jó lett volna, hogy pontosan mire kell.
    Nézd meg ezeket:

    restart;
    f1 := x->sin(x);
    f2:=unapply(2*x,x);

    p1:=proc(f)
    whattype(eval(f));
    end proc;

    p1(f1);
    p1(f2);

    p2:=proc(f)
    diff(f(x),x);
    end proc;

    p2(f1);
    p2(f2);
  • n3whous3
    #409
    fura, most meg egy egyszerű példára működött...
  • n3whous3
    #408
    ja és 12-esem van
  • n3whous3
    #407
    Lenne egy kis gondom. Írok épp egy feladat miatt egy rövid kis proct és kellene egy bemeneti paraméternek függvény... De hiába adom át úgy magában, nem veszi át csak konstanst/szimbólumot lát már bent a procon belül. Milyen paraméter opció vagy mi kell, hogy ez jó legyen?
  • PeeTeR
    #406
    valaki tudna segiteni maple 5 beszerzeseben?
  • xDJCx
    #405
    Maple 3.3 1985-ből:

    http://www.cs.uwaterloo.ca/research/tr/1985/CS-85-01.pdf
  • xDJCx
    #404

    A már említett Student csomag függvényvizsgáló parancsát is érdemes kipróbálni a függvényre (újabb Maple verziókban működik):

    with(Student[Calculus1]);
    FunctionChart((x-1)^2*(x+2)^2, x = -1 .. 2);

    Más-más szimbólumokkal jelöli a gyökhelyeket, szélsőértékeket, inflexiós pontokat, stb.
    A parancshoz tartozó súgó részletesen leírja a megjelenítés opcióit.
  • xDJCx
    #403
    Ja igen, a példaként kérdezett függvényt elnéztem.
  • speed17
    #402
    ja jóó!!! rosszul másoltam át, csak a fv-nél nincs aza *x!
  • speed17
    #401
    hm, de sztem ez félre számol! mert ennél a fv-nél a -1 , 2 intervallumon az x1=1 x2 = -1/2 pontban lehetnek lok szélsőértékek. x1 = 1 lok minhely és f(1) = 0. x2= -1/2 lok maxhely és f(-1/2)= 81/16. végpontokban f(-1)=4 és f(2)=16. az abszminhely 1 és f(1)=0, absz maxhely pedig a 2 és f(2)= 16! mi lehet a baj? vagy csak én néztem vmit félre?:)
  • xDJCx
    #400
    Az utolsó eljárás vizsgálja lokális szélsőértékeket és a végpontokat is. De a végén az abszolút minimumot és maximumot jeleníti meg.
    (Az ExtremePoints egyszerre vizsgálja a lokális szélsőérétkeket és a megadott tartomány végpontjait is. Lásd a súgóban a parancsot.

    Átírtam az eljárást, hogy ne csak az abszolút maximumot és minimumot jelenítse meg,és az ábrázolást is kiegészítettem. (Ez már csak Maple 12-ben mükszik).

    restart; with(plots):with(Student[Calculus1]):
    xa := -1; xf := 2; # tartomány határok megadása
    fkif := (x-1)^2*(x+2)^2*x; # f függvény megadása
    f := unapply(fkif, x):
    szelsoertekhelyek := ExtremePoints(f(x), x = xa .. xf);
    yok := map(f, szelsoertekhelyek):
    xyok := zip((a, b) -> [a, b] , szelsoertekhelyek, yok):
    fder := diff(f(x), x);
    mx := max(yok):
    mn := min(yok):
    mxxy := select(t-> t[2] = mx , xyok)[]:
    mnxy := select(t-> t[2] = mn , xyok)[]:
    'Összesszelsoertekhelyésérték' = xyok;
    'abszolútmaxminhelyeésértéke' = mxxy, mnxy;
    fgorbe := plot(f(x), x = xa .. xf, color = red, title = typeset("Az f(x)=", fkif, " függvény \nlokális és abszolút szélsőértékei a(z) [", xa, "..", xf, "] tartományon."), legend = "f(x)"):
    fdergorbe := plot(fder, x = xa .. xf, color = blue, legend = "derivált"):
    szelsoertekpont := pointplot(xyok, color = magenta, symbol = circle, symbolsize = 15):
    display(fgorbe, fdergorbe, szelsoertekpont);
  • speed17
    #399
    köszi-köszi a segítséget!! lenne még egy kérdésem, tehát vmit félreértettem, mert ugye ez csak a végpontokat vizsgálja, és azalpjánnéz az absz min-maxot?! és az első amit 2008. nov. 27. 10:23 -kor írtál be, az meg a lokális szé.-keket?! lehet vhogy összegezni őket? tehát hogy mindent egybe csináljon meg? pl, az (x-1)^2(x+2)^2 x € [-1 , 2] nél a lok minhely = 1, lok maxhely -1/2. végpontokban meg ugye absz.min. 1, absz max 2.
  • xDJCx
    #398

    Még érdemes megemlíteni a pl. az mxxy := select(t-> t[2] = mx , xyok)[] sor végén a [] szerepét: lista típusból csinál felsorolást típust, azaz leszedi a szögletes zárójeleket.
    pl.
    L:=[1,2,3,4];# lista
    L[];
    1,2,3,4

    Szokásosabb mód erre az op parancs (op mint operandus):
    op(L);
    1,2,3,4
    A konkrét példában mxxy értéke [[5, 266]]lenne ebből csinál az [] [5, 266]-ot, mert az ábrázoláshoz ilyen formában kell a pont koordinátáit megadni.
  • xDJCx
    #397

    A zip-es sort a magyarázatból kihagytam:
    xyok := zip( (a, b) -> [a, b] , szelsoertekhelyek, yok):
    A zip-pel össze lehet így fésülni két listát: itt van egy lista a szélsőértékhelyekkel [x1,x2,...] és van egy másik lista a hozzájuk tartozó függvényértékekkel: [y1,y2,...] ahol y1=f(x1), y2=f(x2)...
    Az ezekhez tartozó pontok ábrázolásához olyan lista kell, hogy [[x1,y1],[x2,y2],...] Ezt csinálja a zip utasítás a megfelelő szabály megadásával az első paraméterében: (a,b)- > [a,b]. A második és a harmadik paraméterében a x-ek és y-ok lisája szerepel. Az a és b itt is segédváltozó, a nyíl: -> hozzárendelést jelent. Azaz a itt az x-ek lsitájából a soron következő elemet, b az y-ok listájából a soron következő elemet jelenti, ehhez rendelje az [a,b] párt, és ezekből áll össze a kimenő lista.
  • speed17
    #396
    köszi szépen! így már sokkal érthetőbb!!
  • xDJCx
    #395

    Ennél azért rövid kommentekben már nem lehet mindent megmagyarázni.
    Most csak a főbb dolgokat:

    xa := -1; xf := 5;# x tartomány határok
    f := 2*x^3+3*x^2-12*x+1; # a vizsgálandó függvény megadása.
    (Az ábrán piros színű görbe az f függvény a deriváltja kék.)
    A megadott x tartományon belül az abszolút maximumát és minimumát keresi a megadott f függvénynek rutin.
    Ehhez most kész parancsot használtam az ExtremePoints-ot, amely a függvény adott tartományon vett lokális/abszolút szélsőértékhelyeit határozza meg.
    Ehhez a parancshoz kellett betölteni az elején egy plusz csomagot még: with(Student[Calculus1]):

    A kapott lokális maximumok/minimumok közül a maximálisat/minimálisat megkeresi a rutin, ezeket ábrázolja az f görbén.

    yok := map(f, szelsoertekhelyek):
    A fenti sor a szélsőértékhelyekre kapott x-ekből előállítja a hozzájuk tartozó y=f(x)-eket. helpben megnézhető a map parancs : ?map -vel .

    fder := diff(f(x), x);
    Csak az ábrázolás végett, fder a deriváltfüggvény.
    mx := max(yok): legnagyobb értékű y-pont a lokális maximum értékek közül.

    mxxy := select(t-> t[2] = mx , xyok)[]:
    Kiválasztja azt [x,y] párt, ahol y maximális az összes ilyen pár y-ja közül. t->t[2]=mx a kiválasztás szabályát adja meg, t itt segédváltozó , másnak is lehetne nevezni, t[2] az [x,y] alakú pontpárokból a második elemet azaz y-ot adja, ...

  • speed17
    #394
    ó igen, már fent is van a 12, ebben tényleg nem jelez hibákat! csak ez már eltér a kezdetitől, ezt annyira nem értem már!:D ehhez is lehetne kérni kicsi kommenteket?
  • xDJCx
    #393

    Igen, a 11-esben másként kell, ha a megfelelő sorokat ezekre cseréled akkor ott is megy :
    mx := max(yok[]):
    mn := min(yok[]):

    Az persze jó, ha van 12-esed, érdemes abban dolgozni.
  • speed17
    #392
    nah, most próbáltam ki, ilyet írt nekem: error, (in simpl/max) arguments must be of type algebraic, Error, (in simpl/min) arguments must be of type algebraic. most megpróbálom maple 12-ben, lehet azzal van a probléma!?

  • xDJCx
    #391

    Egyik probléma lehet, ha nem írod ki a szorzásjeleket a f(x)-ben, azaz 2x helyett 2*x-et kell írni.
    Továbbá, átírtam rutint, hogy általánosabb esetben is működjön, ha több szélsőérték van a tartományban, és a határokat is vizsgálja. Remélem 11-ben működik így:


    restart; with(plots): with(Student[Calculus1]):
    xa := -1; xf := 5;# határok
    f := 2*x^3+3*x^2-12*x+1;
    f := unapply(f, x):
    szelsoertekhelyek := ExtremePoints(f(x), x = xa .. xf):
    yok := map(f, szelsoertekhelyek):
    xyok := zip( (a, b) -> [a, b] , szelsoertekhelyek, yok):
    fder := diff(f(x), x);
    mx := max(yok):
    mn := min(yok):
    mxxy := select(t-> t[2] = mx , xyok)[]:
    mnxy := select(t-> t[2] = mn, xyok)[]:
    'szelsoertekhelyekésértékek' = [mxxy, mnxy];
    fgorbe := plot(f(x), x = xa .. xf, color = red):
    fdergorbe := plot(fder, x = xa .. xf, color = blue):
    szelsoertekpont := pointplot([mxxy, mnxy], color = magenta, symbol = circle, symbolsize = 15):
    display(fgorbe, fdergorbe, szelsoertekpont);

  • speed17
    #390
    hmm, van itt egy fv, erre kiakat errort írt, igaz maple 11ben csináltam. f(x):= 2x^3 + 3x^2 -12x +1 és x eleme -1,5. itt ha minden igaz x = 1 lok min. de itt az ábrázolásnál vmiért pampog!
    másik kérdésem, hogy a végpontokat (-1,5) hogy lehet megvizsgálni, a absz. min-maxhelyhez, esetleg azok ábrázolásával együtt?
    huh remélem nem kérdeztem sokat.. csak mostkeztem ismerkedni a maple-el..:)
  • speed17
    #389
    megnézem! köszi!
  • xDJCx
    #388

    Ilyesmire gondolsz? (Maple 12-ben)

    restart; with(plots):
    f := x-> (x-1)^2+3 ; # eredeti függvény
    fder := diff(f(x), x); # deriváltfüggvény
    xp := solve(fder = 0, x); # mely x-nél nulla a derivált
    fgorbe := plot(f(x), x = -2 .. 3, color = red);# eredeti függvény görbe
    fdergorbe := plot(fder, x = -2 .. 3, color = blue); # derivált görbe
    szelsoertekpont := pointplot([xp, f(xp)], color = magenta, symbol = circle, symbolsize = 15); # szélsőértékpont az f görbén
    display(fgorbe, fdergorbe, szelsoertekpont);# együtt ábrázolni őket.

    Ezen kívül az újabb Maplelekben, a standard módban a menüben a Tools-Tutors / Calculus single variable - Curve Analysis vagyDerivatives vagy itt a Limit methods is használható ilyesmire.

  • speed17
    #387
    hali! lenne egy olyan kérdésem, hogy fv-t szeretnék ábrázolni a progival, a határérték számítás közben. ábrázolni a kezdeti fv-t, a deriváltat, majd a szélsőértékeket a deváltban? ez lehetséges valahogy? ha vki tudná a megoldást annak nagyon megköszönném:)
  • xDJCx
    #386
    Ez mechanikai alkalmazásra példa:

    http://matserv.pmmf.hu/hajtas/docs/9/Perj%C3%A9si/Hajt%C3%A1s_Perj%C3%A9si.html