Julia 旋转和力矩曲线
Julia rotation and torque curve
我知道我想怎么做,但不知道如何在 Julia 中实现。
所以我有电机 torque/rotation 曲线图。我可以将数据收集到数组中,比如
torque[0,10,12,15,10,0]
rotation[0,1000,2000,3000,4000,5000,6000]
也许这可以做得更好,但想法是当旋转为 1000 时输出为 10,当旋转为 2000 时输出为 12。或其他方式。就像如果我想要 12Nm,输出是 2000。
这很容易做。但是如果我想要 9Nm 或 13Nm 呢?我可以创建函数来计算两个值之间的线,但我认为这是常见问题,所以可能有针对此类情况的内置函数。那么有吗?
如果你的意思是曲线拟合,你可以使用 CurveFit 包,方法如下:
a,b = linear_fit(rotation,torque)
方法,其中 returns a 和 b 使得
torque = a + b * rotation
如果它不是线性的,你可以使用 poly_fit、power_fit 或任何描述你的数据的函数,但我记得扭矩与旋转平方有关,所以 poly_fit 或 power_fit应该是你需要的
要在点之间进行线性插值,您可以使用
Dierckx,
Interpolations 或
ApproXD 包。
using Dierckx
torque = [0,10.,12,15,12,10,0]
rotation = [0,1000.,2000,3000,4000,5000,6000]
# k=1 corresponds to linear interpolation
f = Spline1D(rotation, torque, k=1)
using PyPlot
xs = linspace(0,6000,100)
plot( xs, [f(x) for x in xs] )
如果你想在另一个方向插值,从扭矩到旋转,
这更有问题,因为有了这些数字,
该功能没有明确定义。
例如,10
对应于 1000
和 5000
。
您可以使用 fzeros
找到 一个 值。
using Roots
function g(y)
# Only consider values between 0 and 3000
fzero( x -> f(x) - y, 0., 3000.)
end
ys = 0:15
ys = linspace(0,15,100)
plot( ys, [g(y) for y in ys] )
我知道我想怎么做,但不知道如何在 Julia 中实现。 所以我有电机 torque/rotation 曲线图。我可以将数据收集到数组中,比如
torque[0,10,12,15,10,0]
rotation[0,1000,2000,3000,4000,5000,6000]
也许这可以做得更好,但想法是当旋转为 1000 时输出为 10,当旋转为 2000 时输出为 12。或其他方式。就像如果我想要 12Nm,输出是 2000。 这很容易做。但是如果我想要 9Nm 或 13Nm 呢?我可以创建函数来计算两个值之间的线,但我认为这是常见问题,所以可能有针对此类情况的内置函数。那么有吗?
如果你的意思是曲线拟合,你可以使用 CurveFit 包,方法如下:
a,b = linear_fit(rotation,torque)
方法,其中 returns a 和 b 使得
torque = a + b * rotation
如果它不是线性的,你可以使用 poly_fit、power_fit 或任何描述你的数据的函数,但我记得扭矩与旋转平方有关,所以 poly_fit 或 power_fit应该是你需要的
要在点之间进行线性插值,您可以使用 Dierckx, Interpolations 或 ApproXD 包。
using Dierckx
torque = [0,10.,12,15,12,10,0]
rotation = [0,1000.,2000,3000,4000,5000,6000]
# k=1 corresponds to linear interpolation
f = Spline1D(rotation, torque, k=1)
using PyPlot
xs = linspace(0,6000,100)
plot( xs, [f(x) for x in xs] )
如果你想在另一个方向插值,从扭矩到旋转,
这更有问题,因为有了这些数字,
该功能没有明确定义。
例如,10
对应于 1000
和 5000
。
您可以使用 fzeros
找到 一个 值。
using Roots
function g(y)
# Only consider values between 0 and 3000
fzero( x -> f(x) - y, 0., 3000.)
end
ys = 0:15
ys = linspace(0,15,100)
plot( ys, [g(y) for y in ys] )