Göm menyn

TDDI02 Programmeringsprojekt

Projektförslag: Program för maxfelanalys


Projektförslag: Program för maxfelanalys

Nedan följer ett scenario i vilket en person vill beställa ett enkelt(?) program av er. Han har en del synpunkter på vad programmet bör klara av, och kanske också vissa idéer om hur man skulle kunna implementera det.

Observera att de angivna behoven och beskrivningarna inte säkert är kompletta, samt att vissa saker han önskar sig kanske är onödiga eller skulle bli för dyra (d.v.s. för svåra) att implementera.

Det är er uppgift att utifrån denna möjligen något luddiga problemformulering författa en kravspecifikation som beskriver exakt vad programmet skall klara av, och hur det kommer att fungera gentemot användaren.

Scenario

När man gör experiment i olika naturvetenskapliga och tekniska ämnen vill man ofta beräkna ett värde utifrån andra, uppmätta, värden. Exempelvis kan man beräkna en kropps densitet utgående från några olika uppmätta längder och från en uppmätt vikt:
    densitet = vikt / (bredd * djup * höjd)
Emellertid är ju de uppmätta värdena (i det här fallet vikt, bredd, djup och höjd) inte exakta. Även om man mäter med stor noggrannhet, så kan man bara ange att det rätta värdet ligger inom ett visst intervall, t. ex. mellan 6.07 och 6.09 mm. Man kan också ange ett mätvärde tillsammans med ett maximalt fel (), kanske angivet i procent (%).

Uppgiften

Uppgiften är att skriva ett program som läser ett antal variabler med värden och felgränser samt ett uttryck, och som sedan beräknar värdet av uttrycket, med felgränser.

Exempelvis kan inmatningen se ut så här:

	variabler:
		x=8.63+-0.01
		y = 9.2..9.9
		z= 7.62E6
		t = 5.4 +- 10%
	formel:
	f = x * y + sin(z-5*t)
Notera att inmatningen ska kunna ske på fritt format (med blanktecken lite här och där) och med felgränserna angivna på flera olika sätt, och att formeln som ska beräknas kan vara ganska komplicerad!

Formeln måste minst kunna innehålla de fyra räknesätten (och de ska beräknas i rätt ordning!), och perentesuttryck. Dessutom bör man kunna beräkna kvadratrötter och potenser, och gärna också matematiska funktioner som logaritmer och trigonometriska funktioner (sinus, cosinus m. fl.).

Programmet ska läsa dessa definitioner, och sen mata ut något i stil med detta (siffrorna stämmer nog inte!):

	f = 79.30 .. 85.54 = 82.42 +- 3.12 = 82.42 +- 3.7%
Man ska alltså få det beräknade värdet, inklusive maximalt fel uttryckt på olika sätt!

Svårigheterna med uppgiften är huvudsakligen de här:

  • Inläsningen av formeln, och översättning till en datastruktur som sen kan användas i beräkningen
  • Beräkningen av formeln, där man alltså måste ha med felgränser.
  • Matematiken i felgränsberäkningen.
En enkel metod som man kan använda, om man bara har monotona funktioner (= som minskar eller ökar hela tiden), och inte alltför många variabler, är att räkna ut formelns värde för alla möjliga kombinationer av variablernas extremvärden, och komma ihåg det största och det minsta värde som uppstod. Har man icke-monotona funktioner (som t. ex. sinus), blir det krångligare (varför?).

Lycka till!


Thomas Padron-McCarthy, 20 september 1998.

Sidansvarig: Klas Arvidsson
Senast uppdaterad: 2012-08-23