2017-01-30 4 views
1

Guten Tag,Nehmen Sie das Sigma eines faktoriellen mit unbekannten Variablen

Ich versuche, eine Funktion für die folgende Gleichung zu schreiben (mit sympy?):

Eurlang B

Wo B und N gegeben und ich löse für A.

Ich habe gelesen und es schien wie sympy war der Weg zu gehen, also begann ich, die bekannten Variablen zu deklarieren, aber wenn es um die Sigma-Notation mit der Fakultät kam, hatte ich keine Idee, wie man sich nähert, da A ist ein Unbekannter. Hier

ist, was ich kam mit:

from sympy import Eq, var, solve 
from math import * 

A = var('A') 
channels = raw_input("Enter the number of channels: ") 
#GOS = raw_input("Enter GOS: ") 

Sigma = A 
for i in range(0,channels+1): 
    Sigma += (A**i/factorial(i)) 

# equation = Eq((A**channels/factorial(channels))/Sigma) 
# print solve(equation) 

das gibt mir den Fehler TypeError: cannot concatenate 'str' and 'int' objects

Das macht Sinn für mich, aber mein Mangel an Wissen mit sympy macht mich nicht in der Lage, herauszufinden, wie man repariere es.

EDIT: Auf der Suche um ein bisschen mehr, herausgegeben ich meinen Code dazu:

from sympy import * 

    A = symbols('A') 
    channels = raw_input("Enter the number of channels: ") 
    GOS = raw_input("Enter GOS: ") 

    Sigma = summation(A**i/factorial(i), (i, 0,channels)) 
    print Sigma 



    # equation = Eq((A**channels/factorial(channels))/Sigma) 

Jetzt bekomme ich NameError: name 'i' is not defined

Vielen Dank im Voraus.

Antwort

1

Zuerst ist der Fehler (Name 'ich' nicht definiert), weil Sie es nicht definiert haben. Sie müssen also einen Anfangswert für i angeben.

zweitens habe ich versucht, Ihr Programm laufen zu lassen. bekam eine fehlerfreie Lösung mit diesem Code:

from sympy import * 

A = symbols('A') 
channels = raw_input("Enter the number of channels: ") 
GOS = raw_input("Enter GOS: ") 

# note that I convert the string 'channel' to an int 
# convert to float if channel could also be a floating number 
channels = int(channels) 
Sigma = A 
for i in range(0,channels+1): 
    Sigma += (A**i/factorial(i)) 
print Sigma 

Das Ergebnis

Eingänge: Kanäle = 3 = GOS 1

Ausgang: A**3/6 + A**2/2 + 2*A + 1

EDIT: Aus Interesse Ich begann Ich untersuche Ihr Problem weiter (auch weil ich feststellen könnte, dass diese Frage nicht nur bei einem Datatype-Problem aufhört). Die Solve-Funktion hat 2 Eingänge, die Gleichung und das Symbol zu berechnen. löst es die Gleichung == 0. Also muss die Variable B von der Gleichung subtrahiert werden. (Sollte ich der Eingang GOS ist der B-Variable in der Funktion)

equation = (A**channels/factorial(channels))/Sigma 
print(solve(equation-int(GOS), A)) 

den Code mit den Linien laufen oben (füge sie unter dem Code) gab diese Ausgänge:

A**3/6 + A**2/2 + 2*A + 1 
[-2 - sqrt(2), -2 + sqrt(2)] 

Ich muß feststellen, dass wenn das GOS die Funktion nicht schneidet, gibt es große Ergebnisse mit zusätzlichem Parameter I (Großbuchstabe i, könnte imaginäres i anzeigen). Ich hoffte, dass dies geholfen hat, Ihr Problem zu lösen.

+0

Dies ist genau das, was ich gesucht habe. Und danke für deine Annahme in der Bearbeitung. Ich erinnere mich, dass ich gelesen habe, dass die Lösung es gleich 0 setzt, also hätte ich wahrscheinlich meinen Kopf gegen die Wand geschlagen, ohne zu wissen, warum die Antwort nicht korrekt ist. Ich habe alle komplexen und negativen Lösungen herausgefiltert und es scheint perfekt zu funktionieren. Danke noch einmal –

0

Sie können auch die Summierung in SymPy führen

die summation Funktion
i = symbols('i') 
summation(A**i/factorial(i), (i, 0, N) 

Noch ein Hinweis: Sie mit Sigma = A Start sind, ist Ihr Endergebnis bedeutet A + ΣA^i/i! statt nur ΣA^i/i! (man kann in der Ausgabe sehen aus @ Petrus1904 Antwort gibt es eine 2*A anstelle von A). Wenn Sie eine Schleife verwenden möchten, um eine Summierung zu berechnen, sollten Sie die Variable auf 0 initialisieren.

Verwandte Themen