Spam-Thread VIII - Die Acht, Leude! :florentin:

Na das habe ich in c programmiert und zur visualsierung per konsole gnuplot aufgerufen also standard plotprogramm aufgerufen, für jeden zeitpunkt ein Bild machen lassen und die dann am ende durch ein videobinde programm zusammenfügen lassen. Das ist sehr basic ohne besonderes programm das mir iwas abnimmt man muss halt ein wenig bash scripten können

In phyton das animations und isualisierungsrogramme online hat geht das nochmal viel einfacher auch wenn man weniger von grundauf macht dann natürlich

Sowas ist ja kein physikalisches system wo man erstmal die gleichungen alszentrales problem lösen muss.

Ah, also nix mit Renderengine oderso.

Jetzt hab ich bock drauf irgendwas zu programmieren. :smiley:

Nein gar nicht wie gesagt wirklich basic tools. Ich meine ein Feld visualisieren bekommt man halt echt mit jedem plotprogrämmchen hin. Aber es braucht auch gar nicht mehr, wenn man weiß was man macht. Es gibt ja Anwendersoftware aber die kann halt jeder benutzen auch ohne Programmierkenntnis

1 „Gefällt mir“

grafik

1 „Gefällt mir“

Ich weiß nicht was es ist, aber es ist bunt und es ist irgendwie hübsch :smile:

1 „Gefällt mir“

Weniger Drogen nehmen auf jeden Fall. :kappa:

2 „Gefällt mir“

Es ist ein Phasendiagramm ( also Impuls gegen Ort ) eines komplexen Systems (welches was ich gerade aber auch niht mehr furh nur noch aufm Rechner rum) und je nach Anfangsparametern hat man verschiedene Bahnen oder völliges chaos das interessant ehier bei ist dass das ne Fraktale Lösung ist also wenn man iwo in so ein Fettauge reinzoomt dann sieht es wieder wie das ganze Bild aus.

1 „Gefällt mir“

RobChang: Mein Abschluss Projekt dazu war ein Programm schreiben, dass das Newtonsche Pendel zu simulieren und zwar für beliebig viele Kugeln und mit nem gewissen Potenzial für die Kugel Kugel abstoßung und nicht starren fäden an denen die festgemacht sind, sodass sie noch hoch unter runter wobbeln können. :face_with_monocle:

Schlotter: Das ist voll buuuuuuunt und schön!:ugly:
:grin:

2 „Gefällt mir“

Ne mehr IMMER MEHR!!! :colinmcrage:

2 „Gefällt mir“

Das eine hat gar nichts mit dem anderenn zu tun :stuck_out_tongue:

Allet für den Joke!:beanwat:/

1 „Gefällt mir“

Einen Versuch war es wert :smile: @Nightingale_85

2 „Gefällt mir“

Hatte gerade nen üblen durchhänger für die letzten zwei Stunden.
Mit Kopfschmerzen und wegnicken.

1 „Gefällt mir“

Interesting! :thinking:

Ja dennoch hat man die ganzen Perlen liegen lassen und haette locker mit einigen Spielen 10+folgen aufnehmen koennen. Scheint allerdings keine Option mehr zu sein

Viel sinnvoller als darüber hier im Spamthread zu schreiben.
Die Frage kannst du doch für Behind the Beans stellen.

Das ist das angesprochene Objekt :wink:

2_5336816483861266714

Hier der Code in übersichtlichen 11 Seiten

Das ist der Code in C (ohne Bashscripting)

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
//Feste Systemparameter (nicht von Anwender manipulierbar)######################################################
#define m 0.01 // Masse der Kugeln in kg
#define L 8.0 // Länge der Pendel im Gravitationsfeld in cm
#define a 1.0 // Abstand der Ruhepositionen in cm
#define g 1000.0 // Gravitationsbeschleunigung in -y-Richtung in cm/s^2
#define k 1000.0 // Federkonstante in kg/s^2
#define L0 7.99 // Ruhelänge des Pedels im Gravitationsfeld in cm
#define x0 (-2.0) // x-Postion der 0. Kugel in cm
#define epsilon 10000.0 // Lenard-Jones-Parameter Epsilon in kgcm^2/s^2
#define sigma 0.9 // Lenard-Jones-Parameter Sigma in cm
#define t_end 10.0 // End-Zeit in s
//#############################################################################################################
// Funktion, die Abstand zwischen zwei Kugeln i,j misst---------------------------
double Abstand(double feld[][2][2], int i, int j ){
double Erg;
Erg = sqrt(pow(feld[i][0][0]-feld[j][0][0],2)+ pow(feld[i][1][0]-feld[j][1][0],2));
return Erg;
}//-------------------------------------------------------------------------------
//Länge der Feder-----------------------------------------------------------------
double Laenge(double feld[][2][2], int i){
double Erg;
Erg = sqrt(pow(feld[i][0][0]-i
a,2)+pow(feld[i][1][0]-L,2));
return Erg;
}//------------------------------------------------------------------------------
//Kinetische Energie eines Teilchens i-------------------------------------------

