Autor Tema: como hallar la variable 6 de 5 disponibles?  (Leído 3233 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado johenrod

  • PIC18
  • ****
  • Mensajes: 276
como hallar la variable 6 de 5 disponibles?
« 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
« Última modificación: 13 de Abril de 2020, 12:38:38 por johenrod »
Si algo parece complicado... es por que esta mal explicado.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:como hallar la variable 6 de 5 disponibles?
« Respuesta #1 en: 13 de Abril de 2020, 12:40:07 »
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:

Código: [Seleccionar]
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:
Código: [Seleccionar]
linear fit {15, 16.66},{17, 18.55}
Esto te da como resultado:

Código: [Seleccionar]
0.945x + 2.485
Para el valor 16 seria:

Código: [Seleccionar]
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:

Código: [Seleccionar]
1.058*x - 2.629
Por ejemplo si tengo 17.605 esto quedaria:

Código: [Seleccionar]
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 )

Desconectado johenrod

  • PIC18
  • ****
  • Mensajes: 276
Re:como hallar la variable 6 de 5 disponibles?
« Respuesta #2 en: 13 de Abril de 2020, 15:28:45 »
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:

Código: [Seleccionar]
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...
« Última modificación: 13 de Abril de 2020, 15:31:33 por johenrod »
Si algo parece complicado... es por que esta mal explicado.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:como hallar la variable 6 de 5 disponibles?
« Respuesta #3 en: 13 de Abril de 2020, 16:16:08 »
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.
« Última modificación: 14 de Abril de 2020, 04:50:22 por Picuino »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:como hallar la variable 6 de 5 disponibles?
« Respuesta #4 en: 13 de Abril de 2020, 16:34:01 »
Es una funcion lineal.

Código: [Seleccionar]
y = ax+b
Primero definimos los dos puntos...

Código: [Seleccionar]
x1,y1  ->  15,16.66
x2,y2  ->  17,18.55

La pendiente (a) que es la que acompaña la x, esta dada por: 

Código: [Seleccionar]
a =(y2-y1)/(x2-x1)
a = (18.55-16.66)/(17-15)  = 0.945

Teniendo la pendiente podemos calcular b.

Código: [Seleccionar]
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.

Desconectado johenrod

  • PIC18
  • ****
  • Mensajes: 276
Re:como hallar la variable 6 de 5 disponibles?
« Respuesta #5 en: 13 de Abril de 2020, 19:53:22 »
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 ...
Si algo parece complicado... es por que esta mal explicado.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:como hallar la variable 6 de 5 disponibles?
« Respuesta #6 en: 14 de Abril de 2020, 04:49:25 »
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.