Selvin Skrevet 6. november 2010 Del Skrevet 6. november 2010 (endret) Okei folkens, skal skrive et program som skal kunne bruke Lagranges Interpolasjonsformel. Det ser sånn ut til nå: from scitools.std import * def f(x): return sin(x) class Lagrange: def __init__(self, x_list, y_list): self.x_list = x_list self.y_list = y_list def __call__(self, x): L_list = [] k = (len(x_list)-1) Lagrange0 = 0 for j in range(1, k): for k in range(0, k): Lk = ((x - self.x_list[k])/float((self.x_list[j] - self.x_list[k]))) if Lagrange0 == 0: Lagrange0 += Lk else: Lagrange0 = Lk*Lagrange0 print Lk L_list.append(Lk) Poly0 = 0 for k in range(0, len(x_list)): Poly = self.y_list[k] * L_list[k] Poly0 += Poly return Poly0 x_list = [(pi/5.)*i for i in range(1,6)] y_list = [f(m) for m in x_list] ex1 = Lagrange(x_list, y_list) for x in x_list: print ex1(x) Men jeg får zerodivision, noe jeg skjønner på grunn av at de x-verdiene jeg skal bruke når jeg skal regne ut verdien av selve interpolasjon gjør at det allerede i første runden av for-løkken blir null over brøken.. Noen som har noen tips? Sitter litt fast, men skulle så gjerne fått det til EDIT: Ser ikke ut som om innrykkene kommer med der.. Søren altså.. Endret 6. november 2010 av Selvin Lenke til kommentar
zotbar1234 Skrevet 6. november 2010 Del Skrevet 6. november 2010 Men jeg får zerodivision, noe jeg skjønner på grunn av at de x-verdiene jeg skal bruke når jeg skal regne ut verdien av selve interpolasjon gjør at det allerede i første runden av for-løkken blir null over brøken.. 0 i telleren ville ikke ha gitt deg ZeroDivision. Noen som har noen tips? Sitter litt fast, men skulle så gjerne fått det til Hvis du snakker om Lagrange interpolating polynomial, så er det et par ting som forvirrer meg: for j in range(1, k): for k in range(0, k): Hvordan er dette ment til å virke? ... og (hvis vi ser bort fra indekstabben), hvorfor tar du ikke hensyn til det ene spesialtilfellet her: for k in range(0, k): Lk = ((x - self.x_list[k])/float((self.x_list[j] - self.x_list[k]))) ... som er k == j? EDIT: Ser ikke ut som om innrykkene kommer med der.. Søren altså.. '\t' er djevelens verk i koden. Lenke til kommentar
Selvin Skrevet 7. november 2010 Forfatter Del Skrevet 7. november 2010 (endret) Da har jeg kommet frem til et par ting, pluss mikset og trikset litt. Ser sånn ut nå: class Lagrange: def __init__(self, x_list, y_list): self.x_list = x_list self.y_list = y_list def __call__(self, x): L_list = [] k = (len(x_list)) Lagrange0 = 0 poly0 = 0 i = 0 for s in range(0,k): for k in range(0, k): if s == k: continue else: Ls = (x - self.x_list[k])/(self.x_list[s] - self.x_list[k]) if Lagrange0 == 0: Lagrange0 += Ls else: Lagrange0 = Lagrange0*Ls L_list.append(Lagrange0) while i <= k: poly = self.y_list[i]*L_list[i] poly0 += poly i += 1 return poly0 Jeg tror dette virker, men er søren ikke helt sikker. Det eneste jeg synes er dumt med dette er at du ikke får ut en funksjon, hadde jeg fått ut en funksjon ville alt vært så mye lettere.. Og hvordan får man innrykk her på forumet? Endret 7. november 2010 av Selvin Lenke til kommentar
Selvin Skrevet 7. november 2010 Forfatter Del Skrevet 7. november 2010 Da fikk jeg det til! Ah, knall! Sluttkoden ble slik: class Lagrange: def __init__(self, x_list, y_list): self.x_list = x_list self.y_list = y_list def __call__(self, x): k = (len(self.x_list)) poly0 = 0 i = 0 L_list = [] for s in range(0,k): Lagrange0 = 1 for m in range(0, k): if s != m: Ls = (x - self.x_list[m])/(self.x_list[s] - self.x_list[m]) Lagrange0 = Lagrange0 * Ls else: continue L_list.append(Lagrange0) while i < k: poly = self.y_list[i]*L_list[i] poly0 = poly0 + poly i = i + 1 return poly0 Lenke til kommentar
snippsat Skrevet 8. november 2010 Del Skrevet 8. november 2010 Du bør poste koden så indentering(4 plasser)blir riktig. Lenke til kommentar
carlos92 Skrevet 28. november 2010 Del Skrevet 28. november 2010 Det som er problemet ditt er at du har definert variabelen feil. Før det første så må du slette hele filen og starte på nytt, for det andre, så er dette meget ubrukelig. Alt i alt; Se over variablene, du har gjort kjempe mange feil. Men det er vel sånn nybegynnere er. Lenke til kommentar
Selvin Skrevet 29. november 2010 Forfatter Del Skrevet 29. november 2010 Takk for tipsene, men det var ikke nødvendig å slette filen på noen måte. Fikk det til, som jeg nevnte over Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå