restart: with(Maplets[Elements]): with(Student[Calculus1]): with(StringTools): with(Maplets[Tools]): with(XMLTools): ### Graf:=proc(Pf,Pa,Pb,Pdel,JeHS,JeDS,JeVR,plocha,fce,okraj,body,Px1,Px2,Py1,Py2,norm,none,pomer) local str, temp, temp2, zobr, metoda, Osy: str:=cat(Pf, ", x=", Pa, "..", Pb, ", partition=", Pdel): if JeHS=true then metoda:="upper": elif JeDS=true then metoda:="lower": elif JeVR=true then metoda:="random": end if: str:=cat(str, ", method=", metoda): if plocha=false then str:=cat(str, ", showarea=false"): end if: if fce=false then str:=cat(str, ", showfunction=false"): end if: if okraj=true then str:=cat(str, ", outline=true"): end if: if body=false then str:=cat(str, ", showpoints=false"): end if: zobr:=["DEFAULT","DEFAULT"]: temp:=Trim(Px1): temp2:=Trim(Px2): if temp<>"" and temp2<>"" then temp:=cat(temp, "..", temp2): zobr[1]:=temp: end if: temp:=Trim(Py1): temp2:=Trim(Py2): if temp<>"" and temp2<>"" then temp:=cat(temp, "..", temp2): zobr[2]:=temp: end if: if not (zobr[1]="DEFAULT" and zobr[2]="DEFAULT") then temp:=cat(", view=[", zobr[1], ", ", zobr[2], "]"): str:=cat(str, temp): end if: if norm=true then Osy:="normal": elif none=true then Osy:="none": end if: str:=cat(str, ", axes=", Osy): if pomer=true then str:=cat(str, ", scaling=constrained"): end if: ApproximateInt(parse(str), output=plot, title=""): end proc: ### iniMathML:=proc(iniEqn) MathML:-ExportPresentation(iniEqn); end proc: ### addMathML:=proc(mathMLStr,addEqn) local tree, cmc, child, children, nl, eqnSign; tree:=FromString(mathMLStr); cmc:=ContentModelCount(tree); child:=FromString(MathML:-ExportPresentation(addEqn)); children:=ContentModel(child); nl:=FromString(" "); eqnSign:=Element("mo","="); tree:=AddChild(tree,nl,cmc); tree:=AddChild(tree,eqnSign,cmc+1); for child in children do cmc:=ContentModelCount(tree); tree:=AddChild(tree,child,cmc); end do: tree:=MakeElement("mrow", [], ContentModel(tree) ): tree := Element("math", tree): ToString(tree): end proc: ### PMLVyp:=proc(Pf,Pa,Pb) local mlStr,value,prim: mlStr:="": mlStr:=iniMathML(Int(Pf, x=Pa..Pb)): prim:=[int(Pf,x)]: value:=int(Pf,x=Pa..Pb): mlStr:=addMathML(mlStr, prim): mlStr:=addMathML(mlStr, value): mlStr:=addMathML(mlStr, evalf(value)): end proc: ### StartMaplet:=proc() local rieman, StrOMapletu, StrNavod: ### StrNavod:="Tento maplet slouzi k ilustraci definice Riemannova integralu. 1) Do prvniho radku zadejte funkci promenne x, kde: x^a - zapis a-te mocniny vyrazu x, exp(x),ln(x) - exponencialni a logaritmicka funkce, sin(x),cos(x),tan(x) - trigonometricke funkce, sinh(x),cosh(x),tanh(x) - hyperbolicke funkce. Do nasledujiciho radku zadejte interval - dolni a horni mez. Do tretiho radku zapiste pocet podintervalu intervalu [a,b]. 2) V okne 'Vypocty' se v polich Horni soucet, Dolni soucet a Vyber reprezentantu po stisku tlacitka 'Vypocitej' objevi postupne aproximace integralu ze zadane funkce pomoci horniho souctu, dolniho souctu prislusnemu zadanemu deleni intervalu [a,b] a vyberu reprezentantu prislusejiciho zadanemu deleni intervalu [a,b]. (Pozn.: vyber reprezentantu je realizovan nahodnym vyberem bodu z kazdeho podintervalu, proto se pri opakovanem vypoctu hodnota meni) 3) V dalsim okne se nachazi parametry pro vykresleni funkce, stiskem tlacitka 'Vykresli' se zobrazi graf. Po kazde zmene parametru je treba pouzit tlacitko 'Vykresli' k prekresleni zobrazeni dle nove zadanych parametru. Dalsi moznosti zobrazeni grafu se nachazeji v menu 'Nastaveni'. 4) Tlacitko 'Konec' uzavre maplet. Prislusnou teorii spolecne s priklady lze najit ve vlastnim textu bakalarske prace.": ### StrOMapletu:=" Definice Riemannova integralu Maplet byl napsan v programu Maple 9.5 divize Maplesoft firmy Waterloo Maple inc., www.maplesoft.com. Maplet vzniknul v ramci bakalarske prace Maplety k tematu: Aplikace integralniho poctu. Zdenek Liscinsky, Prirodovedecka fakulta Masarykovy univerzity, 2006": ### rieman:=Maplet('onstartup'=RunWindow('HlavniOkno'), Font['F1']('family'="Default", 'bold'='true', 'size'='11'), Font['F2']('family'="Default", 'bold'='true', 'size'=12), Window['HlavniOkno']('resizable'='false','menubar'='HlMenu','layout'='Okno','title'="Definice Riemannova integralu"), #Window['WRiemInt']('resizable'=false,'layout'='RiemInt','title'="Definice"), Window['WNastav']('resizable'=false,'layout'='Nastav','title'="Nastaveni grafu"), Window['WNavod']('resizable'=false,'layout'='Navod','title'="Navod"), Window['Wo']('resizable'=false,'layout'='OMapletu','title'="O Mapletu"), ### ButtonGroup['BG1'](), ButtonGroup['BG2'](), MenuBar['HlMenu']( Menu['MSoubor']("Maplet", MenuItem("Vypocitej",'onclick'='AVypocet'), MenuItem("Vykresli",'onclick'='AGraf'), MenuItem("Konec",Shutdown()) ), #Menu['MTeorie']("Teorie", # MenuItem("Definice Riemannova integralu",'onclick'=RunWindow('WRiemInt')) #), Menu['MNastav']("Nastaveni", MenuItem("Nastaveni grafu",'onclick'=RunWindow('WNastav')) ), Menu['MNapoveda']("Napoveda", MenuItem("Navod",'onclick'=RunWindow('WNavod')), MenuItem("O mapletu", 'onclick'=RunWindow('Wo')) ) ), ### #BoxLayout['RiemInt']( # BoxColumn(Label("..."), # Button("OK", CloseWindow('WRiemInt')) # ) #), BoxLayout['Nastav']( BoxColumn( BoxRow('border'=true, 'caption'="Pomer os", CheckBox['CBosy']('value'=false,'font'='F2', 'caption'="Zobrazit osy 1:1") ), BoxRow('border'=true,'caption'="Zobrazeni os", RadioButton['RBnorm']("Normalni",'value'=true,'group'='BG2', 'font'='F2'), RadioButton['RBnone']("Zadne",'value'=false,'group'='BG2', 'font'='F2') ), BoxColumn('border'=true,'caption'="Zobrazeni grafu", BoxRow(Label("x",'font'='F1'), Label("=",'font'='F1'), TextField['x1']('width'=3,'value'=" ",'tooltip'="zobrazeni grafu: dolni mez na ose x"), Label("..."), TextField['x2']('width'=3,'value'=" ",'tooltip'="zobrazeni grafu: horni mez na ose x") ), BoxRow(Label("y",'font'='F1'), Label("=",'font'='F1'), TextField['y1']('width'=3,'value'=" ",'tooltip'="zobrazeni grafu: dolni mez na ose y"), Label("..."), TextField['y2']('width'=3,'value'=" ",'tooltip'="zobrazeni grafu: horni mez na ose y") ) ), Button("OK", CloseWindow('WNastav')) ) ), BoxLayout['Navod']( BoxColumn(TextBox('wrapped'=true,'width'=45,'height'=28,'editable'='false','font'='F2','value'=StrNavod), Button("OK", CloseWindow('WNavod'))) ), BoxLayout['OMapletu']( BoxColumn(TextBox('wrapped'=true,'width'=40,'height'=12,'editable'='false','font'='F2', 'value'=StrOMapletu), Button("OK", CloseWindow('Wo'))) ), BoxLayout['Okno']( BoxRow( BoxColumn( BoxColumn('border'=true,'caption'="Zadani funkce f(x)", BoxRow(Label(" f ( x ) ", 'font'='F2'), Label("=", 'font'='F2'), TextField['f']("sin(x)^2",20,'tooltip'="sem zapis funkci promenne x") ), BoxRow(HorizontalGlue(), Label("Interval:"), Label("a",'font'='F2'), Label("=",'font'='F2'), TextField['a']("0",4,'tooltip'="dolni mez"), Label("..."), Label("b",'font'='F2'), Label("=",'font'='F2'), TextField['b']("Pi",4,'tooltip'="horni mez"), HorizontalGlue() ), BoxRow(Label(" Deleni intervalu:"), Label("n", 'font'='F2'), Label("=",'font'='F2'), TextField['del']("10",4,'tooltip'="sem zapis pocet deleni intervalu"), HorizontalGlue() ) ), BoxColumn('border'=true,'caption'="Vypocty", BoxRow( BoxColumn(Label("Horni soucet"), Label("Dolni soucet"), Label("Integralni soucet") ), BoxColumn(TextField['hs']('editable'=false,'width'=10, 'tooltip'="horni soucet prislusejici zadanemu deleni"), TextField['ds']('editable'=false,'width'=10, 'tooltip'="dolni soucet prislusejici zadanemu deleni"), TextField['vr']('editable'=false,'width'=10, 'tooltip'="integralni soucet prislusejici vyberu reprezentantu zadaneho deleni") ) ), BoxColumn(Label("Vypocet integralu:",'tooltip'="posledni radek v okne vypoctu vycisluje symbolicke hodnoty s presnosti na 10 cislic"), MathMLViewer['MLVyp']('height'=210,'width'=250,'fontsize'='16') ) ), BoxRow(Button("Vypocitej", 'onclick'='AVypocet'), Button("Vykresli", 'onclick'='AGraf'), Button("Konec", Shutdown()) ) ), BoxColumn( BoxColumn(border=true,caption="Graf", Plotter['gr']() ), BoxColumn('border'=true,'caption'="Zobrazeni grafu",'inset'=0,'spacing'=0, BoxRow(RadioButton['RBhs']("Horni soucet",'value'=true,'group'='BG1','font'='F1'), RadioButton['RBds']("Dolni soucet",'value'=false,'group'='BG1','font'='F1'), RadioButton['RBvr']("Integralni soucet",'value'=false,'group'='BG1','font'='F1') ), BoxRow(CheckBox['CBplocha']('value'=false,'caption'="zobrazit obsah plochy", 'tooltip'="zobrazi hodnotu obsahu plochy"), CheckBox['CBfce']('value'=true,'caption'="zobrazit funkci", 'tooltip'="zobrazi zadanou funkci") ), BoxRow(CheckBox['CBokraj']('value'=false,'caption'="pouze okraj plochy ", 'tooltip'="zobrazi pouze okraj plochy tvorene obdelniky prislusejicimi zadanemu deleni"), CheckBox['CBbody']('value'=true,'caption'="zobrazit body ", 'tooltip'="v kazdem podintervalu zobrazi bod, ve ktere je vycislovana hodnota fce pro vypocet horniho, dolniho ci integralniho souctu") ) ) ) ) #BoxRow ), #BoxLayout ### Action['AVypocet'](Evaluate('target'='MLVyp', 'function'='PMLVyp', Argument('f'), Argument('a'), Argument('b') ), Evaluate('hs'='evalf(RiemannSum(f, x=a..b, method=upper, partition=del),10)'), Evaluate('ds'='evalf(RiemannSum(f, x=a..b, method=lower, partition=del),10)'), Evaluate('vr'='evalf(RiemannSum(f, x=a..b, method=random, partition=del),10)') ), ### Action['AGraf'](Evaluate('target'='gr', 'function'='Graf', Argument('f', quotedtext='true'), Argument('a',quotedtext='true'), Argument('b',quotedtext='true'), Argument('del',quotedtext='true'), Argument(RBhs), Argument(RBds), Argument(RBvr), Argument(CBplocha), Argument(CBfce), Argument(CBokraj), Argument(CBbody), Argument('x1',quotedtext='true'), Argument('x2',quotedtext='true'), Argument('y1',quotedtext='true'), Argument('y2',quotedtext='true'), Argument(RBnorm), Argument(RBnone), Argument(CBosy) ) ) ): #Maplet Maplets:-Display(rieman): end proc: StartMaplet(): #'background'='#BDD8E2', # Warning, the assigned name Group now has a global binding # Warning, the names AddAttribute, Compare and Print have been rebound