Blandade exempel

Ett ekvationssystem 
(Tillämpning med fri variabel)

Ur en kinesisk (SuperStar[lärobok]) från 500-talet

"En tupp kostar fem mynt,  en höna kostar tre mynt, och för ett mynt kan man köpa tre kycklingar. Vi använder 100 mynt och köper 100 fåglar för dem. Hur många kycklingar, tuppar och hönor kan vi köpa"

(SuperStar[ ]) Zhang Qiujian: "Mathematical Manual", Kapitel 3, problem 38.

Detta är ett klassiskt exempel på tillämpningar som går att lösa med linjära ekvationssystem.

Modell

Antag att vi köper
	x tuppar
	y hönor
	z kycklingar

Antalet fåglar är då:
	x+y+z=100
	
och kostnaden är:
	5x+3y+z(1/3)=100

Ekvationssystem

x + y + z = 100
	5x+3y+z(1/3)=100

Vi har två ekvationer och tre obekanta.
Vad kan vi då säga om lösningsmängden?

Lösning

{{tuppar,hönor,kycklingar}}={x,y,z}/.Solve[
{{1,1,1}.{x,y,z}==100,{5,3,1/3}.{x,y,z}==100},
{x,y}]

Antal tuppar

tuppar

Antal hönor

hönor

Diskussion

I vår ekvationslösning är z en fri variabel.
Vad innebär det för vårt problem?

z kan inte anta vilka värden som helst.
Vad finns det för begränsningar?

Begränsningar

Vi köper fåglar, men säljer inga, dvs:  x, y ocn z får inte vara negativa
Vi köper hela fåglar, dvs x, y ocn z måste vara heltal

Så här:

Reduce[tuppar≥0]
Reduce[hönor≥0]
Reduce[kycklingar≥0]

Eller så här

Reduce[{tuppar≥0,hönor≥0,kycklingar≥0}]

Vi ska ha heltal

?IntegerPart

IntegerPart[600/7]

Resultat

Nu kan vi göra en tabell över möjliga lösningar

Table[{tuppar,hönor,kycklingar},{z,75,85,3}]

Flöden i nätverk

Grafer kan plottas med GraphPlot

?GraphPlot

En enkel graf

GraphPlot[{1->5,2->5,3->5,4->5}]

Med pilar som visar flödesriktningarna

GraphPlot[{1->5,2->5,3->5,4->5},DirectedEdges->True]

Med numrerade noder (vertex)

GraphPlot[{1->5,2->5,3->5,4->5},VertexLabeling->True,DirectedEdges->True]

Med text på nätets grenar

GraphPlot[{{1->5,50},{2->5,x1},{3->5,40},{5->4,x2}},VertexLabeling->True,DirectedEdges->True]

Flödet i en nod (knutpunkt) ger en ekvation

ekv1=50+x1+40-x2==0
Solve[ekv1]

Ett nät med flera noder.

GraphPlot[{{1->5,50},{6->2,x1},{7->3,40},{4->7,x2},{5->6,x3},{6->7,100},{7->5,x4}},VertexLabeling->True,DirectedEdges->True]

Varje nod ger en ekvation

ekvnod5=50+x4-x3==0
ekvnod6=x3-x1-100==0
ekvnod7=100-40+x2-x4==0

Lös ekvationssystemet

Solve[{ekvnod5,ekvnod6,ekvnod7}]

Jag kan styra vilka variabler jag vill lösa ut

{{xett,xtre,xfyra}}={x1,x3,x4}/.Solve[{ekvnod5,ekvnod6,ekvnod7},{x1,x3,x4}]

Vad har nu variablerna för värden?

{x1,x3,x4}

{xett,xtre,xfyra}

Ett nytt nät

GraphPlot[{{1->5,50},{6->2,x1},{7->3,40},{4->7,75},{5->6,x4},{6->7,x2},{7->5,x3}},VertexLabeling->True,DirectedEdges->True]

