Maple
Jelentkezz be a hozzászóláshoz.
Köszönöm! Utánajárok és tanulok még az adattípusokról egy kicsit! 😛 😊
*Zsebszámológépet keresek!* Ha van eladó CASIO, Hewlett-Packard, Texas Instruments számológéped, küldj privát üzenetet! Programozható típusok el?nyben! Ócskaságok, hibásak is érdekelnek!
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.
Jobb a solve-ban nem halmazként megadni az ismeretleneket, hanem listaként,azaz szögletes zárójelek között. Ekkor a megoldást is listában adja! A listában az elemek sorrendje rögzített, a halmazban pedig nem.
Egyszerûbben is hozzá lehet rendelni a megoldásokat az ismeretlenekhez az assign paranccsal:
restart;
mego:=solve({x-y = 9, x+y = 10},
assign(mego);
x;y;
Ha több megoldáspár lenne, akkor ki kell választanom valamelyik meogldáspárt pl.
restart;
mego:=solve({x^2 = 9, x*y = 10},
assign(mego<1>1>);# elsõ megoldáspárt választottam a hozzárendeléshez
x;y;
Az assign-nal végzett hozzárendelés után x és y felvette a hozzárendelt értékeket, ha szükséges megszüntethetem a hozzárendelést:
pl. így
x:='x';y:='y';
De az unassign parancs is jó erre:
unassign('x');
Úgy vettem észre, h a solve ábécé sorrendben adja vissza az ismeretlenek értékeit.
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>1>)=ismeretlen1
> then
> ismeretlen1:=rhs(mego<1>1>); ismeretlen2:=rhs(mego<2>2>);
> else
> ismeretlen1:=rhs(mego<2>2>); ismeretlen2:=rhs(mego<1>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!
*Zsebszámológépet keresek!* Ha van eladó CASIO, Hewlett-Packard, Texas Instruments számológéped, küldj privát üzenetet! Programozható típusok el?nyben! Ócskaságok, hibásak is érdekelnek!
eq := -4*x^3*y-83*x^2*y^2-10*y^4+97*x^2-73*y^2-62*x;
indets(eq);
type(eq, polynom(integer, indets(eq)));
type(eq, polynom(integer,
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 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,);
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),);
É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),);# több paraméteres függvény f operátoros formában
map(f, ,d,e);# map másféle megadási módja: több paraméteres f függvény nem operátoros formában
Példa több paraméteres simplify parancsra, mappel:
map(u->simplify(u,symbolic),
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
Ismét kérdezni szeretnék
A feladatom a következõ: m= {3, 25, 72} e={4, 17, 23)
c=m^e mod 143
melyik j-re teljesül elsõre, hogy c^(e^j)=c mod 143
Én a következõt csináltam a c-ket kiszáolom kézzel és beírom ebbe a képletbe: pl most a 81 a 3^4
msolve(81^(4^j)=81 , 143);
de valami ilyesmit ír ki :
{j = `numtheory:-mlog`((1/4)*(ln(62)+I*Pi)/ln(3), 4, 143, phh)+phh*_Z2}
Tudod, hogy ez miért van, vagy valamit elrontottam a parancsban?
Köszönöm szépen.
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,
nops(
És most a minden m-hez hány pár tartozik?
Ebben is tudsz légyszives segíteni?
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,
nops(
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.
Itt lehet az újdonságokról olvasni:
http://www.maplesoft.com/products/maple/new_features/index.aspx
A nonunit (nem egység) kulcsszó a Mapleben pl. az algebrai mintaillesztésnél fordul elõ.
Az egység itt az adott matematikai mûvelet egységelemét jelenti (pl. szorzásnál 1-et, összeadásnál 0-át).
Ha pl. azt akarjuk ellenõrizni, hogy egy adott algebrai kifejezés x-nek egész számú hatványa, ahol ki akarjuk zárni azt az esetet amikor csak x szerepel (azaz x az elsõ hatványon), ezt megtehetjük a patmatch paranccsal az alábbi módon.
A patmatch parancs ellenõrzi, hogy az elsõ argumentuma olyan alakú-e, amelyet a másodikban megadtunk , azaz ebben a példában x^egész ,ahol most kizárjuk az egészek közül 1-et:
patmatch(x^2,x^n:😞nonunit(integer))); # true-t ad. azaz ilyen alakú
patmatch(x^3,x^n:😞nonunit(integer)));# ez is true
patmatch(x^(-3),x^n:😞nonunit(integer)));# ez is true
patmatch(x,x^n:😞nonunit(integer)));# ez false mert x^1 alakú
Az x^n:😞nonunit(integer)) kifejezés definiálja a keresendõ mintát, az n után a ::-nel kezdõdõ rész az n típusát írja le.
Lásd még a súgóban a példákat: ?patmatch
A nonunit a fenti példában azt jelentette, hogy az adott változó nem lehet 1, de az alábbi példában nonunit nem 1-et, hanem 0-át jelent (mert itt már összeadás mûveletrõl van szó):
Itt a+b alakú kifejezéseket akarunk keresni, azaz nem engedjük meg a csak a-t vagy csak b-t sem:.
patmatch(a+b,A::nonunit(algebraic)+B::nonunit(algebraic));# true
patmatch(a,A::nonunit(algebraic)+B::nonunit(algebraic));# false
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
Én igencsak megmaradok már a " *Pi/180 " -as módszernél...
*Zsebszámológépet keresek!* Ha van eladó CASIO, Hewlett-Packard, Texas Instruments számológéped, küldj privát üzenetet! Programozható típusok el?nyben! Ócskaságok, hibásak is érdekelnek!
Egy sor javítva:
Sin := x -> sin(x/180* Pi);# és így tovább Cos stb...
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
sin(30*Unit(degrees));
(Régi Maple verziókban ezek nem biztos, hogy mûködnek.)
*Zsebszámológépet keresek!* Ha van eladó CASIO, Hewlett-Packard, Texas Instruments számológéped, küldj privát üzenetet! Programozható típusok el?nyben! Ócskaságok, hibásak is érdekelnek!
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.
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 <#wave>#wave><#conf>#conf>
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
plots
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
Köszönöm. És mégegyszer köszi
Üdv Imre <#worship>#worship><#wave>#wave>
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.
Azt szeretném kérdezni, hogy milyen tipus az 'atomic' és az evaln() mit értékel ki.
Nagyon köszönöm <#wave>#wave><#nemtudom>#nemtudom>
*Zsebszámológépet keresek!* Ha van eladó CASIO, Hewlett-Packard, Texas Instruments számológéped, küldj privát üzenetet! Programozható típusok el?nyben! Ócskaságok, hibásak is érdekelnek!
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.
Ez a sor a copy-paste után ismét hibás lett (lemarad belõle két szögletes zárójel a p2 után), javítva:
display(t1,display([ seq(p2,i=1..m),p3],insequence = true));
Ú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>$1 .. n>;
m := 0;
p2:=Array(1..n):
setoptions(title="Josephus-probléma",font=
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
if n<=M then
kiv:={L[]} minus {L<1>1>};
p2
else
print(cat(m, ". kivégzett: ", L<1>1>));
end if:
L := L<2..-1>2..-1>:
end do;gc();
if n>M then print(cat("Josephus ", L<1>1>, "-ik a körben."));
else;
p3:=display( textplot([0,0, cat("Josephus helye: ",convert(L<1>1>,string))], coords = polar, color = blue),pointplot([1, (-2*Pi*(L<1>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;
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>$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=
while 1 < nops(L) do
m := m+1;
L := ListTools
if n<=M then
kiv:={L[]} minus {L<1>1>};
p2
else
print(cat(m, ". kivégzett: ", L<1>1>));
end if:
L := L<2..-1>2..-1>:
end do;gc();
if n>M then print(cat("Josephus ", L<1>1>, "-ik a körben."));
else;
p3:=display( textplot([0,0, cat("Josephus helye: ",convert(L<1>1>,string))], coords = polar, color = blue),pointplot([1, (-2*Pi*(L<1>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;
Josephus2(40,7);# megjelenít
Josephus2(40,7,39);# így csak kiírja a lépéseket,
Josephus := proc (n::posint, k::posint)
local L, m;
L := <`$`(1 .. n)>`$`(1 .. n)>; m := 0;
while 1 < nops(L) do
m := m+1;
L := ListTools
print(m, ".kivégzett: ", L<1>1>);
L := remove(t-> evalb(t = L<1>1>) , L):
end do; print("Josephus ", L<1>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);
=maple("(&1)^2";A2)
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.
restart;
MyPackage:= module()
export Negyzetre;
option package;
Negyzetre := proc(x) x*x; end proc;
end module:
savelib('MyPackage');
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:
=maple("MyPackage:-Negyzetre(3*x)")
=maple("expand(MyPackage:-Negyzetre(&1))";A2)
Persze a VBA-ban is használhatók a fentiek...
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 <#wave>#wave>
Ú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>1>:b:=DefinedAs(T)❤️>3>;szog:=rhs(DefinedAs(T)<2>2>);
triangle(Tmod,
Tmod;
end proc;
with(geometry):
triangle(T,<2,'angle' Pi/2,1="Pi/2,1">2,'angle'>);
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.
Az iskolás srácnak igy nem nagyon tudok segiteni ezért fordulok hozzátok.
Elõre is köszönöm Gimre <#conf>#conf>
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>2>-p1<2>2>)/(p2<1>1>-p1<1>1>);# egyenes meredeksége m= (y2-y1)/(x2-x1) szerint
y:=m*(x-p1<1>1>)+p1<2>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
normalvektorabra:=plots
display(iranyvektorabra,normalvektorabra,egyenesabra,scaling=constrained,view=<-4..4,-4..4>-4..4,-4..4>,title=typeset("y = ",y));
Elõre is köszönöm
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:
Newton:= proc(f,x0::realcons,n::posint,nezet::list:=<-5..5,-5..5>-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(
xregi:=x;
end do:
x:='x';
display(plot(f(x),x=nezet<1>1>,color=red,numpoints=1000),point(
end proc;
# pl.:
f:= x-> cos(x):
Newton(f,0.5,3,<0..3,-1.5..1.5>0..3,-1.5..1.5>);
# Összevethetõ a beépített algoritmussal:
# ábra:
Student
# érték
Student
Szerencsesszamok:=proc(n::posint)
local L,k,sz,m;
sz:=[];
if n<3 then return sz: end if;
L:=
while nops(L)>=k do
m:=nops(L);
L:=L[remove(i->evalb((i mod L
sz:=[sz[],L
end do;
sz;
end proc;
# pl.
Szerencsesszamok(30);
Kiegészítés: a Maple 13 és felette így is ki lehet iratni az ábrához magyarázó szöveget ( a display-es sort erre cserélve):
display(plot(f(x),x=a..b,color=red),teglalapok,title=typeset(f(x)," függvény\n Riemann integrál közelítõ összege = ",evalf(S,5), "\n tartomány : [",a,",",b,"], résztartományok száma = ",n,"\n módszer : ",opcio));
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;
Riemann:=proc(f::procedure,a::realcons,b::realcons,n::posint,opcio::string)
local S,d,teglalapok;
description"f függvény Riemann integrálközelító összegének számítása a..b tartományban";
uses plots,plottools;
if a>=b then return "Hibás tartomány!": end if;
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(, , color = blue),i=1..n):
elif opcio="jobb" then
S:=evalf(add(f(a+i*d)*d,i=1..n));
teglalapok:=seq(rectangle(, , 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(, , color = blue),i=1..n):
else return "Hibás opció!":
end if;
display(plot(f(x),x=a..b,color=red),teglalapok,title=cat(" Riemann integrál közelítõ összeg : ",convert(S,'string')));
end proc;
# pl.
f:=x->sin(x)+1;
Riemann(f,0,3,10,"bal");
Riemann(f,0,3,10,"jobb");
Riemann(f,0,3,10,"közép");
#Összevethetõ a Student csomag megfelelõ parancsaival:
Student
Student
Student
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.