Python Lagrange Interpolation

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
FabSel
User
Beiträge: 4
Registriert: Freitag 26. Februar 2016, 16:36

Hallo zusammen,

habe mit der Programmierung einer Lagrange Multipli. Schwierigkeiten. Das Problem ist die Definition der "Variablen" a wie ich vermute, die Python nicht erkennen will. Es soll eine Funktion auf Grundlage von zwei Input Vektoren ausgegeben werden. Eigentlich relativ einfach... :roll:

Kann mir bitte jemand weiterhelfen? Würde eigentlich ungern viel am Code ändern müssen... :?

Code: Alles auswählen

# Lagrange Interpolation NA

import matplotlib.pyplot as plt
import numpy as np
#import sympy as sp
from sympy import *
#from numpy import arange

x = (-2.5, -1., 0.5, 2., 3.5)
y = (0.,3., 3.5, 0., -2.5)
L = np.zeros(len(x)-1)
p = 0.0
a = Symbol('a')
print a

print L

for i in range (0, len(x)-1):
    L[i] = 1
    print L
    for j in range (0, len(x)):
        if i != j:
            L[i] = L[i]*((a-x[j])/(x[i]-x[j]))
            print L
    p = p + y[i]*L[i]
print p
Folgende Fehlermeldung wird ausgegeben:

Code: Alles auswählen

%run "C:\Users\FabSel\..."
a
[ 0.  0.  0.  0.]
[ 1.  0.  0.  0.]
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
C:\Users\FabSel... in <module>()
     21     for j in range (0, len(x)):
     22         if i != j:
---> 23             L[i] = L[i]*((a-x[j])/(x[i]-x[j]))
     24             print L
     25     p = p + y[i]*L[i]

C:\Users\FabSel\AppData\Local\Enthought\Canopy\User\lib\site-packages\sympy\core\expr.pyc in __float__(self)
    223         if result.is_number and result.as_real_imag()[1]:
    224             raise TypeError("can't convert complex to float")
--> 225         raise TypeError("can't convert expression to float")
    226 
    227     def __complex__(self):

TypeError: can't convert expression to float
BlackJack

@FabSel: `L` ist ein Array mit Zahlen und da kann man auch nur Zahlen an die Elemente zuweisen. Dein Ausdruck enthält aber ein Symbol `a` und kann deshalb nicht zu einer Zahl ausgewertet werden weil der Wert von `a` nicht bekannt ist.
FabSel
User
Beiträge: 4
Registriert: Freitag 26. Februar 2016, 16:36

Danke dir! Möchte a allerdings keine Zahl zuweisen, damit am Ende eine Funktion in Abhängigkeit von a herauskommt. Wie kann ich dies nun lösen? Bitte um Hilfe. Danke :K
Benutzeravatar
snafu
User
Beiträge: 6741
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

FabSel hat geschrieben:Möchte a allerdings keine Zahl zuweisen, damit am Ende eine Funktion in Abhängigkeit von a herauskommt.
An irgendeiner Stelle muss aber ein Wert für `a` definiert werden, weil das Numpy-Array nunmal nur mit konkreten Zahlwerten arbeiten kann. Dann setze zum Testen halt irgendeinen Fantasie-Wert ein.

Und wenn du es später in eine Funktion einbindest - was du übrigens auch jetzt schon machen kannst - dann erwartet der Funktionsaufruf ja ohnehin einen konkreten Wert.
Antworten