double T_i(double feld[][2][2], int i){
double Erg;
Erg = 0.5m(pow(feld[i][0][1],2)+pow(feld[i][1][1],2));
return Erg;
}//------------------------------------------------------------------------------
//Potenzielle Energie eines Teilchens i ohne Lenard-Jones-Potenzial--------------
double V0_i(double feld[][2][2], int i){
double Erg;
Erg = 0.5kpow(Laenge(feld,i)-L0,2) + mgfeld[i][1][0];
return Erg;
}//------------------------------------------------------------------------------
//Lenard-Jones-Potenzial zwischen Teilchen i und j:-------------------------------
double VLJ_ij(double feld[][2][2], int i, int j){
double Erg;
if(Abstand(feld,i,j)<sigma && i!=j){
Erg = epsilon*(pow(sigma/Abstand(feld,i,j),12)-2pow(sigma/Abstand(feld,i,j),6)+1);
}else{
Erg = 0.0;
}
return Erg;
}
//Summe aller Lenard-Jones-Wechselwirkungen für ein Teilchen i-------------------
double VLJ_i(double feld[][2][2], int i, int N ){
double Erg=0.0;
int j;
for(j=0; j<N; j++){
Erg= Erg+ 0.5
VLJ_ij(feld,i,j);
}
return Erg;
}
//Differentialgleichung für Teilchen i ohne Lenard-Jones-Potenzial…------------
//… für x-Komponente:+++++++++++++++++++++++++++++++++
double F0x_i(double feld[][2][2], int i){
double Erg;
Erg = -k/m*(Laenge(feld,i)-L0)(feld[i][0][0]-ia)/Laenge(feld,i);
return Erg;
}//+++++++++++++++++++++++++++++++++++++++++++++++++++++
//… für y-Komponente:+++++++++++++++++++++++++++++++++
double F0y_i(double feld[][2][2], int i){
double Erg;
Erg = -k/m*(Laenge(feld,i)-L0)(feld[i][1][0]-L)/Laenge(feld,i)-g;
return Erg;
}//+++++++++++++++++++++++++++++++++++++++++++++++++++++
//--------------------------------------------------------------------------------
//Differentialgleichung für Lenard-Jones-Wechselwirkung zwischen Teilchen i,j:----
double FLJ_ij(double feld[][2][2], int i, int j){
double Erg;
if(Abstand(feld,i,j)<sigma&&i!=j){
Erg = 12
epsilon*(pow(sigma,6)pow(Abstand(feld,i,j),-7)-pow(sigma,12)pow(Abstand(feld,i,j),-13));
}else{
Erg = 0.0;
}
return Erg;
}
//Differentialgleichung für Lenard-Jones-Wechselwirkung für die beiden Komponenten:
//…x-Komponente:+++++++++++++++++++++++++++++++++++++++
double FLJx_i(double feld[][2][2], int i, int N){
double Erg = 0.0;
int j;
for(j=0; j<N; j++){
if(i!=j){
Erg = Erg -FLJ_ij(feld,i,j)
(feld[i][0][0]-feld[j][0][0])/Abstand(feld,i,j);
}else{
Erg = Erg;
}
}
return Erg;
}//+++++++++++++++++++++++++++++++++++++++++++++++++++++++
//…y-Komponente:++++++++++++++++++++++++++++++++++++
double FLJy_i(double feld[][2][2], int i, int N ){
double Erg=0.0;
int j;
for(j=0; j<N; j++){
if(i!=j){
Erg = Erg - FLJ_ij(feld,i,j)
(feld[i][1][0]-feld[j][1][0])/Abstand(feld,i,j);
}else{
Erg = Erg;
}
}
return Erg;
}
//gesamte Beschleunigungsterme+++++++++++++++++++++++++++++++++++++++++++++++
//…für x-Komponente
double Fx_i(double feld[][2][2], int i, int N){
double Erg;
Erg = F0x_i(feld,i) + 0.5/mFLJx_i(feld,i,N);
return Erg;
}//---------------------------------------------------
//für y-Komponente-------------------------------------
double Fy_i(double feld[][2][2], int i, int N){
double Erg;
Erg = F0y_i(feld,i) + 0.5/m
FLJy_i(feld,i,N);
return Erg;
}//----------------------------------------------------
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
int main(int argc, char argv[]){
//Konfigurations-Array-------------------------------(erklären wies funktioniert
int N = 2;
//int N = atoi(argv[1]);// Teilchenanzahl aus Programmaufruf
//double dt = atof(argv[2]);// Zeitschrittweite aus Programmaufruf
int algorithm = 0;
double Sys_alt[N][2][2];// Systemkonfiguration erste Komponente = Teilchen, zweite Komponente = x oder y , dritte Komponente x oder x’
double Sys_neu[N][2][2];
int i,j,l;
//----------------------------------------------------------------------------
//Initialisieren des Konfigurations-Arrays#####################################################################
//Orte der 0. Kugel++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Sys_alt[0][0][0] = x0;
Sys_alt[0][1][0] = L-sqrt(pow(L,2)-pow(x0,2));
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Orte der anderen Kugeln +++++++++++++++++++++++++++++++++++++++++++++++++++++
for(i=1; i<N; i++){
Sys_alt[i][0][0]=i
a;
Sys_alt[i][1][0]=0.0;
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Geschwindigkeiten aller Kugeln+++++++++++++++++++++++++++++++++++++++++++++++
for(i=0; i<N;i++){
Sys_alt[i][0][1]= 0.0;
Sys_alt[i][1][1]= 0.0;
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//#############################################################################################################
if(algorithm == 0){
//Euler-Algorithmus############################################################################################
double t=0.0;
double dt=0.00001;
double KinEnerg, PotEnerg, GesEnerg;
//Output-Files für Koordinaten der Teilchen und für Energien des Systems+++++++
char File1[100];
char File2[100];
sprintf(File2,„Daten_Energie_Euler.txt“);
sprintf(File1,„Daten_Koord_Euler.txt“);
FILE *f1=fopen(File1, „w“);
FILE *f2 =fopen(File2, „w“);
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Zeitschleife+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
do{
//Ausgabe der Koordinaten----------------------------------
fprintf(f1, „#t=%.4lf\n“,t);
for(i = 0; i<N; i++){
fprintf(f1,"%.5lf\t", Sys_alt[i][0][0]);
fprintf(f1,"%.5lf\n", Sys_alt[i][1][0]);
}
fprintf(f1, „\n“);//Doppeltes Leerzeichen für Trennung der Blöcke
fprintf(f1, „\n“);//der einzelnen Zeitpunkte für Plotprogramm
//---------------------------------------------------------
//Berechnung der Energien----------------------------------
KinEnerg =0.0;
PotEnerg =0.0;
//Bestimmen der kinetischen und potentiellen Energie durch Summation über T_i und V_i
for(i=0; i<N; i++){
KinEnerg = KinEnerg+ T_i(Sys_alt,i);
PotEnerg = PotEnerg+ V0_i(Sys_alt,i)+VLJ_i(Sys_alt, i, N);
}
GesEnerg = KinEnerg +PotEnerg;
//Ausgabe der Energien des Gesamtsystems zu den verschiedenen Zeitpunkten
fprintf(f2, „%.4lf\t“, t);
fprintf(f2, „%.5lf\t“, KinEnerg);
fprintf(f2, „%.5lf\t“, PotEnerg);
fprintf(f2, „%.5lf\n“, GesEnerg);
//---------------------------------------------------------
//Euler-Integration für jedes der N Teilchen---------------
for(i=0; i< N; i++){
Sys_neu[i][0][1] = Sys_alt[i][0][1]+ Fy_i(Sys_alt,i,N)*dt;//Geschwindigkeit in x-Richtung
Sys_neu[i][1][1] = Sys_alt[i][1][1]+ Fy_i(Sys_alt,i,N)*dt;//Geschwindigkeit in y-Richtung
Sys_neu[i][0][0] = Sys_alt[i][0][0]+ (Sys_alt[i][0][1] + Fx_i(Sys_alt,i,N)*dt)*dt;//x-Koordinaten
Sys_neu[i][1][0] = Sys_alt[i][1][0]+ (Sys_alt[i][1][1] + Fy_i(Sys_alt,i,N)*dt)*dt;//y-Koordinaten
}
//---------------------------------------------------------
//Vertauschen der beiden Arrays----------------------------
for(i=0; i<N;i++){
for(j = 0; j< 2; j++){
for(l=0; l< 2; l++){
Sys_alt[i][j][l] = Sys_neu[i][j][l];
}
}
}
//---------------------------------------------------------
t = t+dt;
}while(t<=t_end);
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Schließen der Dateien in die Daten ausgegeben wurden
fclose(f1);
fclose(f2);
}//############################################################################################################
if(algorithm ==1){
//Velocity-Verlet-Algorithmus##################################################################################
double t=0.0;
double dt=0.0001;
double KinEnerg, PotEnerg, GesEnerg;
//Output-Files für Koordinaten der Teilchen und für Energien des Systems+++++++
char File1[100];
char File2[100];
sprintf(File2,„Daten_Energie_VVerlet.txt“);
sprintf(File1,„Daten_Koord_VVerlet.txt“);
FILE *f1=fopen(File1, „w“);
FILE f2 =fopen(File2, „w“);
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Zwischenspeicher für vx_i(t+1/2dt) und vy_i(t+1/2dt)
double Zwischen[N][2];
//Zeitschleife+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
do{
//Ausgabe der Koordinaten----------------------------------
fprintf(f1, „#t=%.4lf\n“,t);
for(i = 0; i<N; i++){
fprintf(f1,"%.5lf\t", Sys_alt[i][0][0]);
fprintf(f1,"%.5lf\n", Sys_alt[i][1][0]);
}
fprintf(f1, „\n“);//Doppeltes Leerzeichen für Trennung der Blöcke …
fprintf(f1, „\n“);//…der einzelnen Zeitpunkte für Plotprogramm
//---------------------------------------------------------
//Berechnung der Energien----------------------------------
KinEnerg =0.0;
PotEnerg =0.0;
//Bestimmen der kinetischen und potentiellen Energie durch Summation über T_i und V_i
for(i=0; i<N; i++){
KinEnerg = KinEnerg+ T_i(Sys_alt,i);
PotEnerg = PotEnerg+ V0_i(Sys_alt,i)+VLJ_i(Sys_alt, i, N);
}
GesEnerg = KinEnerg +PotEnerg;
//Ausgabe der Energien des Gesamtsystems zu den verschiedenen Zeitpunkten
fprintf(f2, „%.4lf\t“, t);
fprintf(f2, „%.5lf\t“, KinEnerg);
fprintf(f2, „%.5lf\t“, PotEnerg);
fprintf(f2, „%.5lf\n“, GesEnerg);
//---------------------------------------------------------
//Velocity-Verlet-Integration für jedes der N Teilchen-----
//Berechnen der Zwischengeschwindigkeiten…
for(i=0;i<N; i++){
Zwischen[i][0]=Sys_alt[i][0][1] + 0.5
Fx_i(Sys_alt,i,N)dt;
Zwischen[i][1]=Sys_alt[i][1][1] + 0.5
Fy_i(Sys_alt,i,N)*dt;
}
//…
//Berechnen der neuen Orte…
for(i=0;i<N;i++){
Sys_neu[i][0][0] = Sys_alt[i][0][0]+Zwischen[i][0]*dt;
Sys_neu[i][1][0] = Sys_alt[i][1][0]+Zwischen[i][1]dt;
}
//…
//neue Geschwindigkeiten…
for(i=0;i<N;i++){
Sys_neu[i][0][1] = Sys_alt[i][0][1] + 0.5
(Fx_i(Sys_alt,i,N)+Fx_i(Sys_neu,i,N))dt;
Sys_neu[i][1][1] = Sys_alt[i][1][1] + 0.5
(Fy_i(Sys_alt,i,N)+Fy_i(Sys_neu,i,N))*dt;
}
//…
//---------------------------------------------------------
//Vertauschen der beiden Arrays----------------------------
for(i=0; i<N;i++){
for(j = 0; j< 2; j++){
for(l=0; l< 2; l++){
Sys_alt[i][j][l] = Sys_neu[i][j][l];
}
}
}
//---------------------------------------------------------
t = t+dt;
}while(t<=t_end);
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Schließen der Dateien in die Daten ausgegeben wurden
fclose(f1);
fclose(f2);
}//############################################################################################################
return 0;
}

1 „Gefällt mir“

Heute schlaucht die 12 Std Schicht ganz schön…

Nicenstein!
Wie wurde denn der erste Anstoßimpuls gegeben? Ist der Veränderbar? Also dass die Kugel von “höher” losgelassen wird, beim ersten Schwung?

Ja natürlich. Alle Parameter sind ja iwie in die Lösung der DGLs eingeflossen. Also es gibt halt Parameter di der Anwender beim Ausführen des Programms vorgeben kann, dass ist insbesondee die Zahl der Kugeln abe wenn man in den Code geht und in nochmal extra kompilieren lässt ist auch alles andere veränderbar.

Das hier gibt vor wie weit die erste Kugel nach links ausgelenkt wird am Zeitpunkt t=0

#define x0 (-2.0) // x-Postion der 0. Kugel in cm

Und der anfängliche Impuls wird ja dadurch erzeugt, dass die erste Kugel aus der Ruhe vom Gravitationsfeld beschleunigt wird.