es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Forma correcta de calcular numéricamente una suma.

Estoy intentando calcular numéricamente una suma:

Σ(aᵢ * aⱼ / |rᵢ - rⱼ|)

Entiendo perfectamente que es una suma fácil, sin embargo, mi mente sigue dudando después de varios días si lo estoy haciendo correctamente.

Aquí está el esquema de un código en C++ que he escrito para calcularlo:

struct vecs{
    float x;
    float y;
    float z;
    float a;
};

struct vector_file{
    int id;
    vector<vecs> VAL;
};

vector<vector_file> VEC;

I[10][10]={}

double absolute_val(double xi, double yi, double zi, double xj, double yj, double zj){
    return(sqrt(pow(xi-xj,2)+pow(yi-yj,2)+pow(zi-zj,2)));
}

for (int i=0;i<vec.size();i++){ for="" (int="" j=""></vec.size();i++){><i;j++){ double="" integ="0;" for="" (int="" k=""></i;j++){><vec[i].val.size();k++){ for="" (int="" l=""></vec[i].val.size();k++){><vec[j].val.size();l++){
                integ+=vec[i].val[k].a*vec[j].val[l].a/absolute_val(vec[i].val[k].x,vec[i].val[k].y,vec[i].val[k].z,vec[j].val[l].x,vec[j].val[l].y, vec[j].val[l].z);
             }   
        }
    i[i][j]=integ;
    }
}

solo necesito los elementos fuera de la diagonal y no necesito la parte triangular superior de la matriz ya que es análoga a la parte triangular inferior. lo he comprobado varias veces, sin embargo, todavía sigo volviendo y preguntándome si lo he hecho correctamente.

muchas gracias de antemano por tomarse el tiempo para revisarlo. integ+=”VEC[i].VAL[k].a*VEC[j].VAL[l].a/absolute_val(VEC[i].VAL[k].x,VEC[i].VAL[k].y,VEC[i].VAL[k].z,VEC[j].VAL[l].x,VEC[j].VAL[l].y,” vec[j].val[l].z);=”” }=”” }=”” i[i][j]=”integ;” }=”” }=”” ="" solo="" necesito="" los="" elementos="" fuera="" de="" la="" diagonal="" y="" no="" necesito="" la="" parte="" triangular="" superior="" de="" la="" matriz="" ya="" que="" es="" análoga="" a="" la="" parte="" triangular="" inferior.="" lo="" he="" comprobado="" varias="" veces,="" sin="" embargo,="" todavía="" sigo="" volviendo="" y="" preguntándome="" si="" lo="" he="" hecho="" correctamente.="" muchas="" gracias="" de="" antemano="" por="" tomarse="" el="" tiempo="" para=""></vec[j].val.size();l++){
integ+=vec[i].val[k].a*vec[j].val[l].a/absolute_val(vec[i].val[k].x,vec[i].val[k].y,vec[i].val[k].z,vec[j].val[l].x,vec[j].val[l].y, vec[j].val[l].z);
}
}
i[i][j]=integ;
}
}

solo necesito los elementos fuera de la diagonal y no necesito la parte triangular superior de la matriz ya que es análoga a la parte triangular inferior. lo he comprobado varias veces, sin embargo, todavía sigo volviendo y preguntándome si lo he hecho correctamente.

muchas gracias de antemano por tomarse el tiempo para revisarlo.>

Tags:  ,

Answer

  1. Avatar for davy.ai

    Solución

    El código en C++ proporcionado parece estar calculando correctamente la suma representada por la fórmula dada. El código define dos estructuras: vecs y vector_file, y un vector de vector_files VEC. También define una matriz bidimensional I inicializada en 0.

    La función absolute_val calcula el valor absoluto de la distancia euclidiana entre dos puntos en el espacio, dadas sus coordenadas.

    Luego, el código realiza un ciclo anidado sobre los elementos de VEC, excluyendo los elementos de la diagonal (j < i). Para cada par de archivos de vector VEC[i] y VEC[j], calcula la suma/integral utilizando un ciclo doblemente anidado sobre los elementos de los respectivos vectores VAL, y actualiza el elemento correspondiente de la matriz I.

    En general, el código parece estar bien organizado e implementa correctamente la fórmula dada. Sin embargo, como es difícil verificar la corrección de los resultados sin acceso a los datos de entrada, podría valer la pena hacer algunas comprobaciones de integridad o comparar los resultados con otros métodos o software.

Comments are closed.