Ekvationer

ekvnod5=50+x3-x4==0;
ekvnod6=x4-x1-x2==0;
ekvnod7=75-40+x2-x3==0;

{{xx1,xx2,xx3}}={x1,x2,x3}/.Solve[{ekvnod5,ekvnod6,ekvnod7},{x1,x2,x3}]

Vad innebär det?

Reduce[{xx2≥0,xx3≥0}]

En transformationsmatris

Figuren till vänster transformeras till den högra figuren genom en linjär transformation
	T(x): A x = b .

Bestäm transformationsmatrisen A

En enkel kodning

En fransk patrullbåt på Medelhavet skickar information om sin position till basen i Marseille. Informationen kodas först. 
Låt oss för enkelhets skull anta:
	 
	 Att positionen utgörs av koordinaterna 
	 	a=((Subscript[a, 1]),(Subscript[a, 2]))=(12,7)
	 
	 Att kodningen utförs med kodningsmatrisen
	 	M=(({{2, 6}, {3, 7}}))

Den kodade signalen blir då:
		b=M a

M=(({{2, 6}, {3, 7}}))

signalb=M.(({{12}, {7}}))

Avkodning

I Marseille vill man avkoda signalen och få informationen i klartext.
Självklart kan man då lösa ekvationen
	M x=b
men det är en orationell metod.

I stället utnyttjar man att
	x=(M^(-1))b 
och definierar avkodningsmatrisen 
	 A=(M^(-1))

avkodMatris=Inverse[M]

Vilket ger

avkodMatris.signalb

Krav på matriserna?

Vad har vi för krav på matrisen M (och därmed även på A)?

Test

Det[avkodMatris]≠0
Det[M]≠0

Varför testar vi detta?
Och vad säger svaret

Eller

avkodMatris.M

Varför testar vi detta?
Och vad säger svaret

Alternativ

avkodMatris.M==IdentityMatrix[2]

Signalen skickas vidare

Från Marseille skickas signalen vidare till Paris.
Givetvis kodas den ännu en gång

MP=(({{3/7, 6}, {(Sqrt[3]), -1}}));
signParis=MP.signalb

Hur skall signalen avkodas?

Steg 1

Inverse[MP].signParis

Test

Inverse[MP].signParis==signalb

Steg2

avkodMatris.Inverse[MP].signParis

???

Simplify[%]

Migrationsmatris

Antag att vi har ett samhälle där varje år
	70 % av invånarna i staden bor kvar, 20 % flyttar till kusten och  10 % till landet.
	90 % av invånarna vid  kusten bor kvar, 5 % flyttar till staden och  5 % till landet.
	50 % av invånarnapå landet bor kvar, 45 % flyttar till staden och  5 % till kusten.

En linjär kombination

Om antalet invånare 
	i staden är s, 
	antalet vid kusten är k 
	och på landet l 
kan vi teckna antalet invånare nästa år som
	(Subscript[s, 1])=0.7 s+0.05k+0.45 l
(Subscript[k, 1])=0.2 s+0.9k+0.05 l 
(Subscript[l, 1])= 0.1s+0.05 k+0.5l

Migrationsmatris

migr=(({{.7, .05, .45}, {.2, .9, .05}, {.1, .05, .5}}));

migr.(({{s}, {k}, {l}}))

Ingångsvärden

Vi antar att befolkningsvektorn har följande begynnelsevärden

folk=(({{1000}, {500}, {400}}));

Vad händer

Efter ett år

folk1=migr.folk

Efter ännu ett år

folk2=migr.folk1

...och ett till

folk3=migr.folk2

och efter fyra år

folk4=migr.folk3

Finns det ett jämviktsläge?

Eigenvalues[migr]
Eigenvectors[migr]

Test

migr.Eigenvectors[migr][[1]]

Ett test till

migr.Eigenvectors[migr][[1]]==Eigenvectors[migr][[1]]