2016-08-17 5 views
1

Я знаю, как я хотел бы это сделать, но понятия не имею, как это сделать в Джулии. Итак, у меня есть график крутящего момента/вращения двигателя. Я могу собрать данные в массивы, какКривая вращения и крутятости Julia

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

Может быть, это можно сделать лучше, но идея состоит в том, когда вращение 1000 выход 10 и при вращении 2000 выход 12. Или другой способ. Например, если я хочу 12 Нм, выход - 2000. Это легко сделать. Но как насчет того, если я хочу 9Nm или 13Nm? Я могу сделать функцию для вычисления линии между двумя значениями, но я думал, что это обычная проблема, поэтому, возможно, для таких случаев существует функция построения. Так есть?

+0

Было бы здорово добавить образец кода, чтобы показать нам, что именно вы пытаетесь (и чего вы хотите достичь). –

ответ

3

Если то, что вы имеете в виду кривой установки вы можете использовать CurveFit пакет, с помощью методов, таких как:

a,b = linear_fit(rotation,torque) 

метод, который возвращает а и Ь, так что

torque = a + b * rotation 

Если его не линейна вас может использовать poly_fit, power_fit или любую функцию, описывающую ваши данные, но, как я помню, крутящий момент связан с квадратом вращения, так что либо poly_fit, либо power_fit должны быть то, что вам нужно

1

Чтобы интерполировать линейно между точками, вы можете использовать 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]) 

 Смежные вопросы

  • Нет связанных вопросов^_^