Newton-iterációra egy megoldás (Maple 13). Bemenetek: Az f függvény, ezt Maple függvény-formájában kell megadni azaz pl. f:=x->cos(x); x0 kiinduló érték (kezdeti becslés) x-re (honnan kezdje a gyökkeresést), n: iterációk száma nezet: a függvény ábrázolás tartománya: [xmin..xmax, ymin..ymax] formában
Newton:= proc(f,x0::realcons,n::posint,nezet::list:=[-5..5,-5..5]) description "Newton-iteráció"; local x,xregi,m,abrak; uses plots,plottools; x := x0:xregi:=x0;abrak:=[]; for m from 1 to n do x := evalf(xregi-f(xregi)/D(f)(xregi)); abrak:=[abrak[],point([x, 0], color = green, symbol = circle, symbolsize = 12),line([xregi,0],[xregi,f(xregi)], color = blue, linestyle = dash),line([xregi,f(xregi)],[x,0], color = blue, linestyle = solid)]; xregi:=x; end do: x:='x'; display(plot(f(x),x=nezet[1],color=red,numpoints=1000),point([x0, 0], color = black, symbol = circle, symbolsize = 12),abrak,view=nezet,gridlines=true,title=typeset("Newton-módszer\n f(x) = ",f(x),"\n",x[0]=x0," , n =" ,n,"\n x =",xregi)); end proc;
# pl.:
f:= x-> cos(x): Newton(f,0.5,3,[0..3,-1.5..1.5]);
# Összevethetõ a beépített algoritmussal: # ábra: Student[Calculus1][NewtonsMethod]( cos(x), x = 0.5, output = plot, iterations = 3 );
# érték Student[Calculus1][NewtonsMethod]( cos(x), x = 0.5, output = value, iterations = 3 );
Sziasztok egy kis segitségre lenne szükségem. Azt szeretném meg tudni, hogy, hogy lehet ábrázolni pl.: a két ponton átmenõ egyenest és a normál vektort vagy az irány vetort. Elõre is köszönöm
Többféle módon lehet, pl. az alábbiakban lépésenként elõállítva a vektorokat és egyenest:
restart;with(plots): p1:=<0,1>;p2:=<3,5>;# p1 és p2 pontok megadása p1=<x1,y1> és p2=<x2,y2> formában m:=(p2[2]-p1[2])/(p2[1]-p1[1]);# egyenes meredeksége m= (y2-y1)/(x2-x1) szerint y:=m*(x-p1[1])+p1[2];# p1 és p2 pontokon átmenõ egyenes egyenlete y=m*(x-x1)+y1 alakban egyenesabra:=plot(y,gridlines=true,linestyle=dash); iranyvektor:=<1,m>; normalvektor:=<-m,1>; x0:=0;# pl. x=0 pontban rajzolom fel a vektorokat p0:=<x0,eval(y,x=x0)>;# egyenes értéke az x0 pontban, innen fogom rajzolni az irányvektort iranyvektorabra:=plots[arrow](p0,iranyvektor,shape = arrow,color=black); normalvektorabra:=plots[arrow](p0,normalvektor,shape = arrow,color=blue); display(iranyvektorabra,normalvektorabra,egyenesabra,scaling=constrained,view=[-4..4,-4..4],title=typeset("y = ",y));
Van a Geometry csomagban egy triangle nevü utasitás és ebben többféle modon is lehet háromszöget definiálni, három pont megadásával, vagy három oldal definiálásával,esetleg három vonalal is,de nekem az a verzios amiben igykell: triangle(T,[2,'angle'=pi/2,1],[x,y]) valahogy nem müködik.Mindig ezt a hiba üzenetet küldi:Error, (in geometry:-HorizontalCoord) wrong type of argument. Egyébbként, ha oldalt adunk meg milyen értékben kell megadni centiméter vagy mi? Az iskolás srácnak igy nem nagyon tudok segiteni ezért fordulok hozzátok. Elõre is köszönöm Gimre
Úgy tûnik az a probléma (azon kívül, hogy Pi-t kell írni pi-helyett), hogy nem tudja ábrázolni, ha nem koordinátákkal (csúcspontokkal) van megadva háromszög, hanem oldalhosszakkal, vagy két oldal hosszával és a közbezárt-szöggel, mert így nem tudja hova kell tenni a csúcspontokat a koordináta -rendszerben. Persze felvehetne a Maple egy csúcspontot és egy elforgatási szöget önkényesen, amelyekhez képest az oldalhosszakból és közbezárt szögbõl kiszámolva a többi csúcspontot fel tudná rajzolni a háromszöget, de ezt nem teszi meg. Nem látok elsõre erre opciót ezért írtam egy kis eljárást, amely 2 oldalhosszával és közbezárt szöggel megadott háromszöget csúcspontokkal megadott háromszöggé konvertálja, amit már fel lehet rajzolni:
T2oldalszog:=proc(T) local Tmod,a,b,szog,A,B,C; uses geometry; a:=DefinedAs(T)[1]:b:=DefinedAs(T)[3];szog:=rhs(DefinedAs(T)[2]); triangle(Tmod,[point(A,0,0),point(B,a,0),point(C,cos(szog)*b,sin(szog)*b)]); Tmod; end proc;
with(geometry):
triangle(T,[2,'angle'=Pi/2,1]);
haromszog:=T2oldalszog(T);
draw(haromszog);
Mértékegység: nincs itt mértékegységrõl szó, nincs is jelentõsége, ezek egymáshoz viszonyított méretek. A Maple úgy méretezi az ábrát a képernyõn , hogy jól kiférjen, illetve szabadon átméretezheted az ábrát.
Sziasztok! Lenne egy kérdésem. Lehet-e a mapleban megirt függvényt az excelben megirt függvénybõl meghivi valahogy??
Elõre is köszönöm Üdv Gimre
Igen. Többlépéses a dolog.
1. Excelbõl Maple elérését kell aktivizálni: A Maplehez adott Excel bõvítményt, add-int kell az Excelben bekapcsolni. Ez a bõvítmény WMIMPLEX.xla -néven a Maple Excel könyvtárában található. ( Pl. nálam a C:\Program Files\Maple 14\ExcelWMIMPLEX.xla útvonalon.
Lásd a Maple helpben is:
Enabling the Add-in for Excel 2007 To enable the Maple Excel Add-in: 1. Click the Microsoft Office Button and select Excel Options. 2. Click Add-ins. 3. In the Manage box select Excel Add-ins, then click Go. 4. Navigate to the Excel subdirectory of your Maple install and select WMIMPLEX.xla (that is, select $MAPLE/Excel/WMIMPLEX.xla), and click OK. 5. Select the Maple Excel Add-in check box. 6. Click OK. Enabling the Add-in for versions of Excel prior to Excel 2007 To enable the Maple Excel Add-in: 1. From the Tools menu in Excel, choose Add-Ins. 2. If you are using a version of Microsoft Office that is not English, French, or German, the Maple Excel Add-in is not listed. To make the Add-in available: a . Click Browse and navigate to the directory in which Maple is installed. b . In the Excel directory, select the WMIMPLEX.xla file. c . Click OK. 3. Select the Maple Excel Add-in check box. Click OK.
Ha sikerült, akkor már meg lehet hívni a Maple parancsokat Excelbõl, némileg speciális formában:
pl. Excel cellába írva =maple("x+x") Erre 2*x-et ad, ha sikerült a bõvítmény telepítése. Vagy pl. =maple("expand((a+b)^2)") Erre a^2+2*a*b+b^2 -et ad.
Az exceles cellahivatkozást speciális módon kell megadni a maple hívásban: Pl. A2-es cellára hivatkozás: ( mondjuk négyzetre akarom emelni az a2-es cella tartalmát):
=maple((&1)^2,A2)
Ha pl. A2-be x-et írtam akkor a fenti parancs x^2-õt eredményez. (Azaz a speciális hivatkozási mód &1 és vesszõvel elválasztva a cella azonosítója) Lásd a helpben szintén... (Ez tartományra is mûködik egyébként : pl. =maple("M := Matrix(&1);", A1:A2) stb...)
2. Saját maple-függvény hívása Excelbõl
Ha már mûködnek Excelbõl a Maple beépített függvényei , akkor lehet a saját maple függvények hívásával is próbálkozni.
Ehhez írjuk meg Maple-ben a saját függvényeinket pl. module-ként, és mentsük el egy maple csomagként. - Írjuk be egy maple inicializáló fájlba, pl. maple.ini-be a csomag betöltési parancsát. - Majd az Excelben a maple-bõvítményhez tartozó eszköztáron hivatkozzunk erre az incializáló fájlra.
- Excelben elérhetõvé válik ezután a saját függvényünk.
Ezek a lépések konkrétan egy példában:
Saját függvény készítése, module-ként a Mapleben, és ezt egy maple csomagként mentése: Legyen a saját függvényem neve Negyzetre ez például az egyszerûség kedvéért négyzetre emel.A csomag neve MyPackage pl.Végrehajtva Mapleben az alábbiakat létrejön a MyPackage csomag.
Ezután pl. a C:\Program Files\Maple 14\maple.ini -fájlba írjuk be a következõ sort és mentsük el a féjlt.:
with(MyPackage);
(Ha nem volt ilyen fájl, akkor hozzuk létre létre, sima szöveges fájl. ha volt benne más is azt ne bántsuk, a fenti sort csak írjuk hozzá.)
Az Excelben a Maple toolbaron (piros ikonok) a 3. ikonra kattintva (a 3 pipás ikon) az Initialization and User packages fülön a Maple initialization féájl szövegdobozba adjuk meg az inicializáló fájl útvonalát: azaz a példában C:\Program Files\Maple 14\maple.ini -et és accept-álljuk. (Esetleg újraindítás kellhet.) Ezután elérhetõ a saját függvényünk ( itt Negyzetre néven) , pl. az alábbi formában:
Régi kérdés, de érdekességképpen itt egy megoldás a Josephus-problémához Mapleben:
Josephus := proc (n::posint, k::posint) local L, m; L := [`$`(1 .. n)]; m := 0; while 1 < nops(L) do m := m+1; L := ListTools[Rotate](L, k-1); print(m, ".kivégzett: ", L[1]); L := remove(t-> evalb(t = L[1]) , L): end do; print("Josephus ", L[1], "-ik a körben.") end proc;
Josephus(40, 7);
http://www.cut-the-knot.org/recurrence/j_solution.shtml Összevethetõ, a link szerint pl.n=100, k=10-nél 26, n=1000, k=3 -nál 604-nek kell lenni. Josephus(1000, 3);
Egy kis animációval kiegészítettem az elõzõ megoldást a Josephus-problémára.
Egy további M paraméter is megadható az eljárás hívásakor: M egy opcionális paraméter, ha n>M akkor nem rajzol, csak kiír (ha túl nagy lenne n a szép rajzoláshoz). Ha nem adjuk meg M-et, akkor 100-nak veszi.
A futtatáskor a megjelenõ animációs ablakba kattintva megjelenik egy animációs menüsor a Maple ablakában. Innen indítható az animáció, vagy lépésenként futtatható, illetve az FPS mezõben megadható, hogy milyen gyors legyen (pl. FPS 1-nél másodpercenként léptet). Szintén Maple 14-ben készült. Az eljárás:
Josephus2 := proc (n::posint, k::posint,M::posint:=100) local L, m,p1,t1,p2,p3,kiv; description "Josephus-probléma: n-en állnak körben, minden k-adikat kivégzik, amíg egy marad csak (Josephus)."; # M opcionális paraméter: ha n>M, akkor nem rajzol, csak kiír, ha nincs megadva, akkor M=100 uses plots; gc(); L := [$1 .. n]; m := 0; p2:=Array(1..n): t1 := textplot({seq([.9, (-2*Pi*(i-1))*(1/n)-3*Pi*(1/2), i], i = 1 .. n)}, coords = polar, color = blue, axes = none): setoptions(title="Josephus-probléma",font=[Times,roman,11], axes=none,symbolsize = 20,symbol = soliddiamond,view=[-1.3..1.3,-1.3..1.3]); while 1 < nops(L) do m := m+1; L := ListTools[Rotate](L, k-1); if n<=M then kiv:={L[]} minus {L[1]}; p2[m]:=display( textplot([0,0, cat(convert(m,string),". kivégzett: ",convert(L[1],string))], coords = polar,color = blue, axes = none),pointplot({seq([1, (-2*Pi*(i-1))*(1/n)-3*Pi*(1/2)], i in kiv)},coords = polar, color = blue),pointplot([1, (-2*Pi*(L[1]-1))*(1/n)-3*Pi*(1/2)], coords = polar, color = red)): else print(cat(m, ". kivégzett: ", L[1])); end if: L := L[2..-1]: end do;gc(); if n>M then print(cat("Josephus ", L[1], "-ik a körben.")); else; p3:=display( textplot([0,0, cat("Josephus helye: ",convert(L[1],string))], coords = polar, color = blue),pointplot([1, (-2*Pi*(L[1]-1))*(1/n)-3*Pi*(1/2)], coords = polar, symbolsize = 20, color = green)): display(t1,display([ seq(p2,i=1..m),p3],insequence = true)); end if; end proc;
Úgy néz ki, valamiért nem mûködik a munkalapról bemásolt elõbbi eljárás, ami pedig ott jól mûködött. Újabb próbálkozás:
Josephus2 := proc (n::posint, k::posint,M::posint:=100) local L, m,p1,t1,p2,p3,kiv; description "Josephus-probléma: n-en állnak körben, minden k-adikat kivégzik, amíg egy marad csak (Josephus)."; # M opcionális paraméter: ha n>M, akkor nem rajzol, csak kiír, ha nincs megadva, akkor M=100 uses plots; gc(); L := [$1 .. n]; m := 0; p2:=Array(1..n):
setoptions(title="Josephus-probléma",font=[Times,roman,11], axes=none,symbolsize = 20,symbol = soliddiamond,view=[-1.3..1.3,-1.3..1.3],color=blue); t1 := textplot({seq([.9, (-2*Pi*(i-1))*(1/n)-3*Pi*(1/2), i], i = 1 .. n)}, coords = polar): while 1 < nops(L) do m := m+1; L := ListTools[Rotate](L, k-1); if n<=M then kiv:={L[]} minus {L[1]}; p2[m]:=display( textplot([0,0, cat(convert(m,string),". kivégzett: ",convert(L[1],string))], coords = polar),pointplot({seq([1, (-2*Pi*(i-1))*(1/n)-3*Pi*(1/2)], i in kiv)},coords = polar),pointplot([1, (-2*Pi*(L[1]-1))*(1/n)-3*Pi*(1/2)], coords = polar, color = red)): else print(cat(m, ". kivégzett: ", L[1])); end if: L := L[2..-1]: end do;gc(); if n>M then print(cat("Josephus ", L[1], "-ik a körben.")); else; p3:=display( textplot([0,0, cat("Josephus helye: ",convert(L[1],string))], coords = polar, color = blue),pointplot([1, (-2*Pi*(L[1]-1))*(1/n)-3*Pi*(1/2)], coords = polar, symbolsize = 20, color = green)): display(t1,display([ seq(p2,i=1..m),p3],insequence = true)); end if; end proc;
Na jó, feladom, szivat a fórum. Szerkesztéskor még látszik, aztán küldés után eltûnik innen. Szóval a kérdéses sorban a p2 után van egy nyitó szögletes zárójel, egy i-betû és egy záró szögletes zárójel.
Sziasztok! Azt szeretném kérdezni, hogy milyen tipus az 'atomic' és az evaln() mit értékel ki. Nagyon köszönöm
Javaslom,hogy elõször nézd meg a Maple helpjében az idevonatkozó példákat. Az atomic típushoz a súgó: ?type,atomic Az atomic arra utal , hogy valamilyen értelemben nem bontható tovább az ilyen típusú objektum. A pontos definícióját is megtalálod a súgóban (ehhez ismerned kell a map parancsot,mert azzal definiálja) És felsorolja, mely Maple típusok egyben atomic-ok is. pl. atomic típusúak a számok, vagy csupa számokból alkotott matematikai kifejezések. Nem atomic pl. a lista típus, vagy olyan algebrai kifejezés, amely tartalmaz érték nélküli szimbólumot stb.
A map parancs viselkedésben látod a különbséget az atomic és nem atomic esetben. Az alábbi példákban map parancs elsõ paramétereként a sin függvény van megadva, ezt alkalmazza a parancs a második paraméterére. Ha ez utóbbi atomic típusú, akkor másként viselkedik a map parancs mint, amikor ez nem atomic :
restart; map(sin,2/3);# 2/3 atomic (mert csak egy szám) map(sin,a/b);# a/b nem atomic (feltéve, hogy elõtte nem adtunk a-nak és b-nek szám értéket), ezért külön-külön alkalmazza map parancs a sin függvényt a-ra és b-re
type(2/3,'atomic');# típus ellenõrzés 2/3 atomic-e? type(a/b,'atomic');
?evaln névvé kiértékelés: pl.
i:=3; evaln(i);# visszakapod az i szimbólumot nem pedig a 3-at. i;# evaln nélkül 3-at ad.
Sziasztok! Nem akarok az agyatokra menni de azt szeretném megtudni hogy lehet a Maple-ban a számtani-, és a mértani- sorokat prezentálni? számtanisor: a[n]= a[1]+(n-1)*d, mértani: a[n]=a[1]*q^(n-1). Nekem olyan kellene ami esetleg kiszámitja a hiányzo értékeket -bármelyik is hiányzik vagy nincs megadva- ahogy az iskolában a tanár megadja a paramétereket. Köszönöm. És mégegyszer köszi Üdv Imre
A Mapleben nincs olyan parancs, amely közvetlenül számolni lehetne a hiányzó paramétereket ebben az esetben. De persze meg lehet írni. Írhatnál példát, hogy pontosan mit szeretnél. Mindenesetre a számtani sorozat szemléltetésére kipróbálhatod az alábbiakat (a mértani sorozatra hasonlóan lehet):
restart; an:=n->a1+(n-1)*d;# számtani sorozat n-edik eleme Sn:=n->add(an(i),i=1..n);# számtani sorozat elsõ n tagjának összege
anek:=n->seq(an(i),i=1..n);#a számtani sorozat elemei an-ig(kilistázza) Snek:=n->seq(Sn(i),i=1..n);#a számtani sorozat tagjainak összege
# pl. a1:=2; d:=3;N:=20;#
an(N); Sn(N); anek(N); Snek(N); # ábrázolás plots[pointplot]([seq([i,an(i)],i=1..10)],title="Számtani sorozat elemei",labels=["n","an"]); plots[pointplot]([seq([i,Sn(i)],i=1..10)],title="Számtani sorozat tagjainak összege",labels=["n","Sn"]);
Szia xDJCx! Elöször is nagyon köszönöm az eddigi segitségedet. Szal pl Számtani sorozat: Egy sorozat elsõ tagja -4 differenciája 5 mennyi a sorozat 7. tagja. De van olyan példa is amiben több tagot ad meg a tanár és a differenciát keresi. Ugyan ez a helyzet a mértani sorozattal is hansonlo példák vannak. Bár ugy gondolom hogy erre vmi proc() kell irni. ha van erre megoldás kérlek segits nekem. Elõre is köszönöm üdv Imre
Elsõ körben javaslom próbáld ki a Back-solver Assistant-ot a Mapleben. Ezzel a megadott képlet bármely paraméterét kiszámíthatod a többi ismeretében. A menüsorból elérhetõ így: Tools- Assistants -Back solver amikor bejön ez az assistant, akkor a formula ablakba írd be pl. az an=a1+(n-1)*d képletet (mértani sor esetén pedig az an=a1*q^(n-1)-et) Ezután nyomd meg a Proceed to Back Solver gombot a képlet ablak alatt. Ezután a következõ ablakban, ahol felsorolja a változókat ki kell tölteni az ismert értékeket, amit meg keresel üresen kell hagyni és mellette megnyomni a Calculate gombot.
Lehet olyan testreszabást a Maple-ban, hogy a trigonometrikus függvények alapból fokokkal számoljanak, ne kelljen ezt külön kérni vagy átváltani radiánba?
Ezt nem lehet átállítani közvetlenül, de több módon megoldható.
1.) Saját függvényeket definiálni új néven: pl.
Sin := x -> sin(1/180 x Pi);x és így tovább Cos stb... Sin(90);
2.) Ennél elegánsabb ha a meglevõket átdefiniáljuk (module-lal): ( pl. itt is van ilyen példa: http://www.mapleprimes.com/questions/38063-Use-Degrees-Instead-Og-Radians ) Ezt kiegészítve:
restart;
trigfokban := module() option package; export sin, cos, tan,arcsin,arccos, arctan; sin := proc(x) :-sin(x*Pi/180); end proc: cos := proc(x) :-cos(x*Pi/180); end proc: tan := proc(x) :-tan(x*Pi/180); end proc: arcsin := proc(x) 180/Pi * :-arcsin(x); end proc: arccos := proc(x) 180/Pi * :-arccos(x); end proc: arctan := proc(x) 180/Pi * :-arctan(x); end proc: end module:
# elmenthetõ, hogy máskor is használható legyen
savelib( 'trigfokban' ):
restart; with(trigfokban);# betöltés
sin(90); arcsin(1);
# Ilyenkor az eredeti radiános sin stb. definíciókat is lehet használni, a :-sin(Pi/2); hivatkozással. :-sin(Pi/2);
3.) Másik lehetõség, ha mértékegységgel adom meg:
restart;
with(Units[Standard]):
sin(30*Unit(degrees));
(Régi Maple verziókban ezek nem biztos, hogy mûködnek.)
Szaisztok! Mitjelent a nonunit mert a szótár szerint nemegység vagy nem egység, ennek viszont nincs értelme. Elõre is köszönöm. Gimre
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:.
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.
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
É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?
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
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
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
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?
A polinomodnak 2 változója van x és y, ezért a helyes parancs a kérdéses típus vizsgálatára:
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!
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.
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:
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.
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 :)
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;
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;
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.
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;
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)?
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)
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....
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))));
Köszönöm, így már rendben. A potenciális (?) felhasználóknak (??) fontos, hogy "matek óra kompatibilisen" lássanak mindent :-)))
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 := vagy tévedek? Elõre is köszönöm a segítséget.
az elõzõt javítva annyi, hogy x:= ; Nem?
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:
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
Szervusz!
Célszerû lenne F konkrét értékét megadni, így nehéz segíteni.
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)*sin(theta)*(-(1/2)*f^2*omega*`ϕ`/(Pi^2*sqrt(4*R^2-f^2*`ϕ`^2/Pi^2))+omega*(-sin(gamma)*(r*sin(theta)+u*cos(gamma)*cos(theta))-cos(gamma)*(p*(theta-z*`ϕ`)-u*sin(gamma))))+(sin(gamma)*sin(gamma)*cos(theta)-cos(gamma)*cos(gamma))*(p*z*omega*cos(gamma)-omega*(r*cos(theta)+u*cos(gamma)*sin(theta)+(1/2)*sqrt(4*R^2-f^2*`ϕ`^2/Pi^2)-R+r))+(-cos(gamma)*sin(gamma)*cos(theta)-sin(gamma)*cos(gamma))*(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?
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.
Úgy tûnik, a Maple-nek az indexelt változónevekkel van itt gondja. Próbáld meg, úgy levezetni F kifejezését, hogy ott ahol nem valódi indexelésre használod az indexes jelölésmódot, ott lecseréled a változó nevét index nélkülire. pl. r[1] helyett r1, vagy v[rel] helyett vrel. Maple megpróbálja igazi indexként értelmezni az indexelt változónevekben szereplõ nem igazi indexeket, és ez valahol zavart okoz.
Köszi a segítséget, így már tényleg megcsinálta a szükséges számításokat. Ha még lesz valami problémám a programmal, akkor írok :)
Sziasztok Egy olyan kérdésem lenne, hogy Mapleben, hogy lehet béges testeket létrehozni? PL én egy 16 és egy 17 elemû véges testek akarok kreálni. Ezután az összes pontpárt akarok elkészíteni, melyek a véges testbõl a véges síkot képezik. Ezt hogy tudnám megcsinálni? Az a baj, hogy ötletem sincs hogy induljak el. :( Elõre is köszönöm a segítséget.
Nem vagyok otthon az absztrakt algebrában, próbáld meg a Maple GF (Galois Field)parancsát. ?GF
Kedves xDJCx. Megnéztem a GF parancsot. És ezzel tényleg lehet készíteni véges testet. Viszont nem teljesen világos még a használata a help alapján sem. Esetleg tudna errõl mondani pár szót?
Szeretnék megint kérdezni valamit. Azt szeretném tudni, hogy hogy kell használni a Jobb klikk és abban lévõ "Apply a Command" és a "Map Command Onto" parancsokat. Elõre is köszönöm
Az apply command-nál be kell gépelni a kívánt maple parancsot, és ha van a paramétereit is. pl. (x+y)^3; Ha erre a kifejezésre jobb klkkelsz és a "Apply a Command-to választod, akkor a megjelenõ ablakban pl. az expand parancsot begépelve elvégzi az expand mûvelet a fenti kifejezésen.
Sziasztok. Egy kis segítséget kérnék. Kaptam egy feladatot: f(x)=-2*abs(x-2)+5 Van-e a valós számokon értelmezett f(x) függvénynek minimuma? Melyik ez a szám? maximuma? ------||--------? Hol van a szélsõérték helye x ben? Mennyi ez a szélsõérték? Hol vannak a függvény zérushelyei? Nekem erre a solve() utasítás nem adott választ, sõt a min(), max()-ra sem kaptam választ. Ebben kérném a segítségeteket. Elõre is köszönöm
Ez egy egyszerû függvény, az abszolút érték függvénybõl elemi transzformációkkal megkapható az ábrája. És ebbõl megválaszolhatók a kérdések.
De ha mégis Maple-ben kell :
restart; f:=x->-2*abs(x-2)+5;
plot(f);# Elõször érdemes mindig felrajzolni a függvényt.
solve(-2*abs(x-2)+5=0,x);# nullhelyei
fsolve(-2*abs(x-2)+5=0,x=-10..10);# vagy a numerikus gyökkeresovel.
A maximum értéke, helye így is kereshetõ, megadott x tartományban:
maximize(-2*abs(x-2)+5, x=-10..10,location);
Van a Maple-ben beépített függvényvizsgáló tutor is. Ez menübõl is elindítható, vagy az alábbi módon: Meg kell adni a vizgálandó függvényt, és a vizsgált értelmezési tartományt! pl. a=-5 b=5 ebben az esetben. Ezen belül keresi a maximumot, nullhelyeket stb. A számolandó paramétert ki kell választani az ablakban, és a Calculate gombbal indítható a számítás.
Két dolgot szeretnék kérdezni. Az egyik, hogy van-e valamilyen beépített modul a Maple-ben, amivel a szögeket át lehet számolni radiánból fokba? Írtam egy kisebb programot, abban én úgy oldottam meg, hogy definiáltam két függvényt:
Így már könnyedén megadható egy szögérték bemenõ pl. bemenõ adatként fokban. Pl:
beta := 30*deg:
Valami egyszerûbb megoldás létezik?
A másik kérdésem szintén ugyan ehhez a programhoz kapcsolódik. Meg kell határozni két szöget, majd ezt a két szöget kell egymáshoz viszonyítani. A végeredményt egy "if" függvénnyel akartam kiíratni, hogy megfelel-e vagy sem. Leírom a program adott részét, hogy érthetõ legyen.
>deg := (1/180)*Pi: rad:= 180/Pi; beta := 30*deg; > `μt` := .2; tenyezo := .4; mu := `μt`*tenyezo; > `μv` := evalf(mu/cos((1/2)*beta)); > `ρv` := arctan(`μv`); `ρvdeg` := evalf(`ρv`*rad); > i := 1; > alpha := arctan(i*P/(d2*Pi)); `αdeg` := evalf(alpha*rad); > a := evalf(`ρvdeg`-`αdeg`); > if rhovdeg>alphadeg then print (megfelel) else print(nem felel meg);
Az utolsó sor után a következõ hibaüzenetet kapom: "Error, unterminated 'if' statement"
Valami megoldás?
Azzal ideiglenesen azzal feloldottam a problémát, hogy a két szöget kivontam egymásból, és figyelem, hogy pozitív, vagy negatív-e, viszont feliratokkal csak elegánsabb lenne :)
PS: remélem érthetõ volt a progi, nem tudom, hogy miért vágta teli ilyen idióta jelekkel, de lusta vagyok, hogy minden kitörölgessek :)
A második kérdésre megtalálta a választ: csak lefelejtettem az if ciklus végérõl az "end if" befejezést :)
Igazából egyszerûbb módszer nincs. A szögek átszámításához használhatóak a convert( , degrees) és a convert( , radians), illetve a convert( , 'units', 'radians','degrees') parancsok:
convert(30*degrees,radians);
convert(Pi/6,degrees);
sin(convert(30*degrees,radians));
vagy így is át lehet alakítani:
convert(Pi/2, 'units', 'radians','degrees');
Másik módszer, ha a mértékegységek csomagot betöltjük:
Lenne megint egy kérdésem a Maple-lel kapcsolatban.
Hogyan lehet megoldani, hogy a program kerekítsen? Ráadásul több féle kerekítést is kellene alkalmaznom.
1. Alap kerekítés, matematikai szabályok szerint (.5-tõl felfelé) 2. Felfelé egészre. 3. Felfelé egészre és párosra 4. Felfelé, egészre, és úgy hogy a szám 5-re vagy 0-ra végzõdjön (pl: 52,3 esetén 55 legyen, vagy 55,6 esetén 60 legyen a szám)