def shape_generator(self, cls, der_order):
"""
verify the correct connection with visual feedback
"""
dz = pi.Domain((0, 1), step=.001)
dt = pi.Domain((0, 0), num=1)
nodes, funcs = pi.cure_interval(cls, dz.bounds, node_count=11)
pi.register_base("test", funcs, overwrite=True)
# approx_func = pi.Function(np.cos, domain=dz.bounds,
# derivative_handles=[lambda z: -np.sin(z), lambda z: -np.cos(z)])
approx_func = pi.Function(lambda z: np.sin(3*z), domain=dz.bounds,
derivative_handles=[lambda z: 3*np.cos(3*z), lambda z: -9*np.sin(3*z)])
weights = approx_func(nodes)
hull = pi.evaluate_approximation("test", np.atleast_2d(weights),
temp_domain=dt, spat_domain=dz, spat_order=der_order)
if show_plots:
# plot shapefunctions
c_map = pi.visualization.create_colormap(len(funcs))
pw = pg.plot(title="{}-Test".format(cls.__name__))
pw.addLegend()
pw.showGrid(x=True, y=True, alpha=0.5)
[pw.addItem(pg.PlotDataItem(np.array(dz),
weights[idx]*func.derive(der_order)(dz),
pen=pg.mkPen(color=c_map[idx]),
name="{}.{}".format(cls.__name__, idx)))
for idx, func in enumerate(funcs)]
# plot hull curve
pw.addItem(pg.PlotDataItem(np.array(hull.input_data[1]), hull.output_data[0, :],
pen=pg.mkPen(width=2), name="hull-curve"))
# plot original function
pw.addItem(pg.PlotDataItem(np.array(dz), approx_func.derive(der_order)(dz),
pen=pg.mkPen(color="m", width=2, style=pg.QtCore.Qt.DashLine), name="original"))
pg.QtCore.QCoreApplication.instance().exec_()
return np.sum(np.abs(hull.output_data[0, :] - approx_func.derive(der_order)(dz)))
评论列表
文章目录