Hallo Stel: F:=x^2+2*x-2; solve(F); "Antwoord": ... , ... (met ... de antwoorden) Je krijgt dus de antwoorden met een komma. 1 opl is pos, de andere neg. Stel dat ik 't nu slimmer wil aanpakken, want ik heb alleen de pos oplossing nodig. Dus: fsolve(x^2-2,x=0..10); "Antwoord": 1.4....... Dan vloek ik even, want deze komt in decimalen, :(. Hoe kan ik het zelfde bereken als het kommando fsolve(x^2-2,x=0..10); maar wel de opl krijgen in zijn zuiverste vorm (met wortels en breuken), maar natuurlijk geen complexe oplossingen. Hoe doe ik dat?
Compug
Student universiteit - vrijdag 3 oktober 2003
Antwoord
Beste Compugreen, Sorry dat je wat langer moest wachten, maar het was een aardig probleem. Niemand hier wist een echt mooie oplossing dus dan maar dit Maple wil natuurlijk zo precies mogelijk zijn en geeft je dus altijd alle antwoorden. In de help files staat dan ook: fsolve - solve using floating-point arithmetic. Ofwel dat geeft alleen decimale antwoorden. Dan solve zelf. Aardig is hier dat je daarvoor 'assume' misschien zou kunnen gebruiken, assume(x0): Maar helaas dat werkt niet Ook bij 'simplify' kan je een assume toevoegen, maar vreemd genoeg: simplify(solve(x^2+2*x-2),assume=possitive); werkt ook niet en simplify({solve(x^2+2*x-2)},assume=possitive); ook niet Sterker nog: simplify({solve(x^2-4,x)},assume=positive); geeft -2 en 2, nu vind ik -2 niet echt positief
Goed al in al zie ik ook geen simpele uitweg, dan maar zelf wat gaan programmeren in Maple. Hieronder een eerste programaatje dat de oplossingen in een lijst zet, en vervolgens iedere oplossing af gaat en controleert of deze positief is (imaginaire oplossingen zijn niet positief dus dat hoeft niet meer). 'evalf' wordt ook gebruikt omdat maple van bv. sqrt(3) niet kan bepalen of dit positief is:
> g:={solve(x^2+2*x-2=0,x)}; > SingleAnswer:=proc(g) > local i: > for i from 1 to nops(g) do > if type(evalf(g[i]),positive)=true then > print(g[i]); > fi: > od: > end proc: > SingleAnswer(g);
Vaak wil men echter ook nogeens verder werken met de antwoorden. Een paar kleine wijzigingen maakt dit mogelijk. In onderstaande procedure worden de antwoorden die positief zijn een variabele toegekent, de eerste a[1], de tweede a2 etc. Nadat je dus de procedure hebt gedaan kun je de antwoorden terug krijgen door a[1]; etc.
> g:={solve(x^2+2*x-2=0,x)}; > SingleAnswer:=proc(g) > > local i,j: > global a: > > j:=0: > > for i from 1 to nops(g) do > if type(evalf(g[i]),positive)=true then > j:=j+1: > a[j]:=g[i]: > print(g); > fi: > od: > > end proc: > SingleAnswer(g); > > a[1];