MCPcopy Create free account
hub / github.com/plotly/plotly.py / rk4

Method rk4

plotly/figure_factory/_streamline.py:222–257  ·  view source on GitHub ↗
(x0, y0, f)

Source from the content-addressed store, hash-verified

220 yb_changes = []
221
222 def rk4(x0, y0, f):
223 ds = 0.01
224 stotal = 0
225 xi = x0
226 yi = y0
227 xb, yb = self.blank_pos(xi, yi)
228 xf_traj = []
229 yf_traj = []
230 while check(xi, yi):
231 xf_traj.append(xi)
232 yf_traj.append(yi)
233 try:
234 k1x, k1y = f(xi, yi)
235 k2x, k2y = f(xi + 0.5 * ds * k1x, yi + 0.5 * ds * k1y)
236 k3x, k3y = f(xi + 0.5 * ds * k2x, yi + 0.5 * ds * k2y)
237 k4x, k4y = f(xi + ds * k3x, yi + ds * k3y)
238 except IndexError:
239 break
240 xi += ds * (k1x + 2 * k2x + 2 * k3x + k4x) / 6.0
241 yi += ds * (k1y + 2 * k2y + 2 * k3y + k4y) / 6.0
242 if not check(xi, yi):
243 break
244 stotal += ds
245 new_xb, new_yb = self.blank_pos(xi, yi)
246 if new_xb != xb or new_yb != yb:
247 if self.blank[new_yb, new_xb] == 0:
248 self.blank[new_yb, new_xb] = 1
249 xb_changes.append(new_xb)
250 yb_changes.append(new_yb)
251 xb = new_xb
252 yb = new_yb
253 else:
254 break
255 if stotal > 2:
256 break
257 return stotal, xf_traj, yf_traj
258
259 sf, xf_traj, yf_traj = rk4(x0, y0, f)
260 sb, xb_traj, yb_traj = rk4(x0, y0, g)

Callers

nothing calls this directly

Calls 2

blank_posMethod · 0.95
fFunction · 0.50

Tested by

no test coverage detected