Å løse ligninger i Maple 

En ligning i en ukjent 

Her er et enkelt eksempel: 

 

> solve( x^2 = 2, x);
 

`*`(`^`(2, `/`(1, 2))), `+`(`-`(`*`(`^`(2, `/`(1, 2)))))
 

La oss se på noe mer komplisert. Vi definerer en funksjon: 

 

> f := x -> x^6 - x^2 - x + cos(x);
 

proc 
(x) options operator, arrow; `+`(`*`(`^`(x, 6)), `-`(`*`(`^`(x, 2))), 
`-`(x), cos(x)) end proc
 

> solve( f(x) = 0, x);
 

RootOf(`+`(`*`(`^`(_Z, 6)), `-`(`*`(`^`(_Z, 2))), `-`(_Z), 
cos(_Z)))
 

Maple greide naturlig nok ikke dette, men håpet er ikke ute: Maple kan også finne løsninger numerisk, ved f.eks. Newtons metode. Da bruker vi kommandoen "fsolve" (f for floating point). 

 

Vi må da som regel hjelpe Maple litt på vei ved å angi et intervall hvor den skal lete etter løsninger. Her er et eksempel: 

 

> fsolve( f(x) = 0, x, -10..10);
 

.5619374408
 

La oss sjekke verdien av f  i dette punktet: 

 

> f(%);
 

0.
 

Her brukte vi symbolet % som alltid er synonymt med det siste svaret Maple har gitt. Altså i dette tilfellet x=0.561... 

 

To ligninger i to ukjente (generaliserer til n antall ligninger i n ukjente) 

Et første eksempel: 

 

> Ligninger := { y*(1-x^2) = 0, x*(1-y^2) = 0 };
 

{`*`(x,
 `*`(`+`(1, `-`(`*`(`^`(y, 2)))))) = 0, `*`(y, `*`(`+`(1, `-`(`*`(`^`(x,
 2)))))) = 0}
 

> solve( Ligninger, {x,y} );
 

{x = 0,
 y = 0}, {x = 1, y = 1}, {x = 1, y = -1}, {x = -1, y = 1}, {x = -1, y = 
-1}
 

Maple fant greit alle løsningene av systemet. 

 

Men la oss ta noe som skaper større hodebry: 

 

> Ligninger := { cos(x^2-y) = 0, x^3*y + sin(x) = 0  };
 

{`+`(`*`(`^`(x, 3), `*`(y)), sin(x)) = 0, cos(`+`(`*`(`^`(x, 2)), 
`-`(y))) = 0}
 

> solve( Ligninger, {x,y} );
 

{x = 
RootOf(`+`(`*`(2, `*`(sin(_Z))), `*`(2, `*`(`^`(_Z, 5))), 
`-`(`*`(`^`(_Z, 3), `*`(Pi))))), y = `+`(`*`(`^`(RootOf(`+`(`*`(2, 
`*`(sin(_Z))), `*`(2, `*`(`^`(_Z, 5))), `-`(`*`(`^`(_Z, 3), 
`*`(Pi))))...
 

Ikke så mye hjelp i dette. La oss prøve numerisk løsning istedet: 

 

> fsolve( Ligninger, {x,y}, {x=0..10,y=0..10} );
 

{x = 
4.520064275, y = 0.1062879779e-1}
 

Hvis vi vil lagre løsningene som variabler kalt x1 og y1, kan vi gjøre som følger: 

 

Først definerer vi 

 

> Losning := fsolve( Ligninger, {x,y}, {x=0..10,y=0..10} );
 

{x = 
4.520064275, y = 0.1062879779e-1}
 

Så skriver vi 

 

> x1 := subs(Losning, x);
y1 := subs(Losning, y);
 

 

4.520064275
0.1062879779e-1
 

La oss sjekke om svaret er en løsning av ligningene: 

 

> cos(x1^2-y1); x1^3*y1 + sin(x1);
 

 

-0.1666343950e-8
0.4e-9
 

Dette er i praksis null, så svaret er godt.