Vinnaren i pepparkakshustävlingen!
2014-02-14, 12:39
  #1
Medlem
Temperatur, T, (K): 100 200 300 400 500 600 700 800 900 1000
Kond., k, (W/cmK): 1.32 0.94 0.835 0.803 0.694 0.613 0.547 0.487 0.433 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).
Har testat att skriva med ett Newton interpolation såhär i matlab :

clc, clear all, close all

%Temperatur = x
%Konduktivitet = y

%Newtons ansats = g(x)=c1+c2(x-100)+c3(x-100)(x-400)+c4(x-100)(x-400)(x-700)

c1=1.32; %c-värdena fås genom insättning av x-värden i formeln
c2=(0.803-1.32)/300;
c3=(-1.32-c2*600)/(600*300);

t=100;
for x=100:20:1000;
f(t)=c1+c2*(x-100)*(x-400)+c3*(x-100)*(x-400)*(x-700);
plot(f,'r')
grid On
t=t+20;
end
[x,y]=ginput

Problemet är att om jag kollar olika värden förutom de fyra punkterna får jag helt fel konduktivitet, vet att interpolationen inte stämmer exakt mellan de angivna punkterna. Men även om jag testar direkt i formeln så blir det helt fucked...

Någon som har tips på hur jag ska göra eller ska jag skriva polationen på ett annat sätt?
Citera
2014-02-16, 07:34
  #2
Medlem
Förutsatt att du har gjort rätt, vilket jag inte kontrollerat, är nog syftet med uppgiften att visa att polynominterpolation med få datapunkter sällan är särskilt bra. Speciellt inte när man har N mätvärden och anpassar ett polynom av grad N-1 (vilket kan göras exakt), i detta fall kan små mätfel få stor påverkan på det anpassade polynomet.

Ett tredjegradspolynom går alltid att anpassa exakt till att gå genom fyra givna punkter (så länge de har olika x-värden), men för att uppnå denna exakthet kan det krävas att polynomet "svänger" väldigt mycket mellan mätpunkterna. Ett klassiskt problem av så kallad "overfitting", där all vikt läggs vid att exakt anpassa funktionen till de givna mätpunkterna på bekostnad av ett få en god approximation av den underliggande funktionen/distributionen.

Du kan för övrigt kolla matlabs inbyggda `polyfit' så slipper du räkna koefficienter för hand.
Citera
2014-02-16, 09:49
  #3
Medlem
Bu77ens avatar
Citat:
Ursprungligen postat av tertep
Förutsatt att du har gjort rätt, vilket jag inte kontrollerat, är nog syftet med uppgiften att visa att polynominterpolation med få datapunkter sällan är särskilt bra. Speciellt inte när man har N mätvärden och anpassar ett polynom av grad N-1 (vilket kan göras exakt), i detta fall kan små mätfel få stor påverkan på det anpassade polynomet.

Ett tredjegradspolynom går alltid att anpassa exakt till att gå genom fyra givna punkter (så länge de har olika x-värden), men för att uppnå denna exakthet kan det krävas att polynomet "svänger" väldigt mycket mellan mätpunkterna. Ett klassiskt problem av så kallad "overfitting", där all vikt läggs vid att exakt anpassa funktionen till de givna mätpunkterna på bekostnad av ett få en god approximation av den underliggande funktionen/distributionen.

Du kan för övrigt kolla matlabs inbyggda `polyfit' så slipper du räkna koefficienter för hand.


I just det här fallet så ansluter det polynom som har exakt passning för värdena 100, 400, 700 och 1000 mycket bra, mindre än 0,8% avvikelse även för mätvärdena för T= 500, 600, 800 och 900.

Värdena för T=200 och T=300 ligger dock rätt långt, ca -17% resp -11% från polynomet.
Polynomets värden för 200 och 300 blir 1,108 respektive 0,938 vilket gör att man misstänker att de angivna värdena är resultatet av någon felavskrivning eller liknande.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback