1
Beatrice Frock
KTH Matematik
4 juli 2013
SF1513 NumProg för Bio3
HT2013
LABORATION 4
Ekvationslösning, interpolation och numerisk integration
Enkel Tredimensionell Design
Efter den här laborationen skall du känna igen problemtyperna linjära och icke-linjära ekvationer, överbestämda linjära ekvationer och minst ett sätt att lösa varje problemtyp samt att kunna
uppskatta lösningsnoggrannheten. Du skall också lära dig att interpolera, integrera numeriskt och
förstå begreppet noggrannhetsordning. Vidare, du ska kunna utföra enklare tredimensionell design
med rotationsfigurer.
1. Icke-linjär skalär ekvation
a) Metan reagerar med vattenånga och bildar kolmonoxid och vätgas enligt reaktionen
CH4 (g) + H2 O(g) CO(g) + 3H2 (g)
Man låter CH4 och H2 O med vardera partialtrycken pCH4 = pH2 O = 1 bar reagera i en reaktionskammare. Man kan räkna ut partialtrycken av de olika ämnena vid jämvikt från ekvationen
x(3x)3
pCO pH2 3 1
= 26
2 =
o
pCH4 pH2 O p
(1 − x)2
där pCO /po = x, pH2 /po = 3x, pCH4 = pH2 O = 1 − x och po = 1 bar. Lös ekvationen numeriskt
och beräkna partialtrycken av de olika komponenterna i jämviktsblandningen. Kontrollera även
kvadratiska konvergensen.
b) Bensens ångtryck ges av följande empiriska uttryck
ln(p/bar) =
−10.655375
+23.941912−22.388714x+20.2085593x2 −7.2196556x3 +4.84728(1−x)1.70
x
där x = T /Tc och den kritiska temperaturen för bensen Tc = 561.75 K. Lös ekvationen numeriskt
och beräkna bensens normala kokpunkt, dvs T vid p = 1 atm = 1.013 bar.
2
2. Linjär algebra: robotarm
Figuren visar en robotarm med två länkar. Ledvinklarna ges av θ1 och θ2 . Koordinaterna för
robothanden blir
x = L1 cos θ1 + L2 cos (θ1 + θ2 )
y = L1 sin θ1 + L2 sin [θ1 + θ2 )
där L1 och L2 är länklängderna.
Vinklarna θ1 och θ2 som bestämmer robothandens rörelse kontrolleras tidsmässigt av följande
polynomuttryck:
θ1 (t) = θ1 (0) + a1 t3 + a2 t4
Θ2 (t) = θ2 (0) + b1 t3 + b2 t4
där θ1 (0) och θ2 (0) är startvärden för vinklarna vid tiden t = 0. Vinklarna anges i enheten grader
och tiden i sekunder.
Robothand
L2
θ2
L1
θ1
(0,0)
a Ställ upp ett linjärt ekvationssystem för bestämning av parametrarna a1 , a2 , b1 och b2 , givet
startvärdena θ1 (0) = 10, θ2 (0) = 20 samt vinklarnas värden då t = 3: θ1 (3) = 50.5, θ2 (3) = −28.6
och då t = 4: θ1 (4) = 131.6, θ2 (4) = −140.0. Lös ekvationssystemet i MATLAB.
b Använd dina resultat i a) för att plotta robothandens svep när tiden t går från 0 till 4 sekunder,
med värdena L1 = 4 m och L2 = 3 m.
3
3. Interpolation och minstakvadratanpassning
Givet är följande tabell över termisk konduktivitet som funktion av temperaturen för elementet
järn
Temperatur, T , (K):
Kond., k, (W/cmK):
100
1.32
200
0.94
300
0.835
400
0.803
500
0.694
600
0.613
700
0.547
800
0.487
900
0.433
1000
0.38
a) Utnyttja de fyra värdena vid temperaturen 100, 400, 700 och 1000 och interpolera genom
dem med ett tredjegradspolynom. Rita de fyra givna punkterna och polynomkurvan med fin diskretisering (100:20:1000).
Hur stor är konduktiviteten, k när temperaturen T = 300K ? Jämför med det uppmätta värdet.
Varför använder vi inte alla punkterna och interpolerar med ett niondegradspolynom ?
b) Anpassa ett andragradspolynom i minstakvadratmening till givna data. Plotta på samma
sätt som ovan och ange konduktiviteten för temperaturen T = 300K enligt denna modell. Jämför
med det uppmätta värdet. Beräkna även felkvadratsumman.
c) Gör om samma beräkningar som i b) för ett tredjegradsploynom. Är anpassningen bättre än
i b)?
4. Numerisk integration
För reala gaser beskriver man den kemiska potentialens tryckberoende med ekvationen
µ(p) = µo + RT ln a = µo + RT ln γ
p
po
som definierar gasens aktivitet a och aktivitetskoefficient γ och där po = 1 bar. Aktivitetskoefficienten kan beräknas från följande samband
Z p
z−1
dp
ln γ =
p
1
där z(p) är kompressibilitetsfaktorn. Man har uppmätt z vid olika tryck vid 100o C enligt följande
tabell
p/atm
z
1
0.9976
50
0.877
100
0.749
150
0.638
200
0.592
300
0.647
400
0.755
500
0.873
600
0.993
800
1.228
1000
1.453
Plotta (z − 1)/p mot p och beräkna aktivitetskoefficienten γ vid trycken p =50, 500 respektive 1000
atm genom att numeriskt beräkna integralen för de tre värdena på den övre integrationsgränsen.
4
5. Numerisk derivering
Jämviktskonstanten K för reaktionen 2C3 H6 (g) C2 H4 (g)+C4 H8 (g) har bestämts experimentellt
vid olika temperaturer enligt nedanstående tabell.
T
K
300
0.0503
350
0.0542
400
0.0598
450
0.0664
500
0.0734
550
0.0805
600
0.0877
Jämviktskonstantens temperaturberoende ges av van’t Hoffs ekvation
(
∆H o
∂lnK
) =−
∂(1/T ) p
R
Plotta ln K mot 1/T och bestäm ∆H o vid 450 K genom att numeriskt bestämma derivatan i
punkten T = 450 K. Gaskonstanten R = 8.314 J/K mol.
6. Tredimensionell design
a) Skapa en kolumnvektor z med element från −14 till 5 med något lämpligt antal steg, och
definiera funktionen x = 2 − arctan(z).
Konstruera nu en radvektor φ med element från 0 till 2π.
Med satserna
X = x cos(φ),
Y = x sin(φ),
Z = z ∗ ones(size(φ)),
surf l(X, Y, Z),
axis equal
skapas en tredimensionell rotationsfigur.
Vad föreställer figuren du nu har konstruerat?
Prova gärna kommandona axis off, shading flat och colormap hot.
b) Skriv ett Matlab-program där värdet n = antalet punkter matas in, och därefter n stycken
(x, y)−koordinatpar, med hjälp av [x,y]=ginput(n).
Ett interpolationspolynom (gradtal n − 1) ska läggas genom dina inmatade punkter.
Ditt program ska beräkna koefficienterna i detta polynom. Kör programmet och rätta till eventuella
fel innan du fortsätter.
Konstruera nu en radvektor φ med element från 0 till 2π, t.ex. med 20 steg.
Designa rotationsfiguren där ditt interpolerande polynom roterar kring x−axeln: Först definiera
en kolumnvektor X med elementen som löper från x1 till xn , med samma antal komponenter som
radvektorn φ.
Definiera sedan en kolumnvektor Y med interpolationspolynomets värden för alla element i X.
Med satserna
Xplot=X*ones(size(fi))
Yplot=Y*cos(fi)
Zplot=Y*sin(fi)
surfl(Xplot, Yplot, Zplot)
kan en figur nu plottas.
Använd gärna axis off, och vänd på figuren.
5
Alternativ beräkning:
I stället för att använda ginput, får du rita en personlig rotationsfigur som skapas med hjälp av
ditt personnummer, om du föredrar.
Använd i så fall X=[1:10]’ och siffrorna i ditt personnummer som 10 stycken element i vektorn Y .
Lägg ett interpolationspolynom genom punkterna, och rita en rotationsfigur enligt ovan. Uppstår
Runges fenomen?
Om du vill, kan du experimentera med olika steglängder och färgskalor.
Hur många timmar ungefär har den här laborationen tagit?
En fråga på kursutvärderingen i slutet av kursen kommer att gälla tidsåtgång och laborationsomfång. Tänk
redan nu igenom vad som är bra och vad som kan förbättras!