2017-05-31 1 views
-6

Ich bin ein Anfänger bei Python. Ich habe den folgenden Code, der nichts zurückgibt.Thomas Algorithmus Python

Hat jemand eine Antwort, warum? Wenn ich den Code ausführe, passiert buchstäblich nichts.

Suche nach der Größe der Matrix und bestimmen n

def thomas(a,b,c,d): 

    a= [1,3,1.5,4.5,4.5] 
    b= [-6,-4.5,-7.5,-7.5,-4.5] 
    c= [3,3,3,3,3] 
    d= [0,0,100,0,0] 

    n = len(b) 
    #print n # Used for debugging 
    # Test the size of a and c 
    if len(a) != n-1: 
     print ('Wrong index size for a.\n A should have an index of'), n-1, '\n 
    Your a has ', len(a) 
    exit() 
    if len(c) != n-1: 
     print ('Wrong index size for c.\n C should have an index of'), n-1, '\n 
    Your c has', len(c) 
    exit() 

# Converting to float and appending 0.0 to c 
    for i in range(0,len(a)): 
     a[i] = float(a[i]) 
    for i in range(0,len(b)): 
     b[i] = float(b[i]) 
    for i in range(0,len(c)): 
     c[i] = float(c[i]) 
    for i in range(0,len(d)): 
     d[i] = float(d[i]) 
c.append(0.0) # Hack to make the function to work 

# Calculate p and q 
    p = []; q= [] 
    p.append(c[0]/b[0]); q.append(d[0]/b[0]) 
    for j in range(1,n): 
     pj = c[j]/(b[j] - a[j-1]* p[j-1]) 
     qj = (d[j] - a[j-1]*q[j-1])/(b[j] - a[j-1]* p[j-1]) 
     p.append(pj); q.append(qj) 
#print p,q # Used for debugging the code! 

# Back sub 
    x = []; x.append(q[n-1]) 
    for j in range(n-2,-1,-1): 
     xj = q[j] - p[j]*x[0] # Value holder 
     x.insert(0,xj) # Building the list backwards 

# Return the value 
    return x  
+0

Willkommen bei StackOverflow. Bitte lesen und befolgen Sie die Buchungsrichtlinien in der Hilfe. [Minimales, vollständiges, überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) gilt hier. Wir können Ihnen nicht effektiv helfen, bis Sie Ihren MCVE-Code veröffentlicht und das Problem genau beschrieben haben. Wir sollten in der Lage sein, Ihren gesendeten Code in eine Textdatei einzufügen und das beschriebene Problem zu reproduzieren. Vielleicht brauchen Sie nur ein einzeiliges Hauptprogramm, das dies aufruft, aber wir müssen uns sicher sein. – Prune

+0

Ihr 'exit'-Aufruf liegt außerhalb des 'if' und wird immer ausgeführt – Copperfield

+0

Thx für die Antwort, aber auch ohne den' exit' passiert noch nichts .... –

Antwort

1

Ihre Einbuchtungen screwy sind.

Auf den Zeilen 13 und 17 eine Kerbe in die exit Aussage so, dass seine nur die bedingten aufgerufen, wenn (if-Anweisung) erfüllt ist:

if len(a) != n-1: 
     print ('Wrong index size for a.\n A should have an index of') 
     exit() 
    if len(c) != n-1: 
     print ('Wrong index size for c.\n C should have an index of') 
     exit() 

Ebenso c.append(0.0) zu weit eine Lasche ausgerückt ist. Ziehen Sie diese Zeile ebenfalls ein.

Denken Sie daran, dass Python, im Gegensatz zu den meisten anderen Sprachen, seine Ausführungsstruktur auf Abstand basiert. Für etwas wie eine if-Anweisung gilt alles, was unter dieser Anweisung eingerückt ist, als if (something) { }.

if (something): 
     do this 
     and this 
but this will happen regardless 
Verwandte Themen