datei einlesen und daten verarbeiten
-
öhm was hilft den daran gar nicht
int i,j,x_2,y_2,z_2,r_2; double total_energie=0;; for(i=0;i<anzahl-1;++i){ for(j=i+1;j<anzahl;++j){ x_2=pow(coordinateslist[i].x - coordinateslist[j].x,2); y_2=pow(coordinateslist[i].y - coordinateslist[j].y,2); z_2=pow(coordinateslist[i].z - coordinateslist[j].z,2); r_2=x_2+y_2+z_2; total_energie+=3/pow(r_2,3) - 7/pow(r_2,6); } }
oder was genau ist denn bei der rechnung nun dein problem?...
-
geht auch nicht
mein problem:
ausgeführt sieht das so aus:
r fuer A: 0.000000,r fuer B: 0.000000
EVDW:-1.#IND
EtotVDW:-1.#IND
X:0
Y:0
Z:0
r:0
r fuer A: 0.000000,r fuer B: 0.000000
EVDW:-1.#IND
EtotVDW:-1.#IND
X:0
Y:0
Z:0
r:0das gibt er mir für mein bsp mit 25 atomen 42mal
wo ich aber bei 25 atomen 200 abstände bekommen müsste
dann fragt er mich nach dem r-cutoff für das 2-te atom?nochmal
das ziel ist es die x, y, z koordinaten in der gegebenen datei zu lesen
und anschliessen mit ihnen die abstände (r) zu berechenen (bei 25 sind das 200)
dann 200 mal die energie berechnen
und schliesslich die gesamte energie
vielleicht sind aber auch so viele denkfehler in dem programm das ich von vorne anfangen kann
keine ahnungso ein mist
-
also bei mir geht das
habs mal eben schnell umgeschrieben...
da ich vermute das du c und nicht c++ nimmst hab ichs in c gelassen#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> typedef struct {char key[6];char name[4];double x;double y;double z;}coordinates; int catFcoordChar(char *fcoordinates){ int anzcoords=0; int i,j; double x_2,y_2,z_2,r_2,energie,total_energie=0; char buffer [512]; char dummy[512]; FILE *inF; coordinates *coordinateslist; coordinateslist=(coordinates*)malloc(sizeof(coordinates)); if(!(inF=fopen(fcoordinates, "r")))return -1; while (fgets(buffer,sizeof(buffer),inF)){ if (strstr(buffer,"ATOM")){ coordinateslist=(coordinates*) realloc(coordinateslist,(anzcoords+1)*sizeof(coordinates)); sscanf(buffer,"%s%s%s%s%s%s%lf%lf%lf",coordinateslist[anzcoords].key,coordinateslist[anzcoords].name,dummy,dummy,dummy,dummy,&coordinateslist[anzcoords].x,&coordinateslist[anzcoords].y,&coordinateslist[anzcoords].z); printf("%s %s %lf %lf %lf \n", coordinateslist[anzcoords].key, coordinateslist[anzcoords].name, coordinateslist[anzcoords].x, coordinateslist[anzcoords].y, coordinateslist[anzcoords].z); ++anzcoords; } } if(anzcoords){ for(i=0;i<anzcoords-1;++i){ for(j=i+1;j<anzcoords;++j){ x_2=pow(coordinateslist[i].x - coordinateslist[j].x,2); y_2=pow(coordinateslist[i].y - coordinateslist[j].y,2); z_2=pow(coordinateslist[i].z - coordinateslist[j].z,2); r_2=x_2+y_2+z_2; energie= 3/pow(r_2,3) - 7/pow(r_2,6); total_energie+= energie; printf("r_2: %f\tEnergie: %f\n",r_2,energie); } } printf("ATOME: %d\n",anzcoords); printf("Gesamtenergie: %f\n",total_energie); } return 0; } int main(){ if(catFcoordChar("test.txt")) fprintf(stderr,"coordinates.pdb gibts nicht\n\n"); return 0; }
-
es läuft
(obwohl ich im übrigen tatsächlich einen c++ compiler verwende)
vielen dank
-
obwohl ich das ergebniss
Gesamtenergie: -1.#IND00
doch ein bisschen seltsam finde und auch noch mit der anzahl der berechneten energien unstimmig bin (bei 25 atomen müssten es 200 einzelenergien sein und nicht 75)
naja...
-
also mit den einzelenergien seh ich das so
Atome Energien
1 0
2 1
3 3
4 6
5 10
6 15usw...
also summe n-1 was ja bekannt n*(n-1)/2 ist...
bei 25 atomen würde ich also mit 25*24/2=300 Energien rechnen oder wie soll das genau mit den energien laufen... Ich vermute mal ich hab da dann was anderes modelliert als du haben wolltest...
-
formel volkommen richtig
ich habe aber 75 statt 300 energie werte, ein komisches ergebniss für die gesamt energie und du hast meine bedingung mit r-cutoff und meine start bedingung in der datei (bei ATOM) unterschlagen (vermute ich zumindest, da er mir bei 25 vorhandene atomen 34 findet, er rechnet alles vorher auch mit rein)?
und hin&und wieder spinnt der compiler und stürzt ab (c++?)
-
jaja die chemiker
ka was du da wieder genau fabrizierst...
kannst mir deine uminöse textdatei ja mal mailen..., dann ja ich die mal bei mir durch mal gucken was der da rausbekommt...
-
eher ungünstig,da platzt das forum
hat über 6000 seiten...
-
öhm ich sprach von mailen nicht posten...
-
-
was soll mir dieser smilie jetzt sagen?
-
übersetzte:
wie zur hölle verdammt maile ich hier in dem forum was
-
müsste doch unter meinem profil anzuklicken sein oder?