TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: johenrod en 13 de Abril de 2020, 12:03:06
-
Cordial saludo, requiero una formula para hallar el dato intermedio de una medida..
Agradezco la ayuda, si fueran 4 datos haría una regla de tres pero acá no se como implementarla.
( la función map podría hacer esto pero en este caso necesito decimales y map en arduino no los da, (no se si en CCS si) ademas requiero la formula para saber el por que de las cosas)
DATO MEDIDA
15 = 16.66
17 = 18.55
cuando el dato sea 16 que medida sera
16 = ?
también debo hallar la contraria
DATO MEDIDA
15 = 16.66
17 = 18.55
cuando la medida sea 17.3 que dato sera
? = 17.3
-
Y obviamente depende de que estemos hablando, con dos puntos no podes de que se trata (Como crece una funcion, etc). Asi ue depende enormemente de eso.
Si es lineal entonces es simple, si son dos seguidos:
f(16) = (16.66 + 18.55 ) / 2 = 17.605
Ahora si buscas algo mas general... entonces lo mejor es plantearse una regresión lineal, podes usar esto para cargar tus puntos (asi no calculas a mano):
https://www.wolframalpha.com/
Y usar:
linear fit {15, 16.66},{17, 18.55}
Esto te da como resultado:
0.945x + 2.485
Para el valor 16 seria:
f(16) = 0.945*16 + 2.485 = 17.605
Pero podrías tranquilamente usarlo para cualquiera, ademas podes presentar la inversa de la función para tu segunda pregunta:
1.058*x - 2.629
Por ejemplo si tengo 17.605 esto quedaria:
1.058*17.605 - 2.629 = 16.034
Que obviamente si el indice ES entero, solo te vas a preocupar por que este cerca del entero ( 16 )
-
Y obviamente depende de que estemos hablando, con dos puntos no podes de que se trata (Como crece una funcion, etc). Asi ue depende enormemente de eso.
Si es lineal entonces es simple, si son dos seguidos:
f(16) = (16.66 + 18.55 ) / 2 = 17.605
Ahora si buscas algo mas general... entonces lo mejor es plantearse una regresión lineal, podes usar esto para cargar tus puntos (asi no calculas a mano):
cordial saludo, te estoy muy agradecido, estaba varado por esta formula hace 2 días.
Si no fuera por la herramienta que me compartiste aquí estaría aun y sin pelo.
Lo que pasa es que mi medida no es lineal (Pot) ni tiene relación con la salida y la tuve que repartir en varias escalas.
Mas adelante me gustaría investigar como sacan la formula porque donde se caiga o quiten la pagina quedamos graves.
Saludos...
-
La fórmula que buscas se llama interpolación lineal.
https://es.wikipedia.org/wiki/Interpolaci%C3%B3n_lineal
Empiezas por asignar los datos a las x y las medidas a las y
x1 = 15
x2 = 17
y1 = 16.66
y2 = 18.55
La fórmula, con números en coma flotante, sería:
y = y1 + (x-x1)*(y2-y1)/(x2-x1)
Para x = 16
y = 16.66 + (16-15)*(18.55-16.66)/(17-15) = 17.605
Un saludo.
-
Es una funcion lineal.
y = ax+b
Primero definimos los dos puntos...
x1,y1 -> 15,16.66
x2,y2 -> 17,18.55
La pendiente (a) que es la que acompaña la x, esta dada por:
a =(y2-y1)/(x2-x1)
a = (18.55-16.66)/(17-15) = 0.945
Teniendo la pendiente podemos calcular b.
b = y2 - a*x2 o b = y1 - a*x1
b = 18.55 - 0.945*17 = 2.485
Y ya tenes tu funcion lineal
----------------------------------------
y = 16.66 + 16*(18.55-16.66)/(17-15)
Picuino, ahi no te estaria dando el resultado correcto.. La pendiente esta correcta, pero la ordenada al origen no, ya que para 17, te estaria dando un valor de 32.725 y es incorrecto.
-
Uff... que tesos son ustedes para esto, están solos. ((:-))
Ya estoy terminando porque son 10 escalas y como necesitaba los decimales no pude hacerlo con "map"
guardare esta formula como tesoro,, gracias mil ...
-
Picuino, ahi no te estaria dando el resultado correcto.. La pendiente esta correcta, pero la ordenada al origen no, ya que para 17, te estaria dando un valor de 32.725 y es incorrecto.
Gracias, ya lo he corregido.