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?:)
ja jóó!!! rosszul másoltam át, csak a fv-nél nincs aza *x!
Ja igen, a példaként kérdezett függvényt elnéztem.
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.
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?
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!
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?
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.
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ó.
Ü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!
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
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.
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.
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.
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ó).
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!
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!
Próbáltad ezt (a contourplot argumentumai közé téve)?
axis[1]=[mode=log],axis[2]=[mode=log]
Ez régebbi Maple-verziókban nem biztos, hogy mûködik. A súgóban axis-ra keresve van leírás róla.
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.
Ü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!
Pl. így:
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:
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;
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.
Ja, és azt lehagytam, hogy nagyon fontos lenne. A segítséget elõre is köszönöm.
Az ingás feladatra egy megoldás (Maple 13-ban):
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;
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.
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!
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!!
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
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.
ezeket is nagyon 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
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!
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 engem is petinho26 lagrange-os feladata érdekelne ha esetleg valaki tudna abban segíteni azt nagyon megköszönném
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! 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
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);
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;
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.
Köszönöm,de sikerült rájönnöm. nagyon köszönöm a megoldásokat.
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);
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
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:
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
Szeretnék parabolát illeszteni 7 tetszõleges pontra azt hogy tudnám megoldani?
Pl. legkisebb négyzetes illesztéssel (ennyi pontra általában nem lehet egy parabolát pontosan illeszteni). A CurveFitting beépített csomag tud legkisebb négyezetes illesztést:
Sziasztok Azt szeretném kérdezni, hogy hol lehet magyarul olvasni a Geometry csomagban lévõ összes utasításról esetleg szöveges file formában (doc), vagy Pdf-ben letölteni, mert a maple könyvek legtöbbje angol nyelvû én meg sajna nem tudok jol angolul és ezekben sincs minden utasítás leirva hogy mitcsinál. A masik amit szeretnék kérdezni, hogy hol lehet beállitani a maple-t, hogy álladóan 2-D-ben legyen mert nekem bizonyos sor után átvált 1-D-be.
Elõre is köszönöm a válaszotokat Üdv Imre
2D bevitel: A menüsorban Tools - Options -Display: itt input display-re 2-D math notationt-t kell választani (a másik lehetõség a Maple notation ez az 1-D-s bevitel). Az ablak alján érvényesíteni kell a beállítást az Apply globally gombbal, újraindításkor már 2-D inputtal indul. Átmenetileg át lehet ekkor is térni az 1-D inputra: Insert menübõl, Maple input: ekkor egy 1-D inputos sort szúr be a munkalapra.
Egyébként én alapbeállításban Worksheet módot (a designos Document mód helyett), és 1-D inputot a használok beviteli sorra, (és 2-D outputot )mert még nem tökéletes a 2-D input (bugos). Akkor térek át ideiglenesen a 2-D inputra, ha pl. egy-egy összetett képletet kell bevinnem, mert ekkor jó, hogy áttekinthetõbb a beírt sor: zárójelezés, törtek jól láthatóak. De elõfordul, hogy ilyenkor is átkonvertálom a bevitt sort 1-D inputra, ha p. programba kell tovább másolnom stb., (ehhez kijelölöm a beviteli sort, jobb egér, 2-D input-convert to 1-D math input).
Document vagy Worksheet stílusú munkalappal indulás beállítása: Tools-Interface Default format for new Worksheets: documnet vagy Worksheet... Ekkor új munkalap létrehozásakor a kiválasztott stílusút hozza létre már.
A geometry csomagra interneten érdemes rékeresni, néhány helyen van róla magyar nyelven is. A helben érdemes a példákat kipróbálni. van klönmenüpont a pldák másolására (copy examples vagy valami hasonló).
Még azt szerettem volna tõled megkérdezni, hogy milyen utasítás a Try-Catch: end Try
Még 1x köszönöm és ne haragudj, hogy ennyit kérdezösködöm. Üdv Imre
Mint más programnyelvekben ez a szerkezet hibakezelésre, kivételkezelésre szolgál. A try ( kisbetûvel ! ) bekapcsolja a hibakezelést, a catch utáni ág pedig hiba fellépte esetén hajtódik végre.
Ha pl. nullával akarsz osztani, hibaüzenetet adna a Maple, ehelyett az alábbi rutinnal egy felhasználói üzenetetet írathatunk ki ekkor:
reciprok1:=proc(x) try 1/x; catch: lprint("Hiba történt! Nullával osztás!"); end try; end proc;
Nem. A finally ág fõszabályként mindig végrehajtódik, akkor is ha volt hiba, akkor is ha nem.
reciprok1:=proc(x) try lprint(1/x); catch: lprint("Hiba történt! Nullával osztás!"); finally: lprint(" Ez mindig végrehajtódik."); end try; end proc;
reciprok1(2);
reciprok1(0);
A Maple súgóban vannak erre példák. Pl. egy jellemzõ használata, hogy egy megnyitott fájlt minden körülmény között le is tudjunk zárni, akkor is ha hiba lépett fel, akkor is ha nem.
(Bizonyos hibák/kivételek esetén nem hajtódik végre a finally ág, ezeket a Maple súgója külön felsorolja.)
Küldj el a fenébe nyugodtan, de szeretnék egy beállitási problémát orvosolni de nem sikerül. Az Alt Gr+3 billentyüvel felsõindexbe lép igaz? De nekem nem ugrik felsõindexbe, helyette egy ^ ilyen jelet tesz alsóindex az megy Shift+ - láttam videot amiben látszik, hogy pl az x-négyzetnél a kurzor fent van. Mi lehet a hiba nálam? Ha tudsz kérlek segits. Üdv Imre
Nálam mûködik, Maple 13-ban, de lehet, hogy te nem a megfelelõ beviteli módban vagy. Ehhez 2-D (Math) input kell. (Azaz ún. Maple inputos módban, azaz a karakteres, piros színû bevitelnél nem mûködik). Ha a Worksheet módban vagy beszúrhatsz így 2-D inputos sort: Insert 2-D Math. Ilyen sorban aztán próbáld meg: pl. x -et ütsz, majd altgr +3-at majd egy space-t és utána ugrik a felsõ indexbe.
Szia a Te módszered nem müködik. Elkezdtem probálgatni és úgy sikerült felsõindexet kicsikarni, hogy megnyomtam az Alt+Ctrl+(2 pillanatra) +3 érdekes nem? Köszi még1x Üdv Imre
Sziasztok! Kellene egy kis segítség ("Ha a feladatok valamelyike megoldható a Maple-egy magas szintû utasításával, akkor azt ne használjuk."): 1. Feladat : Huffmann-kód A bemenõ adataink a jelkészlet, a jelek relatív gyakorisága, illetve a kimenõ jelkészlet. Készítsük el a kódot, teszteljük is. 2. Feladat : Riemann összegegk Készítsünk Riemann integrálközelítõ összegeket a Student csomag nélkül. Vizualizáljunk is! 3. Feladat : Newton-iteráció Az f(x) = 0 egyenlet gyökeinek megtalálásához írjuk meg az iterációt. Készítsünk grafikont is! 4. Feladat* : Szerencsés számok Szerencsés számok Az 1, 2, 3, 4, ... sorozatból töröljünk minden második számot. A 3 szerencsés, a maradó 1, 3, 5, 7, .... sorozatból töröljünk minden harmadik számot! A 7 szerencsés szám, töröljünk a maradó 1, 3, 7, 9, ... sorozatból minden hetedik számot! Írjunk programot az elsõ n számból a szerencsések kiszûrésére. 5. Feladat *: Josephus problémája Kr.u. 70-ben a zsidók fellázadtak a római elnyomás ellen. A harcok végén 40 lázadó egy barlangba vette be magát. Hogy ne kerüljenek rabszolgasorba, elhatározták, hogy megölik magukat. Körbeálltak, 1-tõ 40-ig megszámozták magukat. Ezután minden hetedik embert megöltek. Ezt addig folytatták, míg egy ember maradt, neki öngyilkosnak kellett volna lennie. Utolsónak maradt Josephus Flavius, aki inkább a történetírást választotta az öngyilkosság helyett. Általánosítsuk a kérdést: 40 helyett n-et, 7 helyett –t véve. a, írjuk ki a kivégzési sorrendet! b, Keressük meg Josephust n és k függvényében, hol áll a körben.
A Riemann integrálközelítõ összegekre egy megoldás:
Az f függvény integrálját a..b intervallumban n db téglalap területének összegével közelíti, az opcióban a közelítés módja adható meg itt: "bal", "jobb" vagy "közép" , azaz a részintervallumok bal, jobb vagy középsõ pontjában veszi a függvényértéket a téglalapok magasságához. Az f függvény függvény vagy procedure formában adható meg, azaz pl. f:=x->sin(x)+1;
S:=0;d:=(b-a)/n; if opcio="bal" then S:=evalf(add(f(a+(i-1)*d)*d,i=1..n)); teglalapok:=seq(rectangle([a+(i-1)*d, 0], [a+i*d, f(a+(i-1)*d)], color = blue),i=1..n):
elif opcio="jobb" then S:=evalf(add(f(a+i*d)*d,i=1..n)); teglalapok:=seq(rectangle([a+(i-1)*d, 0], [a+i*d, f(a+i*d)], color = blue),i=1..n):
elif opcio="közép" then S:=evalf(add(f(a+(i-1)*d+d/2)*d,i=1..n)); teglalapok:=seq(rectangle([a+(i-1)*d, 0], [a+i*d, f(a+(i-1)*d+d/2)], color = blue),i=1..n):
A szerencsés számos feladatra egy megoldás, (legalábbis ha jól értem a feladat megfogalmazását):
Szerencsesszamok:=proc(n::posint) local L,k,sz,m; sz:=[]; if n<3 then return sz: end if; L:=[seq(i,i=1..n,2)];k:=2;m:=nops(L); while nops(L)>=k do m:=nops(L); L:=L[remove(i->evalb((i mod L[k])=0) ,[seq(1..m)])]; sz:=[sz[],L[k]];k:=k+1; end do; sz; end proc;