625
A Maple egy fejlett matematikai problémamegoldó és programozói szoftver.
-
Gimre #505 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 -
#504 Köszönöm, majd továbbadom - tőlem is kérdezték.
Én igencsak megmaradok már a " *Pi/180 " -as módszernél... -
xDJCx #503
Egy sor javítva:
Sin := x -> sin(x/180* Pi);# és így tovább Cos stb... -
xDJCx #502
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.) -
#501 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? -
xDJCx #500 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.
-
Gimre #499 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 -
xDJCx #498
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"]);
-
Gimre #497 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 -
xDJCx #496
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.
-
Gimre #495 Sziasztok!
Azt szeretném kérdezni, hogy milyen tipus az 'atomic' és az evaln() mit értékel ki.
Nagyon köszönöm -
#494 haha, nem káröröm, ebbe én is belefutok rendszerint a matek topikban, mert szegény azt hiszi, hogy dőlt betűs szöveget akarsz (italic)... -
xDJCx #493
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.
-
xDJCx #492
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],i=1..m),p3],insequence = true)); -
xDJCx #491
Ú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],i=1..m),p3],insequence = true));
end if;
end proc;
-
xDJCx #490
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],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,
-
xDJCx #489 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);
-
xDJCx #488 Pontosítás: =maple((&1)^2,A2) -sor helyett ez a jó:
=maple("(&1)^2";A2) -
xDJCx #487
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... -
Gimre #486 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 -
xDJCx #485
Ú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.
-
Gimre #484 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 -
xDJCx #483 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));
-
Gimre #482 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 -
xDJCx #481
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 ); -
xDJCx #480 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;
# pl.
Szerencsesszamok(30); -
xDJCx #479
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));
-
xDJCx #478 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;
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([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):
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[Calculus1][RiemannSum](f(x), x = 0 .. 3, method = left, output = plot);
Student[Calculus1][RiemannSum](f(x), x = 0 .. 3, method = right, output = plot);
Student[Calculus1][RiemannSum](f(x), x = 0 .. 3, method = midpoint, output = plot);
-
xDJCx #477 Hol akadtál el velük? -
hihisebi #476 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.
-
Gimre #475 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 -
xDJCx #474
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.
-
Gimre #473 Szia xDJCx!
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 -
xDJCx #472
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.)
-
Gimre #471 A finaly pedig akkor hajtodik végree a nincs hiba. Igaz?
try
1/x
catch: lprint("Hiba történt!")
finaly
1/x
end try
Ugye jól irtam?
-
xDJCx #470 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;
# Hibakezelés nélküli rutin:
reciprok2:=proc(x)
1/x;
end proc;
reciprok1(0);# hibakezeléssel
reciprok2(0);# hibakezelés nélkül -
Gimre #469 Szia xDJCx.
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 -
xDJCx #468
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ó).
-
Gimre #467 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 -
xDJCx #466
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:
restart;
with(CurveFitting);with(plots):
# tesztpontok, [x,y] formában:
pontok:=[-2, 131/5], [-1, 49/5], [0, 9/2], [1, 2/5], [2, 53/10], [3, 78/5], [4, 59/2];
fv:=LeastSquares([pontok], x, curve = a*x^2+b*x+c);
pontabra:=pointplot([pontok],color=blue);
gorbeabra:=plot(fv,numpoints=1000);
display(pontabra, gorbeabra,view=[-5..10,-10..50]);