2016-08-17 75 views
1

我知道这个想法是如何做到的,但不知道如何在朱莉娅做这件事。 所以我有马达扭矩/旋转曲线图。我可以收集数据阵列,像朱莉娅旋转和扭矩曲线

torque[0,10,12,15,10,0] 
rotation[0,1000,2000,3000,4000,5000,6000] 

也许这是可以做的更好,但这个想法是当转速为1000的输出为10,当转速为2000的输出为12或者其他方式。就像我想要12Nm的输出是2000. 这很容易做到。但是如果我想要9Nm或13Nm,那又怎么样?我可以使函数来计算两个值之间的界限,但我认为这是常见问题,所以也许在这种情况下有函数构建。那么在那里?

+0

添加代码示例以向我们展示您一直在尝试的内容(以及您想要实现的内容)将是非常好的。 –

回答

3

如果你的意思是曲线拟合可以使用CurveFit包,用类似的方法:

a,b = linear_fit(rotation,torque) 

方法,它返回a和b,使

torque = a + b * rotation 

如果它不是线性的你可以使用poly_fit,power_fit或描述您数据的任何函数,但正如我记得扭矩与旋转平方相关,所以poly_fit或power_fit应该是您所需要的。

1

要在点之间线性插值,可以使用 Dierckx, InterpolationsApproXD包。

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对应于10005000。 您可以使用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])