2016-08-17 11 views
1

Ich weiß von der Idee, wie ich es tun möchte, aber keine Ahnung, wie es in Julia zu tun. Also habe ich Diagramm der Motordrehmoment/Rotationskurve. Ich kann Daten auf Arrays sammeln, wieJulia Rotation und Drehmoment Kurve

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

Vielleicht kann dies besser gemacht werden, aber die Idee ist, wenn die Rotation 1000 ist die Ausgabe 10 ist und wenn die Drehung beträgt 2000 ist die Ausgabe 12 oder andere Art und Weise. Wie wenn ich 12Nm möchte, ist die Ausgabe 2000. Das ist einfach zu machen. Aber was ist wenn wenn ich 9Nm oder 13Nm will? Ich kann Funktion machen, um die Linie zwischen zwei Werten zu berechnen, aber ich dachte, dass dies ein allgemeines Problem ist, vielleicht gibt es eine eingebaute Funktion für solche Fälle. So ist es da?

+0

Es wäre großartig, ein Beispielcode hinzuzufügen, um uns genau zu zeigen, was Sie versucht haben (und was Sie erreichen möchten). –

Antwort

3

Wenn das, was Sie meinen, ist Kurvenanpassung Sie das CurveFit Paket, mit Methoden wie verwenden können:

a,b = linear_fit(rotation,torque) 

Methode, die so a und b gibt, dass

torque = a + b * rotation 

Wenn sind Sie nicht linear kann poly_fit, power_fit oder was auch immer Funktion beschreibt Ihre Daten verwenden, aber wie ich mich erinnere Drehmoment bezieht sich auf Rotation im Quadrat, so entweder poly_fit oder power_fit sollte sein, was Sie brauchen

1

Um zwischen den Punkten linear zu interpolieren, können Sie das , ApproXD Paket verwenden.

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]) 

Wenn Sie in der anderen Richtung zu interpolieren wollen, von Drehmoment auf der Drehung, , die problematischer ist, weil mit diesen Zahlen, die Funktion nicht gut definiert ist. Zum Beispiel entspricht 10 sowohl 1000 als auch 5000. Sie können fzeros verwenden, um einen Wert zu finden.

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])