- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
给定一些 f 和微分方程 x'(t) = f(x (t)),我如何计算 x(n)(t ) x(t)?
例如,给定 f(x(t)) = sin(x( t)),我想获得 x(3)(t) = (cos(x(t))2 − sin(x(t))2) sin(x (t)).
到目前为止我已经尝试过
>>> from sympy import diff, sin
>>> from sympy.abc import x, t
>>> diff(sin(x(t)), t, 2)
这给了我
-sin(x(t))*Derivative(x(t), t)**2 + cos(x(t))*Derivative(x(t), t, t)
但我不确定如何告诉 SymPy Derivative(x(t), t)
是什么,并让它弄清楚 Derivative(x(t), t, t)
等。
根据下面收到的答案,这是我的最终解决方案:
def diff(x_derivs_known, t, k, simplify=False):
try: n = len(x_derivs_known)
except TypeError: n = None
if n is None:
result = sympy.diff(x_derivs_known, t, k)
if simplify: result = result.simplify()
elif k < n:
result = x_derivs_known[k]
else:
i = n - 1
result = x_derivs_known[i]
while i < k:
result = result.diff(t)
j = len(x_derivs_known)
x0 = None
while j > 1:
j -= 1
result = result.subs(sympy.Derivative(x_derivs_known[0], t, j), x_derivs_known[j])
i += 1
if simplify: result = result.simplify()
return result
例子:
>>> diff((x(t), sympy.sin(x(t))), t, 3, True)
sin(x(t))*cos(2*x(t))
最佳答案
这是一种返回所有导数列表的方法,最多 n
阶
import sympy as sp
x = sp.Function('x')
t = sp.symbols('t')
f = lambda x: x**2 #sp.exp, sp.sin
n = 4 #3, 4, 5
deriv_list = [x(t), f(x(t))] # list of derivatives [x(t), x'(t), x''(t),...]
for i in range(1,n):
df_i = deriv_list[-1].diff(t).replace(sp.Derivative,lambda *args: f(x(t)))
deriv_list.append(df_i)
print(deriv_list)
[x(t), x(t)**2, 2*x(t)**3, 6*x(t)**4, 24*x(t)**5]
使用 f=sp.sin
它返回
[x(t), sin(x(t)), sin(x(t))*cos(x(t)), -sin(x(t))**3 + sin(x(t))*cos(x(t))**2, -5*sin(x(t))**3*cos(x(t)) + sin(x(t))*cos(x(t))**3]
编辑:计算n
次导数的递归函数:
def der_xt(f, n):
if n==1:
return f(x(t))
else:
return der_xt(f,n-1).diff(t).replace(sp.Derivative,lambda *args: f(x(t)))
print(der_xt(sp.sin,3))
-sin(x(t))**3 + sin(x(t))*cos(x(t))**2
关于python - 如何使用 SymPy 找到给定一阶导数的 n 阶导数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40324336/
我有一个随时间变化的数据流。如何使用 C# 确定变化率? 自从上微积分课已经很长时间了,但现在是我第一次真正需要它(15 年来)。现在,当我搜索“衍生品”这个词时,我会得到金融方面的东西,以及我认为并
假设我有以下数据和命令: clc;clear; t = [0:0.1:1]; t_new = [0:0.01:1]; y = [1,2,1,3,2,2,4,5,6,1,0]; p = interp1(
假设我有以下数据和命令: clc;clear; t = [0:0.1:1]; t_new = [0:0.01:1]; y = [1,2,1,3,2,2,4,5,6,1,0]; p = interp1(
我曾经使用这个公式来计算每秒记录的信号的导数,然后对其应用滚动平均值。 df.rolling(rollingWindow, center=True).mean().diff(rollingWindow
通过这里的一些帮助,我想出了一个函数,它似乎将索贝尔导数应用于 X 方向的图像 F(x,y) = F(x+1,y) - F( x,y)我无法使用任何 OpenCV 函数,并且我需要 2D 输出数组比
对于神经网络库,我实现了一些激活函数和损失函数及其衍生物。它们可以任意组合,输出层的导数只是损失导数和激活导数的乘积。 但是,我未能独立于任何损失函数实现 Softmax 激活函数的导数。由于归一化,
我要在使用 ReLU 的神经网络上进行反向传播。 在我之前的一个项目中,我在一个使用 Sigmoid 激活函数的网络上做了,但现在我有点困惑,因为 ReLU 没有导数。 这是一个 image关于 we
我的任务是制作自己的 Sobel 方法,而不是使用 OpenCV 中的 cv::Sobel。我尝试实现我在 Programming techniques 找到的一个 但是,当我运行该程序时,cv::M
我愿意计算一个不完全明确的函数的 Frechet/Gateaux 导数,我的问题是:最有效的方法是什么?您会推荐我使用哪种语言? 准确地说,我的问题是我有一个函数,比如 F,它是多维函数对(即从 R^
我想使用 Flux.jl 绘制函数及其梯度和 Plots.jl using Flux.Tracker using Plots f(x::Float64) = 3x^2 + 2x + 1 df(x::F
我已将 ReLu 导数实现为: def relu_derivative(x): return (x>0)*np.ones(x.shape) 我也尝试过: def relu_derivativ
我几乎没有关于 Scharr 导数及其 OpenCV 实现的问题。 我对具有 (3X3) 内核的二阶图像导数感兴趣。我从 Sobel 二阶导数开始,它未能在图像中找到一些细线。看完this page底
import numpy as np def relu(z): return np.maximum(0,z) def d_relu(z): z[z>0]=1 z[z 0).as
你好,我用 C++ 创建了一个小的运动模拟。我想向学生展示 Euler、Runge-Kutta 和 MidPoint 方法之间的差异,有些 Material 点在撞击球体时会移动和反弹。 但是当我切换
或者,目标:如何以声明方式从 Nix 不稳定中获取单个包? 我是 NixOS 的新手,目前正在尝试安装比默认版本更新的 Consul 0.5.2我的 NixOS 版本(最新稳定版)。我正在尝试通过覆盖
我已经为此苦苦挣扎了很长一段时间。我想要的只是一个 torch.diff() 函数。然而,许多矩阵运算似乎并不容易与张量运算兼容。 我已经尝试了大量不同的 pytorch 操作组合,但它们都不起作用。
我试图了解如何在 Swift 中创建 Vector,因为当我执行 CGVectorMake() 时,它告诉我将 dx 和 dy(导数)作为 CGFloat 传递。如何创建仅包含该信息的向量(线)? 谁
我希望你能帮助我。 我正在使用 QT 并尝试对图像的边缘进行简单检测。但是当我启动时我的程序崩溃了 cv::GaussianBlur( src, src, cv::Size(3,3), 0, 0, c
我正在计算信号的一阶和二阶导数,然后进行绘图。我选择了在 SciPy(信号模块)中实现的 Savitzky-Golay 滤波器。我想知道是否需要缩放输出 - 在同一过滤器的 Matlab 实现中,指定
我是一名优秀的程序员,十分优秀!