coordenada con diferencia máxima

Iniciado por indict, 26 Enero 2013, 18:10 PM

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

indict

Hola,
Como harías el siguiente programa,
supongamos que tenemos dos vectores x, e y. Y queremos encontrar la observación con diferencia mayor.

Es decir, encontrar el valor (x,y) que hace máxima la diferencia.
(x-x[i], y-y[i]), este valor es una coordenada que tiene la misma posición para x e y.

int valor(vector<int>&x, vector<int>&y, int N)

for(int i=0;i<N;i++){
for(int j=i-1;j>=0;j++){

if(x-x[i])>(x-x[j]){return i;}}}


leosansan

Cita de: indict en 26 Enero 2013, 18:10 PM
Hola,
Como harías el siguiente programa,
supongamos que tenemos dos vectores x, e y. Y queremos encontrar. la observación con diferencia mayor==>Ehhhhhhhhhhhhh ? ? ? ?

Es decir, encontrar el valor (x,y) que hace máxima la diferencia.
(x-x[i], y-y[i]), este valor es una coordenada que tiene la misma posición para x e y.

Un vector se puede multiplicar o dividir por un escalar (no cero en la división), pero a un vector no se le puede sumar o restar un escalar, que es lo que es una coordenada.
Vamos, que la operación
(x-x[i], y-y[i]) no es posible.
Así que aclara mejor el enunciado campeón. :rolleyes:
Saluditos!.

indict

El enunciado es:

Hacer la función cor_menos_uno(vector<double>x,vector<double>y);

Sabemos que la correlación entre x e y no es demasiado fuerte, y sabemos que en nuestras observaciones contenidas en
los vectores x,y hay una observación atípica. La función que debemos crear detectará cúal es la observación.
correlacion(x-x[i], y-y[i])∀ x∈{0,N-1},donde x-x[i] e y-y[i] son los vectores x e y sin la observación x[i],y[i]. De todas estas, queremos la más grande, es decir queremos saber cúal es la observación i tal que  correlacion(x-x[i], y-y[i])
sea la máxima. La función devuelve el subíndice i. double correlacion (vector <double>& x, vector <double>& y);

¡Gracias por el aporte! :)

leosansan

Cita de: indict en 27 Enero 2013, 18:17 PM
El enunciado es:

Hacer la función cor_menos_uno(vector<double>x,vector<double>y);

Sabemos que la correlación entre x e y no es demasiado fuerte, y sabemos que en nuestras observaciones contenidas en
los vectores x,y hay una observación atípica. La función que debemos crear detectará cúal es la observación.
correlacion(x-x[i], y-y[i])∀ x∈{0,N-1},donde x-x[i] e y-y[i] son los vectores x e y sin la observación x[i],y[i]. De todas estas, queremos la más grande, es decir queremos saber cúal es la observación i tal que  correlacion(x-x[i], y-y[i])
sea la máxima. La función devuelve el subíndice i. double correlacion (vector <double>& x, vector <double>& y);

¡Gracias por el aporte! :)
Por si tú no lo has entendido, se trata de construir un nuevo vector donde no esté la componente i, y eso para cada una de las componentes y cada uno de los vectores x e y.
Osea, primero construyes un vexto "xsin" igual al x sin la componente 0, y lo mismo para y. Y luego el "xsin" será el x sin la componete 1, y lo mismo para el y. Esto que te comento ya está resuelto en otro post.
Y lo de la correlación, ¿ aqué te refieres?. Porque para ser precisos es:
http://es.wikipedia.org/wiki/Correlaci%C3%B3n
Seguro que te refieres a otra cosa.
Saluditos!.


indict

si, me refería a ese concepto de correlación, pero eso es para ejemplificar mejor a que se aplica la función.

¡un saludo!

leosansan

#5
Cita de: indict en 27 Enero 2013, 20:46 PM
si, me refería a ese concepto de correlación, pero eso es para ejemplificar mejor a que se aplica la función.

Ahora que hemos aclarado que
Código (cpp) [Seleccionar]
x-x[i] no es una resta, sino el vector x sin la componente "i", el proceso sería construir en un bucle los vectores x e y sin la componente j, que irá siendo 0, 1,2 ....<size, de forma que cuando quites la coordenada j les apliques las fórmulas de correlación cada vez como te indico en el código
(te puedes ahorrar el std:: si estas usando using namespace std;):

Código (cpp) [Seleccionar]
std::vector<int>x0;//para no perder los vectores originales ...
 std::vector<int>y0;//... al quitar una coordenada
 x=x0;
 y=y0;
 int i,j;
//ahora sin la componente j
 for ( j=0;j<x.size();j++){
   x.erase (x.begin()+j);
   y.erase (y.begin()+j);
   std::cout << '\n';
   //para que lo veas sin la componente j
   for ( i=0;i<x.size();i++)
     std::cout << ' ' << x[i];
   std::cout << '\n';
   for ( i=0;i<y.size();i++)//para que lo veas sin la componente j
     std::cout << ' ' << y[i];
   std::cout << '\n';system ("pause");
   //aqui viene el estudio de la correlacion de x e y sin la componente j
   //y vas guardando en una variable ej. "menor" la menor diferencia de x e y
   //que sobreentiendo que es el coeficiente de correlación muestral de Pearson
   //y en otra variable ej. "menor_j" el índice correspondiente
   x=x0;//Aquí reinicio x e y con los valores originales y le quito la siguiente componente
   y=y0;
 }

Si hay alguna duda, no dudes en exponerla.
Saluditos!.