Thank you very much for your reply. I was able to get it working by using QTimers to call the functions that evaluate the ODE as you suggested.
Cheers, Mike On Thursday, March 28, 2019 at 11:48:03 AM UTC-6, Michael DeFeo wrote: > > I am trying to write a program that will solve a differential equation for > several values of one of the equations parameters in a for loop. After each > iteration of the loop I would like to plot the mean value of the solution. > What happens in practice is the the plot will only be generated after > exiting the for loop. A minimal working example demonstrating this issue is > pasted below and attached. Any advice on how to get this working is > appreciated. > > Cheers! > > > > # gui > import pyqtgraph as pg > from pyqtgraph.Qt import QtCore, QtGui > import numpy as np > > # ODE > from scipy.integrate import RK45 > > win = pg.GraphicsWindow() > p1 = win.addPlot() > data = np.empty([100000,2]) # Holds time dep. solution > > g = 0.5 > cntr = 0 > > def EOM(t,y): > global g > return -g*y > > def update(): > p1.plot(tcData[:cntr,:]) > > timer = QtCore.QTimer() > timer.timeout.connect(update) > timer.start(0) > > tC = np.linspace(-0.5,0.5,20) # Sweep parameter > tcData = np.empty([len(tC),2]) # Holds mean solution (plot this data) > for idx,item in enumerate(tC): > ode = RK45(EOM, 0, [5],t_bound=10,max_step=0.001) > cntr = 0 > g = item > while ode.status == 'running': > ode.step() > data[cntr,0] = ode.t > data[cntr,1] = ode.y > cntr+=1 > tcData[idx,0] = item > tcData[idx,1] = np.mean(data[:,1]) > print( idx ) > > > if __name__ == '__main__': > import sys > if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'): > QtGui.QApplication.instance().exec_() > > -- You received this message because you are subscribed to the Google Groups "pyqtgraph" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/pyqtgraph/c8d0d6f9-ca7a-4fa1-9dd2-3c91cdcaf83d%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
