Exempel på användning av Nyquists metod och Maple.

De följande två exemplen är avsedda att ge stöd för lösningen av Inlämningsuppgifterna 1b och 2b i Komplex Analys för E, F och T .

Först några allmänna Maple-tips:




Exempel 1

Detta exempel ansluter sig till uppgift 1 i Inlämningsuppgiften. Problemet är att avgöra hur många nollställen polynomet
f(z) = 4 z3 - 2 z2 + 3 z + 7 har i högra halvplanet.

Vi använder Maple och Nyquists metod:

> restart;
with(plots,conformal):

Börja alltid med restart.
':' efter andra raden i st. f. ';' förhindrar onödig textoutput.

Vi definierar nu tredjegradspolynomet f(z).

> a:=4;b:=-2;c:=3;q:=7;
f:=z-> a*z^3+b*z^2+c*z+q;

[Maple Math]

[Maple Math]

[Maple Math]

[Maple Math]

[Maple Math]

Nu skriver vi ut plottningskommandot:

> m:=5;
conformal(z,z=-m-m*I..m+m*I, grid=[2,2] );

Parametern 2 i grid-kommandot anger att en kvadrat avbildas (2 lodräta och 2 vågräta sträckor).

Parametern m anger hur stor denna kvadrat är.(Nedre vänstra hörnet : -m-mi, övre högra : m+mi.

Observera att det komplexa 'i' anges med 'I'.

Vi försöker med m=5 och ser efter hur kvadraten ser ut:

[Maple Math]

Man ser att Maple färgar lodräta sträckor röda och vågräta gröna.

Nu ser vi efter hur f(z) transformerar denna kvadrat:

(Notera att 'z' ersätts med 'f(z)' i första positionen:)

> m:=5;
conformal(f(z),z=-m-m*I..m+m*I, grid=[2,2] );

Lägg märke till att de röda och gröna kurvdelarna svarar mot motsvarande delar av kvadraten.

Vi ska nu räkna antalet varv runt origo. Eftersom f(z) är ett 3:egradspolynom vill vi hitta 3

stycken nollställen inom den givna kvadraten.

Antalet nollställen inom kvadraten skall ju enligt argumentprincipen vara = antal varv

som den transformerade kvadratens rand omkretsar origo.

Här syns det ganska tydligt att det blir 3 varv.

Vi kanske därför kan pröva om alla tre nollställen ligger inuti en ännu mindre kvadrat.

Vi försöker med m=3:

>

> m:=3;
conformal(f(z),z=-m-m*I..m+m*I, grid=[2,2] );

[Maple Math]

OK! 3 varv nu också.

Vi kan därför i fortsättningen använda denna kvadrat.

Nu vill vi se hur många nollställen som finns i högra halvplanet.

Vi ändrar därför kvadraten till den rektangel som utgör kvadratens del i

högra halvplanet..

Samtidigt lägger vi in kommandot 'view' med en parameter 'M' som gör det

lätt att snabbt ändra koordinataxlarnas skalor.

> m:=3;
M:=300;
conformal(f(z),z=-m*I..m+m*I, grid=[2,2] , view=[-M..M,-M..M]);

Lägg märke till här hur rektangelns hörn har ändrats i conformalkommandot (z = ... osv)!

[Maple Math]

[Maple Math]

Här verkar det inte fullt klart hur

kurvan ser ut nära origo. Vi förstorar upp området nära origo genom att ge M värdet 20:

> M:=20;
conformal(f(z),z=-m*I..m+m*I, grid=[2,2] , view=[-M..M,-M..M]);

[Maple Math]

OK! Nu syns det klart att kurvan håller sig till höger om origo. Vi kan räkna till 2 varv runt origo och därmed 2 nollställen i den högra delen av kvadraten.

Men eftersom denna kvadrat innehöll alla tre nollställena vet vi att det finns 2 nollställen i det högra halvplanet.

Därmed är uppgiften löst.



Anm: Ibland behöver man öka antalet plottningspunkter för att få pålitliga kurvor efter en uppförstoring.

Inom kommandot 'conformal' sker detta genom ' numxy=[N,M]' där de hela talen N och M har default-värdet 15.

Försök med N=M=100.

numxy-kommandot används på samma sätt som grid och view. Kom ihåg kommat mellan dessa kommandon.

Inom kommandot 'plot' (som blir aktuellt i nästa exempel) används istället ' numpoints = N', där N=50 är default.







Exempel 2.

Detta exempel ansluter sig till uppgift 2 i Inlämningsuppgiften.

Vi betraktar den analytiska funktionen

g(z) = z4 + ez + 5iz + 13.

Med Rouchées sats kan man visa att g(z) har 4 nollställen inom cirkeln med centrum i origo och med radien = 3.

Vi skall nu m.hj.a. Maple och Nyquist försöka hitta den största cirkeln med centrum i origo som bara innehåller 3 nollställen.
Man inser kanske att radien till denna cirkel är ungefär lika med avståndet från origo till det mest avlägsna nollstället.
Vi söker bland cirklar vars radier har två decimaler.

Vi behöver alltså plotta bilden av cirklar med olika radier r under transformationen g(z):

> restart;
with(plots,conformal):

Den vanliga inledningen.

>
a:=5;b:=13;
g:=z->z^4+ exp(z)+I*a*z+b;

Här har vi definierat funktionen g(z).

r:=3;
assume(t,real);
G:=evalc(subs(z=r*exp(I*t),g(z))):

Notera att t måste definieras som ett reellt tal.
Vi har nu satt in uttrycket för en cirkel med centrum i

origo och med radien r=3 (z=3eit ) i funktionen g(z).
G(t) ger alltså den transformerade kurvan då t går från 0 till pi.

>
u:=Re(G):
v:=Im(G):

Real- och imaginärdelen av G(t) behövs i plottningskommandot.

n:= 150;
plot([u,v,t=0..2*Pi],view=[-n..n,-n..n]);

Här är plottningskommandot som plottar kurvan z = G(t), dvs:

x=u(t)

y=v(t), då t går från 0 till 2*pi.

Vi också lagt in 'view' för att kunna förstora upp kurvan

om det behövs.

Plottning med r=3 och view-parametern n= 150 ger:

Man ser här direkt att

alla varv (4 st) omkretsar origo.

Alla nollställen ligger tydligen inom cirkeln med radien 3.

(Värdet n=150 för view-parametern får man pröva sig fram till).

Vi försöker igen med en mindre cirkel. r=2:

> r:=2;
assume(t,real);
G:=evalc(subs(z=r*exp(I*t),g(z))):

u:=Re(G):
v:=Im(G):

n:= 150;
plot([u,v,t=0..2*Pi],view=[-n..n,-n..n]);

[Maple Math]

[Maple Math]

Kurvan är här för liten. Vi får minska view-parametern till 40:

> r:=2;
assume(t,real);
G:=evalc(subs(z=r*exp(I*t),g(z))):

u:=Re(G):
v:=Im(G):

n:= 40;
plot([u,v,t=0..2*Pi],view=[-n..n,-n..n]);

[Maple Math]

[Maple Math]

Nu ligger tydligen bara 2 nollställen inom cirkeln.

Vi får försöka med ett större r-värde.

Osv....

Efter en stunds prövande finner man att bland cirklar med tvådecimalsradier är den med r=2.15 den största som bara innehåller 3 nollställen.

Det är i det här fallet nödvändigt att förstora upp kurvan nära origo för att finna rätt r-värde. Eventuellt behöver man också fler plottningspunkter.
Försök i så fall med 'numpoints=200' inuti plot-kommandot.

Ex: plot([u,v,t=0..2*Pi],view=[-n..n,-n..n],numpoints=200) .