Ошибка применения специальных функций Sympy с numpy ⇐ Python
-
Гость
Ошибка применения специальных функций Sympy с numpy
Я пытаюсь создать график с численными решениями магнитного поля. Объект представляет собой соленоид.
импортировать numpy как np импортировать Sympy как SMP из scipy.integrate импорт quad_vec t, x, y, z = smp.symbols("t x y z") l = smp.Matrix([0,5 * smp.cos(t), 0,5 * smp.sin(t), (t / (600 * smp.pi)) * smp.Heaviside(t - 1) * smp.Heaviside(t)]) r = smp.Matrix([x, y, z]) сентябрь = р-л подынтегр = smp.diff(l, t).cross(sep) / sep.norm()**3 dBxdt = smp.lambdify([t, x, y, z], подынтегральное выражение[0]) dBydt = smp.lambdify([t, x, y, z], подынтегральное выражение[1]) dBzdt = smp.lambdify([t, x, y, z], подынтегральное выражение[2]) Защиту B(x, y, z): return np.array([quad_vec(dBxdt, 0, 2*np.pi, args=(x, y, z))[0], quad_vec(dBydt, 0, 2*np.pi, args=(x, y, z))[0], quad_vec(dBzdt, 0, 2*np.pi, args=(x, y, z))[0]]) х = np.linspace(-2, 2, 20) xv, yv, zv = np.meshgrid(x, x, x) B_поле = B(xv, yv, zv) Bx, By, Bz = B_поле Файл :2, в _lambdifygenerated(t, x, y, z) 1 def _lambdifygenerated(t, x, y, z): ----> 2 return (-(y - 0,5*sin(t))*((1/600)*t*DiracDelta(t)*select([less(t, 1),equal(t, 1) ,True], [0,1/2,1], default=nan)/pi + (1/600)*t*DiracDelta(t - 1)*select([less(t, 0),equal(t, 0),True], [0,1/2,1], default=nan)/pi + (1/600)*select([less(t, 0),equal(t, 0),True], [ 0,1/2,1], default=nan)*select([less(t, 1),equal(t, 1),True], [0,1/2,1], default=nan)/pi ) + 0,5*(-1/600*t*select([меньше(t, 0),равно(t, 0),True], [0,1/2,1], default=nan)*select([ меньше (t, 1), равно (t, 1), True], [0,1/2,1], по умолчанию = nan)/pi + z)*cos(t))/(abs(x - 0,5*) cos(t))**2 + abs(y - 0,5*sin(t))**2 + abs((1/600)*t*select([less(t, 0),equal(t, 0) ,True], [0,1/2,1], default=nan)*select([less(t, 1),equal(t, 1),True], [0,1/2,1], default =нан)/пи - z)**2)**(3/2) NameError: имя «DiracDelta» не определено
Я пытаюсь создать график с численными решениями магнитного поля. Объект представляет собой соленоид.
импортировать numpy как np импортировать Sympy как SMP из scipy.integrate импорт quad_vec t, x, y, z = smp.symbols("t x y z") l = smp.Matrix([0,5 * smp.cos(t), 0,5 * smp.sin(t), (t / (600 * smp.pi)) * smp.Heaviside(t - 1) * smp.Heaviside(t)]) r = smp.Matrix([x, y, z]) сентябрь = р-л подынтегр = smp.diff(l, t).cross(sep) / sep.norm()**3 dBxdt = smp.lambdify([t, x, y, z], подынтегральное выражение[0]) dBydt = smp.lambdify([t, x, y, z], подынтегральное выражение[1]) dBzdt = smp.lambdify([t, x, y, z], подынтегральное выражение[2]) Защиту B(x, y, z): return np.array([quad_vec(dBxdt, 0, 2*np.pi, args=(x, y, z))[0], quad_vec(dBydt, 0, 2*np.pi, args=(x, y, z))[0], quad_vec(dBzdt, 0, 2*np.pi, args=(x, y, z))[0]]) х = np.linspace(-2, 2, 20) xv, yv, zv = np.meshgrid(x, x, x) B_поле = B(xv, yv, zv) Bx, By, Bz = B_поле Файл :2, в _lambdifygenerated(t, x, y, z) 1 def _lambdifygenerated(t, x, y, z): ----> 2 return (-(y - 0,5*sin(t))*((1/600)*t*DiracDelta(t)*select([less(t, 1),equal(t, 1) ,True], [0,1/2,1], default=nan)/pi + (1/600)*t*DiracDelta(t - 1)*select([less(t, 0),equal(t, 0),True], [0,1/2,1], default=nan)/pi + (1/600)*select([less(t, 0),equal(t, 0),True], [ 0,1/2,1], default=nan)*select([less(t, 1),equal(t, 1),True], [0,1/2,1], default=nan)/pi ) + 0,5*(-1/600*t*select([меньше(t, 0),равно(t, 0),True], [0,1/2,1], default=nan)*select([ меньше (t, 1), равно (t, 1), True], [0,1/2,1], по умолчанию = nan)/pi + z)*cos(t))/(abs(x - 0,5*) cos(t))**2 + abs(y - 0,5*sin(t))**2 + abs((1/600)*t*select([less(t, 0),equal(t, 0) ,True], [0,1/2,1], default=nan)*select([less(t, 1),equal(t, 1),True], [0,1/2,1], default =нан)/пи - z)**2)**(3/2) NameError: имя «DiracDelta» не определено