2016-05-06 1 views
0

enter image description hereAnimation der Funktion

Versuchen, dieses Problem für meine Python-Klasse zu lösen. Er gab uns einen Beispielcode von einem ähnlichen Problem, aber wenn ich die neue Gleichung eintrage, kann ich es nicht zum Laufen bringen. Irgendwelche Hilfe bei was falsch ist?

%matplotlib notebook 
import numpy as np 
import matplotlib.pyplot as plt 

def plot_fun(ax,x,t): 
    ax.cla() 
    ax.plot(x,y,lw=2) 
    ax.set_xlim([-1,1]), ax.set_ylim([-1,1]) 
    ax.set_xlabel('x'), ax.set_ylabel('f(x,t)') 

# Prepare the figure container and axes 
fig = plt.figure() 
ax = plt.axes() 

# Prepare the 1D Domain: x from -1 to 1. 
x = np.linspace(-1, 1, 101) 

# Plot the function at t=0 
t = 0 
y = (1/(1+16(x-t)**2)) 
plot_fun(ax,x,t) 
plt.show() 

# Animation function 
tfin = 1 
k = 0.1 
while t < tfin: 
    t = t + k 
    y = (1/(1+16(x-t)**2)) 
    plot_fun(ax,x,t) 
    plt.draw() 
    fig.canvas.draw() 

Antwort

0

An zwei Stellen

ändern
y = (1/(1+16(x-t)**2)) 

zu

y = (1/(1+16*(x-t)**2)) 

Beachten Sie die Fehlermeldung:

TypeError: 'int' object is not callable 

, die darauf hinweist, dass ein int wie eine abrufbar behandelt wurde eine Funktion). Python sieht 16(x-t) und denkt, dass das int-Objekt 16 aufgerufen wird (weil ein Objekt, gefolgt von Klammern, angibt, dass das Objekt aufgerufen wird).

beachten Sie auch die Linie, auf der die Typeerror ausgelöst wird:

File "/home/unutbu/pybin/script.py", line 31, in <module> 
    y = (1/(1+16(x-t)**2)) 

Dies ist ein großer Hinweis, wo für eine ganze Zahl von Klammern zu suchen.


Beachten Sie auch, dass der Code ruft plot_fun(ax,x,t) und noch plot_fun verwendet y, nicht t. Das sieht aus wie ein logischer Fehler ...


By the way, kommt matplotlib mit einem animation module das Animieren von Plots ein wenig leichter machen.

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.animation as animation 

fig, ax = plt.subplots() 

x = np.linspace(-1, 1, 101) 
t = 0 
y = (1/(1+16*(x-t)**2)) 
line, = ax.plot(x, y, lw=2) 
ax.set_xlabel('x'), ax.set_ylabel('f(x,t)') 
tfin = 1 
k = 0.1 
ts = np.arange(0, tfin, k) 

def animate(i): 
    t = ts[i] 
    y = (1/(1+16*(x-t)**2)) 
    line.set_data(x, y) 

ani = animation.FuncAnimation(
    fig, animate, interval=100, frames=len(ts), repeat=True) 
plt.show()