Szeretnék parabolát illeszteni 7 tetszõleges pontra azt hogy tudnám megoldani?
Idõközben sikerült megoldani a dolgot, de azér köszi, és télleg nem nagyon akarnak mûködni a parancsok :D
A # kommentezést jelent, nélküle add meg a megfelelõ sorokat, úgy végrehajtja. Azaz ha elmentetted a kicsomagolt fájlokat a megfelelõ könyvtárba (C:/mylib/gametheory), akkor ezt végre lehet hajtani:
Sziasztok! Nekem egy olyan jellegû problémám lenne, hogy szeretnék egy külsõ csomagot telepíteni, amivel játékelméleti problémákat lehet megoldani, és le is van írva, hogy hogyan kéne, de úgy nem mûködik.
http://www.maplesoft.com/applications/view.aspx?SID=3611 <- itt van az alkalmazás
Installation Instructions Save the files maple.hdb, maple.ind and maple.lib (available in WinZip format by clicking the "Download Code" X on the Application Center) in a directory of your choosing, for instance C:/mylib/gametheory. Then execute the following: > #libname:="C:/mylib/gametheory", libname; > #march('create', libname[1],100); > #savelib('matrixgames'); This saves the matrixgames package as a Maple library on your machine. From now on, in any worksheet where you want to use the matrix games package, execute the commands: > #libname:="C:/mylib/gametheory", libname; > #with(matrixgames);
Ez áll a leírásban, de így nem müködik. 13-as verziót használok.
Elõre is köszi a válaszokat! Üdv! Petya
Köszönöm szépen!
A StringTools beépített csomag ParseTime parancsa megadott stringet próbál dátumként értelmezni. Ha érvényes dátum volt, akkor kiszámolja többek között a hozzá tartozó hét napját is. Azaz az öröknaptárt is tudja. Az elsõ argumentuma a várt dátumformátum, második az értelmezendõ string. Egy példa a súgóból: StringTools[ParseTime]("%Y-%m-%d", "2002-11-05"); A súgóban részletes leírás van róla: ?ParseTime
A feladatban a bemenet 3 szám: év, hónap, nap. Ezekbõl elõször stringet kell készíteni, a ParseTime -ban megadott dátumformátum szerint, erre jó a cat parancs. Pl. cat(2002,"-",11,"-",5);
Köszönöm,de sikerült rájönnöm. nagyon köszönöm a megoldásokat.
Kedves xDJCx! meg tudnád mondani, hogy a dt := ParseTime("%Y-%m-%d", cat(ev,"-",ho,"-",nap)); mit jelent az örökdátumos szövegben? Elõre köszönöm.
A Hanoi-tornyos feladatra egy megoldás, az általános rekurzív algoritmus alapján, és felhasználva Maple stack adattípusát a korongok nyomon követéséhez:
HANOI:=proc(n::posint) description "Hanoi-torony - cél: A oszlopról B-re átrakni a korongokat."; local a,b,c,d,T,k,atrako,lepes; a := stack[new](seq(k,k=n..1,-1)); b := stack[new](); c := stack[new]();lepes:=0; T:=table(["A"=a,"B"=b,"C"=c]); atrako:=proc(korongszam::posint,Aoszlop,Boszlop,atmenetioszlop) if korongszam=1 then d:=stack[pop](T[Aoszlop]); stack[push](d, T[Boszlop]); lepes:=lepes+1; print( cat(lepes,". lépés ",d,Boszlop,", ",Aoszlop,"-->",Boszlop)); else atrako(korongszam-1,Aoszlop,atmenetioszlop,Boszlop); d:=stack[pop](T[Aoszlop]);lepes:=lepes+1; stack[push](d, T[Boszlop]); print(cat( lepes,". lépés: ",d,Boszlop,", ",Aoszlop,"-->",Boszlop)); atrako(korongszam-1,atmenetioszlop,Boszlop,Aoszlop); end if; end proc; atrako(n,"A","B","C"); end proc;
A gráfos feladatra egy megoldás, nagy n-re itt sem érdemes próbálkozni:
SZINEZES2:=proc(n::posint) local reszhalmazok,szamuk,reszhalmazokhalmaza,csucsnevek,G,R,H,k,m; uses GraphTheory; if n<2 then return "Kevés a pontok száma!";end if; reszhalmazok:=combinat:-choose(n,2);#2 elemu reszhalmazok eloallitasa reszhalmazokhalmaza:=map(convert,reszhalmazok,set)[];# tipuskonverzio halmazza szamuk:=nops(reszhalmazok);# ezek szama, ez eppen n alatt a 2 lenne R:={}:# elek letrehozasa for k from 2 to szamuk do for m from 1 to k-1 do if `intersect`(reszhalmazokhalmaza[k] , reszhalmazokhalmaza[m])={} then R:=R union {{k , m}}:end if;end do;end do; G := Graph([$1..szamuk]);AddEdge(G, R);# graf letrehozasa csucsnevek:=map(t->convert(t,'string'),[reszhalmazokhalmaza]);# csucsok cimkezesehez H := RelabelVertices(G, csucsnevek);# csucsok uj cimkekkel ellatasa print(cat("Csúcsszinezési szam: ",ChromaticNumber(H)));# csúcsszínezési szám DrawGraph(H);
Sziasztok! Kérlek segítsen, aki tud. Megpróbáltam megoldani, de nem nagyon sikerült. Sürgõs lenne.
HANOI Készítsünk maple programot, mely a Hanoi tornyok nevû játék megoldását írja ki. A játékban három rúd (A,B,C) és n különbözõ méretû korong van (1,2,...,n sugarúak). A korongok eredetileg az A rúdon találhatóak. A feladat: úgy áthelyezni õket a B korongra, hogy mindig csak egy korongot mozgatunk, és kisebb korongra nem helyezhetünk nagyobbat. Ha pl. 3 korong van, egy megoldás: 1B, 2C, 1C, 3B, 1A, 2B, 1B. (1B azt jelenti, hogy a legkisebb korongot tesszük a B rúdra stb.). Az n szám legyen paraméterként megadható.
SZÍNEZÉS2 Az {1, 2, ..., n} halmaz kételemû részhalmazain mint csúcsokon definiáljuk a következõ gráfot: két részhalmaz akkor van összekötve (egyszeres, irányítatlan) éllel, ha diszjunkt. Hozzuk létre ezt a gráfot, és írassuk ki a csúcsszínezési számát.
ÖRÖKNAPTÁR Készítsünk öröknaptárt, mely 1800 és 2300 között bármely év bármely napjáról megmondja, hogy a hét melyik napjára esett/esik. A feladathoz hozzátartozik az is, hogy tudni kell pl. a szökõévekrõl. A bemenet 3 szám: év, hónap, nap. Kimenet a hét megfelelõ napja.
Köszi
Az újdonságok részletesen az online-helpben olvashatók:
A tétel szerint minden egész elõáll 4 négyzetszám összegeként, háromra már nem igaz ez. Erre is van külön tétel..
LANGRANGE:=proc(n::posint) local k,m,s; s:=cat(n," elõáll 3 négyzetszám összegeként. "); for k from 0 to n do for m from 0 to n do if 4^k*(8*m+7)=n then s:=cat(n," nem all elo 3 negyzetszam osszegekent! "):end if; end do; end do; s; end proc;
LANGRANGE(168);# pl. 168 nem áll elõ 3 négyzetszám összegeként
2. eljárás: 1..n-ig megnézi, melyek nem állnak elõ 3 négyzetszám, összegeként:
LANGRANGEs:=proc(N::list) local k,m,n,s,nemallnakelo,t; n:=nops(N);nemallnakelo:=[]: for t from 1 to n do for k from 0 to n do for m from 0 to n do if 4^k*(8*m+7)=N[t] then nemallnakelo:=[nemallnakelo[],N[t]]:end if; end do; end do; end do; lprint(cat("Ezek az egeszek nem allnak elõ 3 negyzetszam osszegekent 1- ",n,"-ig:"));nemallnakelo; end proc;
Sziasztok engem is petinho26 lagrange-os feladata érdekelne ha esetleg valaki tudna abban segíteni azt nagyon megköszönném
:D Nagyon szépen köszönöm xDJCx-nek!!
Ez egy megvalósítása Mapleben, lehetne ennél hatékonyabban is:
Erathosztenes:=proc(n::posint) local F,Ki,m,t; if n=1 then return NULL: end if; F:=Array(1..n); m:=2: while m^2<=n do if F[m] = 0 then t:=2; while m*t<=n do F[m*t] := 1 : t:=t+1; end do: end if; m:=m+1; end do; t:=0; for m from 2 to n do if F[m]=0 then t:=t+1;Ki[t]:=m; end if; end do; convert(Ki,'list'); end proc;
pl. 1..50-ig a prímszámok Erathosztenész szitájával:
Erathosztenes(50);
1..n-ig a primeket egyszerûbben is meg lehet kapni a Mapleben a beépített prímtesztelõ parancsát (isprime) felhasználva:
Sziasztok! Nagyon tettszik ez a Maple program, hát még hogyha használni is tudnám rendesen... Még nemrég kezdtem el vele foglalkozni, így sajna megakadtam az egyik feladatomban. Ha valaki tudna nekem segíteni, akkor azt nagyon megköszönném! A feladat a következõ: Erathosztenész szitája: a szita mûködésének szimulálása tetszõleges pozitív egész n-re. A végén az eljárás az 1..n számok közül írja ki a primeket. Elõre is köszönöm!
Ezekkel a bemenõ paraméterekkel a Föld keringését szimulálja a procedura( a perihéliumból indítva a szimulációt, vmax sebességgel) :
perihelium:=147098074*1e3; #m Föld Nap min.távolság MNap:=1.98892*1e30;#kg Nap tömege Gertek:=6.67428*1e-11; # gravitációs állandó vmax:=30287;#m/s Föld max. sebessége dTFold:=24*60*60;#sec idõ lépésköz
A Kepleres feladathoz kapcsolódva az alábbi procedura egy bolygó Nap körüli mozgását szimulálja Newton-törvény és a gravitációs törvény alapján. Az elméleti háttere Feynman: Mai fizika I. kötetében le van írva, és onnan származnak a példa kezdeti paraméterei értékei is. (Lehetne szebben is megírni, de most annyi idõt nem töltöttem vele.)
restart;with(plots): bolygo:=proc(N,dt,x0,y0,vx0,vy0,M,G) description "Bolygómozgás számítása Gravitációs és Newton törvénybõl Forrás: Feynmann : Mai fizika I. ";
#N;# iterációk száma #dt;# idõlépésköz #x0;y0;vx0;vy0;# t=0-beli kezdeti pálya adatok #M,G;# Nap tömege és gravitációs állandó local x,y,xyuj,vx,vy,ax,ay,vxtmdt2,vytmdt2,vxtpdt2,vytpdt2,txy,nap,k,r,Txy,xt,yt,axt,ayt,bolygo,mozgo,ujpalyaadatok; use plots in x:=Array(1..N):y:=Array(1..N):vx:=Array(1..N):vy:=Array(1..N):ax:=Array(1..N):ay:=Array(1..N): txy:=Array(1..N): xyuj:=proc(xt,yt,vxtmdt2,vytmdt2) local r,axt,ayt,xuj,yuj,vxtpdt2,vytpdt2: r:=sqrt(xt^2+yt^2): axt:=-G*M*xt/r^3:ayt:=-G*M*yt/r^3: vxtpdt2:=vxtmdt2+dt*axt: vytpdt2:=vytmdt2+dt*ayt: xuj:=xt+dt*vxtpdt2: yuj:=yt+dt*vytpdt2: [xuj,yuj,vxtpdt2,vytpdt2]: end proc; txy[1]:=[0,x0,y0]:#t=0 xt:=x0:yt:=y0: r:=sqrt(xt^2+yt^2):# t=0-ban axt:=-G*M*xt/r^3:ayt:=-G*M*yt/r^3:# t=0-ban vxtmdt2:=vx0+dt/2*axt:vytmdt2:=vy0+dt/2*ayt: # t=dt/2-ban # t=dt xt:=x0+vxtmdt2*dt;yt:=y0+vytmdt2*dt:#t=dt txy[2]:=[dt,xt,yt]:# t=dt ujpalyaadatok[1]:=xt:ujpalyaadatok[2]:=yt: ujpalyaadatok[3]:=vxtmdt2:ujpalyaadatok[4]:=vytmdt2: for k from 3 to N do xt:=ujpalyaadatok[1];yt:=ujpalyaadatok[2]; vxtmdt2:=ujpalyaadatok[3]:vytmdt2:=ujpalyaadatok[4]: ujpalyaadatok:=xyuj(xt,yt,vxtmdt2,vytmdt2): txy[k]:=[(k-1)*dt,ujpalyaadatok[1],ujpalyaadatok[2]]: end do: Txy:=seq([txy[t][2],txy[t][3]], t=1..N): bolygo:= proc(xy) plots[pointplot]([xy],color=blue,symbol=solidcircle,symbolsize=20) end proc: mozgo:=seq(bolygo(Txy[n]), n=1..N):nap:=plots[pointplot]([0,0],color=yellow,symbol=solidcircle,symbolsize=40): display(nap,display(mozgo,scaling=constrained,insequence = true,axes=normal)); end use; end proc;
bolygo(82,0.05,0.5,0,0,1.63,1,1);# G és M 1-nek választva itt.
Az alábbi program a Maple beépített színezési szám utasításával számol, adott N-re (1..N csúcsok, relatív prím élekkel.) Kisebb N-ekre kiszámolja a színezési számot, de nekem nem sikerült vele N=100-ra kiszámoltatnom, azaz 10 perc után leállítottam. Több mint 3000 éle van ennek gráfnak. Továbbá nagy N-re ábrázolni sem érdemes, mert összemosódnak az élek.
restart;with(GraphTheory): N:=10; nek:=$1..N;# csúcsok számozása R:={};# relativ prím csúcspárok létrehozása for k from 2 to N do for m from 1 to k-1 do if igcd(k,m)=1 then R := R union {{k,m}}: end if: end do; end do; G := Graph([nek]);# gráf létrehozása : csúcspontok AddEdge(G, R);# élek megadása DrawGraph(G);# rajzolása ChromaticNumber(G);# csúcsszínezési szám
helló Köszönöm szépen a segítséget xDJC-nek. NAgyon nagy segítség volt köszönöm szépen!!
Üdvözletem! Köszönöm a segítséget xDJCx-nek!
Egy újabb feladatban kérném a segítséget. Szintén Maple... A feladat:
Az 1-tõl 100-ig terjedõ egészeken mint cúcsokon definiáljunk egy gráfot, melyben pontosan azok a számok vannak (egyszeres, irányítatlan) éllel összekötve, melyek relatív prímek. Hozzuk létre a kívánt gráfot, és számítsuk ki a csúcsszínezési számát.
Elõre is köszönöm!
A kuponos feladathoz a kísérletek szimulálására egy megoldás:
KUPON:=proc(n::posint) local M,K,L,k,S1,S2,X,Xs,m; M:=1000;# kiserletek szama K:=20*n;# ennyi probalkozas legyen maximum egy kiserletben S1:={$1..n};# 1..n-ig az egeszek halmaza L:=Array(1..M): use Statistics in X:=RandomVariable(DiscreteUniform(1, n)): randomize(); for k from 1 to M do # M db kiserlet S2:={};Xs:=convert(Sample(X,K),list); for m from 1 to K do S2:=S2 union {floor(Xs[m])};# tipsukonverzio miatt a floor if m=K then lprint("Kevés a probalkozasok száma!");end if;
if S1 subset S2 then L[k]:=m: #lprint(k,m,Xs[1..m]): ;break: # ha 1..n-ig megvannak a szamok megall a kiserlet end if: end do: end do: Mean(L),min(L),max(L); end use: end proc;
Például n=5-re:
KUPON(5); # átlagot, min., maxot ír ki.
A #lprint(k,m,Xs[1..m]): sor helyére lprint(k,m,Xs[1..m]): -et írva, kiírja az összes kísérlet eredményét.
INGA:=proc(theta0) description "Inga mozgása, bemenet: theta0 kezdeti szög fokban."; local thetao,x,y,t,ingaabra,theta,abrak,T; use plots in thetao:=2*Pi/360*theta0; T:=10; theta:=t->thetao*cos(2*Pi*t/T); x:=t->evalf(sin(theta(t))): y:=t->-evalf(cos(theta(t))):# koordináták idõfüggvénye ingaabra:=t->plot([[[x(t),y(t)]],[[0,0],[x(t),y(t)]]],style=[point,line],symbol=solidcircle,symbolsize=15,color=[red,black],title=typeset("szög = ",evalf[3](theta(t)/(2*Pi)*360))): abrak:=seq(ingaabra(r/5),r=0..T*5): display(abrak,insequence=true,axes=boxed,scaling=constrained,gridlines=true,axes=normal); end use: end proc;
Ja, és azt lehagytam, hogy nagyon fontos lenne. A segítséget elõre is köszönöm.
Helló Nekem segítségre lenne szükségem. Aki tud segítené lécci válaszoljon. a következõk a feladatok: 1 KEPLER Ábrázoljunk a Föld mozgását a Nap körül a Kepler-törvényeknek megfelelõen (a Naphoz képest elhanyagolhatónak tekintve a Föld tömegét). Az animáció lehet 2 dimenziós, a Nap és a Föld egy-egy kör (nem kell méretarányosan). Az animáció egy teljes fordulatot jelenítsen meg.
2 INGA Készítsünk animációt, mely egy hosszú kötélen függõ gömb (inga) mozgását mutatja. Az inga mozgását közelítsük harmonikus rezgõmozgással. Paraméterként lehessen megadni, hogy hány fokos a maximális kilengés. Egy teljes periódust ábrázoljunk.
3 KUPON Egy csokifajta minden dobozában található egy kupon, melyen az 1, 2, ..., n számok valamelyike (vagy ha úgy tetszik n sztár valamelyikének fényképe, vagy bármi hasonló) látható. Mindegyik kupon elõfordulásának valószínûsége azonos (1/n). Átlagosan hány csokit kell venni ahhoz, hogy mindegyik kuponból összegyûljön legalább 1 darab? Végezzünk 1000 független kísérletet, és írjuk ki az átlagot, minimumot, maximumot. Az n érték paraméter.
4 LAGRANGE Készítsünk listát, melyben azon 1 és n közötti egészek szerepelnek, melyek elõállnak 4 négyzetszám összegeként, de 3 négyzetszám összegeként nem.
Módosított eljárás (elõbb nem találtam a közvetlen parancsot az oldalfelezõ merõleges rajzolásra):
haromszog:=proc(p1,p2,p3) description "Háromszog, korulirt kore es oldalfelezo merolegesei. "; use geometry in # pontok objektumainak letrehozasa a p1, p2, p3 koordinata-listakbol point(A,op(p1));point(B,op(p2));point(C,op(p3)); # egy egyenesen vannak-e a pontok if (AreCollinear(A,B,C)=true) then print("Nem alkotnak háromszöget a pontok!"); else # haromszog objektum letrehozasa a csucspontokbol triangle(T,[A,B,C]); # korulirt kor letrehozasa circumcircle(Elc, T, 'centername' = o);detail(Elc); # oldalfelezo merolegesek PerpenBisector(pb1, A,B);PerpenBisector(pb2, A,C);PerpenBisector(pb3, B, C); draw([Elc(color=red),T(color=blue),pb1(color=brown),pb2(color=brown),pb3(color=brown)],printtext = true,axes=normal,gridlines=true); end if; end use;
haromszog:=proc(p1,p2,p3) description "Háromszog, korulirt kore es oldalfelezo merolegesei. "; use geometry in # pontok objektumainak letrehozasa a p1, p2, p3 koordinata-listakbol point(A,op(p1));point(B,op(p2));point(C,op(p3)); # egy egyenesen vannak-e a pontok if (AreCollinear(A,B,C)=true) then print("Nem alkotnak háromszöget a pontok!"); else # haromszog objektum letrehozasa a csucspontokbol triangle(T,[A,B,C]); # korulirt kor letrehozasa circumcircle(Elc, T, 'centername' = o);detail(Elc); # a haromszog oldalegyenesei az oldalfelezo merolegesek eloallitasahoz line(e1, [A, B]);line(e2, [A, C]);line(e3, [C, B]); # oldalfelezo pontok midpoint(C1, A, B);midpoint(C2, A, C);midpoint(C3, C, B); # oldalfelezo merolegesek PerpendicularLine(ep1, C1,e1);PerpendicularLine(ep2, C2, e2);PerpendicularLine(ep3, C3, e3); draw([Elc(color=red),T(color=blue),ep1(color=brown),ep2(color=brown),ep3(color=brown)],printtext = true); end if; end use;
end proc;
A bemeneti csúcsontok koordinátáit kételemû listákban kell ennek az eljárásnak megadni:
Üdv! Egy feladat megoldása érdekelne! Aki tud segíteni annak elõre is köszönöm! Mielõbbi megoldás érdekelne!!! A feladat:
Háromszög köré írt kör Írjunk olyan eljárást, amelynek bemenõ paramétere három síkbeli pont. Ellenõrizzük, hogy ez a három pont egy egyenesre esik-e. Ha nem, akkor rajzoljuk meg közös koordináta rendszerben az általuk alkotott háromszöget, azok oldalfelezõ merõlegeseit és a háromszög köré írt kört. Használjuk ehhez a geometry package-et!
Elõre is köszönöm a segítséget!
Köszi, megtaláltam korábban ezt a leírást, viszont a TEMP és TMP könyvtárak számára valószínû nem megfelelõ környezeti változót adtam meg, mert maradt a hibaüzenet. Valamint a "silent" installálás alatt nem tudom mit értenek a leírásban, amit belinkeltél.
Megakadtam egy ábrázolás közben - hátha vki tudja kapásból a helyes utat:
Szintvonalakat rajzolok 2D-ben (egy 3 változós fgv-ét: z=z(x,y) és ennek a z1, z2, ..., zN értékekhez tartozó kontúrjait rajzolom, h lehessen kinyomtatni)
Hogyan lehet azt beállítani, h a két tengely (vagy külön-külön) logaritmikus léptékûek legyenek??
contourplot(z,x=xmin..xmax,y=ymin..ymax,contours=[z1, z2, z3, ...] alakú, amit használok. Elõre is köszönöm!
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!
É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));
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ó).
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.
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:
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.
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.
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
Ü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!
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, Y), i = 1 .. nops(X))*Alapter/N; evalf(%); gc();
Ha növeljük N-et, akkor pontosabb megoldás várható.
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,Y),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.
Maple a magyar nyelvû wikipedian:
http://hu.wikipedia.org/wiki/Maple_(szoftver)
Ilyenkor át kell váltani az F5-tel a Maple input módra (piros színû legyen a bevitel), ekkor nem teszi alsó indexbe.
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?
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!
már rájöttem, vagyis jól használtam eredetileg is csak valamit már a kódon belül rontottam el :)
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?
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.
ja jóó!!! rosszul másoltam át, csak a fv-nél nincs aza *x!
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?:)
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);
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.
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.
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.
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, ...
ó 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?
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.
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!?
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);
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..:)
megnézem! köszi!
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.
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:)