(*^ ::[ Information = "This is a Mathematica Notebook file. It contains ASCII text, and can be transferred by email, ftp, or other text-file transfer utility. It should be read or edited using a copy of Mathematica or MathReader. If you received this as email, use your mail application or copy/paste to save everything from the line containing (*^ down to the line containing ^*) into a plain text file. On some systems you may have to give the file a name ending with ".ma" to allow Mathematica to recognize it as a Notebook. The line below identifies what version of Mathematica created this file, but it can be opened using any other version as well."; FrontEndVersion = "X Window System Mathematica Notebook Front End Version 2.2"; X11StandardFontEncoding; fontset = title, inactive, noPageBreakBelow, noPageBreakInGroup, nohscroll, preserveAspect, groupLikeTitle, center, M7, bold, e8, 24, fontName, "times"; fontset = subtitle, inactive, noPageBreakBelow, noPageBreakInGroup, nohscroll, preserveAspect, groupLikeTitle, center, M7, bold, e6, 18, fontName, "times"; fontset = subsubtitle, inactive, noPageBreakBelow, noPageBreakInGroup, nohscroll, preserveAspect, groupLikeTitle, center, M7, italic, e6, 14, fontName, "times"; fontset = section, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeSection, grayBox, M22, bold, a20, 18, fontName, "times"; fontset = subsection, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeSection, blackBox, M19, bold, a15, 14, fontName, "times"; fontset = subsubsection, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeSection, whiteBox, M18, bold, a12, 12, fontName, "times"; fontset = text, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, 12, fontName, "times"; fontset = smalltext, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, 10, fontName, "times"; fontset = input, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeInput, M42, N23, bold, 12, fontName, "courier"; fontset = output, output, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeOutput, M42, N23, L-5, 12, fontName, "courier"; fontset = message, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeOutput, M42, N23, 12, fontName, "courier"; fontset = print, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeOutput, M42, N23, 12, fontName, "courier"; fontset = info, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeOutput, M42, N23, 12, fontName, "courier"; fontset = postscript, PostScript, formatAsPostScript, output, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeGraphics, M7, l34, w282, h287, 12, fontName, "courier"; fontset = name, inactive, noPageBreakInGroup, nohscroll, preserveAspect, M7, italic, B65535, 10, fontName, "times"; fontset = header, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, italic, 12, fontName, "times"; fontset = leftheader, 12, fontName, "times"; fontset = footer, inactive, nohscroll, noKeepOnOnePage, preserveAspect, center, M7, italic, 12, fontName, "times"; fontset = leftfooter, 12, fontName, "times"; fontset = help, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, 12, fontName, "times"; fontset = clipboard, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, 12, fontName, "times"; fontset = completions, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, 12, fontName, "courier"; fontset = special1, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, 12, fontName, "times"; fontset = special2, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, 12, fontName, "times"; fontset = special3, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, 12, fontName, "times"; fontset = special4, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, 12, fontName, "times"; fontset = special5, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, 12, fontName, "times";currentKernel; ] :[font = input; preserveAspect] :[font = title; inactive; preserveAspect] Enige aspecten van het gebruik van computeralgebra :[font = subtitle; inactive; preserveAspect] Fred Simons Technische Universiteit Eindhoven wsgbfs@win.tue.nl :[font = section; inactive; Cclosed; preserveAspect; startGroup] Inleiding :[font = text; inactive; preserveAspect] Het serviceonderwijs in de wiskunde heeft zich ontwikkeld tot het onderwijzen van een verzameling standaardtechnieken die op een verzameling standaardvraagstukken kunnen worden toegepast. Leerlingen / studenten zijn meer geinteresseerd in hoe het moet dan in het begrijpen, laat staan het zich eigen maken van de stof. Verreweg de meeste standaardvraagstukken kunnen nu in plaats van met de hand gemaakt worden met behulp van computeralgebra door toepassing van een paar eenvoudige commando's. :[font = subsection; inactive; Cclosed; preserveAspect; startGroup] Voorbeeld integreren :[font = input; preserveAspect; endGroup] f = 1/(1+ x^3)^2 :[font = text; inactive; preserveAspect] Een van de effecten van het toevoegen van een computeralgebra practicum aan een klassieke cursus is dat we aan de studenten uit moeten leggen waarom zij die sommen zo moeizaam met de hand moeten maken terwijl we ze tegelijkertijd laten zien dat het met de computer in een paar seconden zonder rekenfouten kan. :[font = subsection; inactive; Cclosed; preserveAspect; startGroup] Stelling 1 :[font = text; inactive; preserveAspect; endGroup; endGroup] Het simpelweg toevoegen van computeralgebra als stuk gereedschap aan een klassieke cursus analyse of lineaire algebra leidt zowel voor de studenten als voor de docenten tot een onbevredigende cursus. :[font = section; inactive; Cclosed; preserveAspect; startGroup] Over de inhoud :[font = text; inactive; preserveAspect] Gebruik van computeralgebra heeft invloed op de inhoud. Een filosofie kan zijn dat alles wat de computer beter kan dan wij ook met behulp van de computer uitgevoerd wordt. Dan verdwijnt aandacht voor integratietechnieken, partiele breuksplitsing enz. Aan de andere kant worden sommige, klassiek minder belangrijke, onderwerpen opeens zeer belangrijk, bijvoorbeeld iteratie en alles wat daarmee samenhangt. Bovendien geeft gebruik van software ook de mogelijkheid "nieuwe" onderwerpen te introduceren (waarom zouden we dat doen?). :[font = subsection; inactive; Cclosed; preserveAspect; startGroup] Scheiding van variabelen :[font = text; inactive; preserveAspect] Opgave. Ga na dat de oplossing y(x) van het beginwaardeprobleem y'(x) = (y(x)^2 - 1) ( x - 1), y(0) = 3 een verticale asymptoot heeft en bepaal de plaats van die asymptoot. :[font = text; inactive; preserveAspect] Oplossing :[font = input; preserveAspect] y'[x]== (y[x]^2 - 1)(x-1) :[font = input; preserveAspect] DSolve[%, y[x], x ] :[font = input; preserveAspect] y'[x] / (y[x]^2-1) == x-1 :[font = input; preserveAspect] Integrate[ #, {x, 0, a}]& /@ % :[font = input; preserveAspect] MapAt[ Limit[#, y[a]->Infinity]&, %, 1] :[font = input; preserveAspect] % /. y[0]->3 :[font = input; preserveAspect; endGroup] FindRoot[ Evaluate[%], {a, 2} ] :[font = subsection; inactive; Cclosed; preserveAspect; startGroup] De warmtevergelijking :[font = text; inactive; preserveAspect] Een staaf met lengte 1 wordt in de eindpunten op een temperatuur van 0°gehouden. Het midden van de staaf wordt verhit tot een temperatuur van 100° en dan wordt het verwarmen gestopt. We nemen aan dat de temperatuur nu gegeven wordt door de functie :[font = input; preserveAspect] f[x_] := 100 Exp[ -50 (x-1/2)^2 ] :[font = input; preserveAspect] Plot[f[x], {x, 0, 1} ] :[font = text; inactive; preserveAspect] We onderzoeken hoe de temperatuur u(x,t) van de staaf met de tijd varieert; we nemen aan dat de functie u(x,t) voldoet aan de warmtevergelijking :[font = input; preserveAspect] eq := D[u,t] - D[u, {x,2} ] / 400 == 0 :[font = text; inactive; preserveAspect] De karakteristieke functies zijn :[font = input; preserveAspect] cf[n_] := Sin[ n Pi x ] * Exp[ - n^2 Pi^2 t / 400 ] :[font = input; preserveAspect] u = cf[n]; eq :[font = input; preserveAspect] Clear[u] :[font = text; inactive; preserveAspect] We combineren de karakteristieke functies tot de gezochte oplossing u(x,t) = Sum[ a(n) cf(n), {n, 1, Infinity} ] zodanig dat aan de beginvoorwaarde is voldaan f(x) = Sum[ a(n) Sin[ n Pi x ], {n, 1, Infinity} ]. De getallen a(n) zijn dus de coefficienten van de Fourier sinus reeks van f(x). Deze coefficienten kunnen we niet analytisch bepalen, maar wel numeriek met de fast Fourier transform :[font = input; preserveAspect] NFourierCoefficients[ exp_, {t_Symbol, a_, b_}, n_:30 ] := Module[ {sample, auxf, m}, auxf[u_] := N[ exp /. t-> u - Floor[(u-a)/(b-a)] (b-a) ]; m = 256; While[ m < 4 n, m = 2 m ]; sample = auxf[# (b-a) / m ]& /@ (Range[m]-1); Chop[ Take[ InverseFourier[ sample ] / N[ Sqrt[m] ], n+1 ] ] ] /; N[b] > N[a] :[font = input; preserveAspect] NFourierSinCoefficients[ exp_, {t_Symbol, 0, b_}, n_:30 ] := -2 Im[#]& /@ Rest[ NFourierCoefficients[ Sign[t] * (exp /. t->Abs[t]),{t, -b, b}, n ] ] /; N[b] > 0 :[font = input; preserveAspect] a = NFourierSinCoefficients[f[x], {x,0,1}] :[font = input; preserveAspect] u[x_,t_] = Sum[ a[[n]] cf[n], {n, 1, 30} ] :[font = input; preserveAspect] Plot[ Evaluate[ Table[ u[x,t], {t, 0, 9} ]], {x,0,1}, PlotStyle->Table[ Hue[i/10], {i, 0, 9} ] ] :[font = input; preserveAspect] Plot[ u[0.1, t], {t, 0, 30}] :[font = input; preserveAspect; endGroup] Clear[f, eq, cf, a, u] :[font = subsection; inactive; Cclosed; preserveAspect; startGroup] Een goniogelijkheid :[font = text; inactive; preserveAspect] sin(50°) sin(60°) sin(70°) = sin(40°) sin(80°) sin(80°) :[font = input; preserveAspect] Needs["Algebra`Trigonometry`"] :[font = input; preserveAspect] f[ n_] := TrigReduce[ Sin[n x] ] /. {Sin[x]->s, Cos[x]->c} :[font = input; preserveAspect] f[5] f[6] f[7] - f[4] f[8]^2 // Expand :[font = input; preserveAspect; endGroup; endGroup] Clear[f] :[font = section; inactive; Cclosed; preserveAspect; startGroup] Over het niveau :[font = text; inactive; preserveAspect] Gebruik van computeralgebra reduceert vele problemen tot het indrukken van een paar knoppen en nodigt de gebruiker niet uit tot nadenken over wat hij/zij eigenlijk aan het doen is. Bij iets gecompliceerdere problemen is zowel kennis en inzicht van de wiskunde nodig als handigheid in het gebruik van het pakket. :[font = text; inactive; preserveAspect] Er is een grote kloof tussen de standaardcommando's kunnen geven en computeralgebra als hulpmiddel kunnen gebruiken! :[font = text; inactive; preserveAspect] Goed gebruik van computeralgebra vereist een goed inzicht in de wiskunde en in de mogelijkheden van het pakket. :[font = subsection; inactive; Cclosed; preserveAspect; startGroup] Voorbeeld stelsel differentiaalvergelijkingen :[font = text; inactive; preserveAspect] Los op het stelsel differentiaalvergelijkingen X' = A X, waarin de matrix A gegeven is door A = {{2,1,0},{-1,0,1},{1,3,1}}. :[font = text; inactive; preserveAspect] Oplossing :[font = input; preserveAspect] (A = {{2,1,0},{-1,0,1},{1,3,1}}) // MatrixForm :[font = input; preserveAspect] Eigensystem[A] :[font = input; preserveAspect] MapAt[ Exp[ # t]&, %, 1 ] :[font = input; preserveAspect] Times @@ % :[font = input; preserveAspect] sol = Drop[ %, -1] :[font = text; inactive; preserveAspect] Voor de derde basisoplossing proberen we (u t + v) e^(2t): :[font = input; preserveAspect] u = {u1,u2,u3}; v={v1,v2,v3}; :[font = input; preserveAspect] opl = (u t + v) Exp[ 2 t] :[font = input; preserveAspect] D[opl, t] == A . opl :[font = input; preserveAspect] Thread[%] :[font = input; preserveAspect] % /. {a_==b_ :> Expand[ Exp[-2t] a ]== Expand[ Exp[-2t] b ]} :[font = input; preserveAspect] Join[ % /. t->0, D[%,t] ] :[font = input; preserveAspect] Solve[%, Join[u,v] ] :[font = input; preserveAspect] opl /. %[[1]] /. {v2->1, v3->0} :[font = input; preserveAspect] AppendTo[sol, %] :[font = input; preserveAspect] sol . {c1, c2, c3} :[font = input; preserveAspect; endGroup] Clear[ A, X, sol, opl, u, v ] :[font = text; inactive; preserveAspect; endGroup] Aangezien de computer het rekenwerk overneemt komt het accent in een cursus vanzelf meer op inzicht en redeneren te liggen. Dat betekent dat een cursus met computeralgebra voor de studenten moeilijker wordt, zelfs als de computer alleen maar wordt gebruikt voor het intoetsen van standaardopdrachten: Solve, Plot, ... Het is duidelijk dat niet alle studenten in staat zijn deze meer inzichtelijke en minder ambachtelijke wiskundecursussen goed te verwerken. Ik voorzie dat er op den duur twee typen wiskundecursussen zullen zijn: - voor de meeste studenten cursussen die zich richten op het oplossen met standaardtechnieken van standaardproblemen uit het vakgebied van hun studie, - voor de op wiskundig terrein meer begaafde studenten cursussen waarin het wiskundig inzicht en concepten centraal staan en waarin computeralgebra de rol van geavanceerde rekenaar zal spelen. Beheersing van een pakket zal voor deze studenten nodig zijn. :[font = section; inactive; Cclosed; preserveAspect; startGroup] Over de didaktiek :[font = text; inactive; preserveAspect; endGroup] Natuurlijk kan de computer gebruikt worden als didactisch hulpmiddel. Maar dat is in feite bijzaak: de computer is een stuk gereedschap dat bij de beoefening van wiskunde op vrijwel ieder niveau gebruikt kan worden. Zoals reeds gezegd heeft dat grote invloed op de inhoud van het onderwijs. Eerst dient de rol van de computer in het onderwijs, of nog sterker: het doel van het onderwijs, vastgesteld te zijn. Daarna kan bekeken worden of de computer behalve als rekenapparaat mede gebruikt kan worden als didactisch hulpmiddel. Voor de hand liggend is het gebruik van de computer voor het maken van 'mooie' plaatjes. Toch is het een open vraag of het zien van 'mooie' plaatjes bijdraagt aan een beter begrijpen van de stof. Zelf kunnen formuleren blijft ook met een computer essentieel. :[font = section; inactive; Cclosed; preserveAspect; startGroup] Conclusies :[font = text; inactive; preserveAspect; endGroup] 1. Voordat computeralgebra bij een wiskundecursus gebruikt gaat worden dient de rol daarvan in de cursus en de consequenties daarvan voor de doelstellingen en de inhoud grondig overwogen te worden. Het primaire gebruik is dat van een stuk gereedschap. 2a. Voor de meeste studenten (en het vwo?) zal het wiskundeonderwijs gaan bestaan uit het oplossen van de huidige standaardvraagstukken met eenvoudige computeropdrachten. In zulke cursussen dreigt het gevaar dat het wiskundig inzicht van de studenten nog lager wordt. 2b. Voor de meeste studenten (en het vwo?) kan het wiskundeonderwijs door gebruik van computeralgebra teruggebracht worden tot knoppen drukken. Dat kan leiden tot het verdwijnen van wiskunde als basisvak voor "iedereen". 3. Voor diegenen die later wiskunde op een minder triviaal niveau nodig hebben zullen er cursussen ontwikkeld moeten worden waarbij wiskundig inzicht centraal staat. Deze cursussen zullen ver af staan van de cursussen onder 2. 4. Voor modern serviceonderwijs in wiskunde gebruik makend van de mogelijkheden van computeralgebra is een bezinning op inhoud en doelstellingen van dat onderwijs noodzakelijk. Het is opmerkelijk dat ondanks de vele experimenten met computeralgebra zo'n discussie nog maar weinig gevoerd wordt. ^*)