Gnuplot

Neue Frage »

Auf diesen Beitrag antworten »
kein_plan Gnuplot

Meine Frage:
Hallo,

ich habe auf meinem Computer Gnuplot installiert, und wollte da jetzt eine Funktion zeichnen lassen.
Dazu habe ich den XWin Server geöffnet, und dann eingegeben: gnuplot (Enter) plot sin(x) (Enter)

Da komt dann aber folgende Fehlermeldung:
0 [main] gnuplot 5780 child_info_fork::abort: C:\cygwin\bin\cygstdc++-6.dll: Loaded to different address: parent(0x750000) != child(0x330000)

Woran liegt das, und was muss man machen, damit es funktioniert?

Meine Ideen:
 
Auf diesen Beitrag antworten »
eulerscheZahl

Leider weiß ich nicht, was ein XWin Server ist.
Aber warum startest du nicht einfach die dafür vorgesehene .exe? Das klappt bei mir hervorragend.
...\gnuplot\bin\gnuplot.exe
Auf diesen Beitrag antworten »
kein_plan

Kennst du dich mit der Cygwin-Installation aus?

Ich habe jetzt nämlich noch ein Problem: Wenn ich in der Cygwin-Konsole etwas kompilieren will (mit "gcc Dateiname.c"), steht da:

fatal error: can't open /tmp/ccZfhNN3.s for writing: No such file or directory
compilation terminated.

Der Ordner cygwin/tmp ist komplett leer. Vorher ging es noch. Ich habe Cygwin mal neuinstalliert, aber das hat auch nichts gebracht. Bei der Installation habe ich folgende Pakete ausgewählt: Devel -> gcc-core und Devel -> gcc-g++. Nach der Neuinstallation war der Ordner immer noch leer, und es kam die gleiche Fehlermeldung. Warum geht das jetzt nicht mehr? verwirrt
Auf diesen Beitrag antworten »
eulerscheZahl

Ich habe es testweise mal heruntergeladen und auch geschafft, eine bereits existierende .c-Datei zu kompilieren. Habe dir vorgewählten Standardeinstellungen bei der Komponentenauswahl beibehalten.

Aber da jetzt eine .c-Datei hinzukommt, von der ich nichts wusste, fangen wir mal anders an:
Welches Betriebsystem nutzt du?
Weche Software - cygwin, gnuplot, sonst noch was, was hier eine Rolle spielt?

Was genau hast du überhaupt vor?
Falls es dir mit cygwin nur um den gcc Compiler geht, das kriegst du unter Windows auch mittels cmd hin.
 
Auf diesen Beitrag antworten »
kein_plan

Ich habe Windows 7. Bis jetzt habe ich C-Programme immer folgendermaßen geschrieben: Code in Notepad++, speichern als C-Datei, dann in Cygwin zum Speicherort der Datei gehen (mit cd ...) und dann eingeben "gcc Dateiname.c". Da wurde dann eine Datei namens a.exe erstellt. Das war dann das fertige Programm.

Jetzt wollte ich eben noch gnuplot installieren, und habe es dabei irgendwie geschafft, dass jetzt gar nichts mehr geht. unglücklich

Installiert habe ich das mit der folgenden Anleitung: www-ian.math.uni-magdeburg.de/~pulst/Algo_Math_II/Leitfaden.pdf

Das Gnuplot habe ich mit dieser Anleitung installiert: www-ian.math.uni-magdeburg.de/~pulst/Algo_Math_II/Anleitung_2.pdf
Auf diesen Beitrag antworten »
eulerscheZahl

Ok, jetzt verstehe ich zumindest dein Problem.
Wie du es mit cygwin behebst, kann ich dir leider nicht sagen.
Wenn du dich mit cmd oder Code::Blocks als Alternative zum Kompilieren anfreunden kannst, kann ich dir aber helfen, das einzurichten.
Auf diesen Beitrag antworten »
kein_plan

Mal eine kurze Frage: Du hast ja geschrieben, dass du es geschafft hast, mit Cygwin eine Datei zu kompilieren. Was ist denn bei dir im Ordner cygwin/tmp? Wie viele Dateien sind das etwa?
Auf diesen Beitrag antworten »
eulerscheZahl

Eine(.c) - und die habe ich vorher selbst erstellt.
Ansonsten ist der tmp Ordner leer.
Auf diesen Beitrag antworten »
kein_plan

Sehr komisch. Warum fehlen dann angeblich bei mir welche?

Es wäre sehr nett, wenn du mir helfen könntest, das mit cmd einzurichten. Das geht doch dann auch mit dem gcc-Compiler, oder?
Könntest du mir auch bei Gnuplot helfen, das so einzurichten, dass das dann so funktioniert wie oben beschrieben? Also z.B. plot sin(x) eingeben, und dann wird die sofort gezeichnet.

Außerdem kann ich ja in ein C-Programm folgenden Code einfügen:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
gnuplot_ctrl *bild;
double x[(STUETZSTELLENANZAHL+1)];
double sin[(STUETZSTELLENANZAHL+1)];

//Hier muss man dann noch die Werte für das Array sin berechnen.

bild = gnuplot_init();
gnuplot_resetplot(bild);
gnuplot_setstyle(bild, "points") ;
gnuplot_plot_xy(bild, x, sin, (STUETZSTELLENANZAHL+1), "Sinus-Funktion");
gnuplot_close(bild);

Funktioniert das dann bei cmd auch, dass ein Bild der Funktion angezeigt wird?


So, das waren jetzt erstmal sehr viele Fragen, vielleicht kannst du mir ja weiterhelfen. smile
Auf diesen Beitrag antworten »
eulerscheZahl

Wie man den Codeschnipsel einbindet, bzw. allgemein mit C auf gnuplot zugreift, kann ich dir spontan auch nicht sagen, mal schauen, ob ich da noch was finde...

Zunächst mal das Einrichten von cmd, damit deine Eingabeaufforderung den Befehl gcc kennt:
1. lade dir den Compiler herunter (z.B. hier), merke dir, wo du ihn gespeichert hast.
2. Start->Systemsteuerung->System (oder Windowstaste + Pausetaste)
oben links auf "Erweiterte Systemeinstellungen"
es öffnen sich ein neues Fenster, dort auf den Reiter "Erweitert" -> "Umgebungsvariablen"
Dann hast du eine Liste mit Systemvariblen, suche dort nach "PATH"
Den Inhalt ergänzst du (mit ; getrennt) um den Pfad, wo dein Compiler ist, als z.B.
vorne anhängen C:\gcc;, wenn der Compiler unter C:\gcc\gcc.exe gespeichert ist.
Auf gleiche Weise kannst du den Pfad von gnuplot.exe eingeben, dann startet cmd gnuplot, wenn du gnuplot schreibst.
Auf diesen Beitrag antworten »
kein_plan

Ich stell mich wahrscheinlich gerade ein bisschen doof an: Wo genau muss ich da hinklicken auf der Downloadseite vom Compiler? verwirrt
Auf diesen Beitrag antworten »
eulerscheZahl

Habe nicht versucht es herunterzuleden, da ich es schon auf der Platte habe, ist tatsächlich sehr versteckt.

hier
Auf diesen Beitrag antworten »
kein_plan

So, ich habe jetzt alles installiert. Funktioniert auch. Kompilieren kann ich, Gnuplot wird gestartet, so, wie es soll.

Nur ein Problem ist noch: Wenn ich ein Programm kompiliere, das oben genannten Code enthält, werden ein Haufen Fehlermeldungen ausgegeben. Weißt du, wie das geht?
Auf diesen Beitrag antworten »
eulerscheZahl

Nein, weiß ich leider auch nicht.

Bei der Fehlersuche helfen würden aber:
- der komplette Quellcode (mit Headern)
- die Fehlermeldungen - kennt dein Compiler gnuplot_ctrl?
Auf diesen Beitrag antworten »
kein_plan

Hier ist der Code eines Programms, das die Exponentialfunktion zeichnen soll:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

#include "gnuplot_i.h"

#define STUETZSTELLENANZAHL    100

int main(void)
{    
    gnuplot_ctrl *bild;
    double x[(STUETZSTELLENANZAHL + 1)];
    double expo[(STUETZSTELLENANZAHL + 1)];
    double untergrenze, obergrenze, schrittweite;
    int i = 0;
    
    bild = gnuplot_init();
 
    printf("Dieses Programm visualisiert die Exponentialfunktion.\nGeben Sie bitte die linke Grenze ein: "); 
    scanf("%lf", &untergrenze);
    
    printf("Geben Sie nun bitte die rechte Grenze ein: "); 
    scanf("%lf", &obergrenze);
    
    schrittweite = (obergrenze - untergrenze)/(double)(STUETZSTELLENANZAHL);
	
	for(i=0; i<=STUETZSTELLENANZAHL; i++)
    {
        x[i] = untergrenze+(double)(i)*schrittweite;
		expo[i] = exp(x[i]);
    }
    
    gnuplot_plot_xy(bild, x, expo, (STUETZSTELLENANZAHL+1), "Exponentialfunktion");
    
    printf("Wenn Sie genug gesehen haben, druecken Sie bitte return.\n");
    getchar();
    gnuplot_close(bild);
    return(0);
}

Den Header gnuplot_i.h habe ich in den gleichen Ordner wie die C-Datei gelegt.

Die Fehlermeldungen bei cmd sahen so aus:
Auf diesen Beitrag antworten »
eulerscheZahl

Wo kann ich "gnuplot_i.h" herunterladen?
Habe es hierhin geschafft, finde aber keinen Downloadlink.
Auf diesen Beitrag antworten »
kein_plan

Ich habe es hier heruntergeladen. Das ist die Seite von meinem Professor an der Uni:
www-ian.math.uni-magdeburg.de/home/grunau/additional.html
Auf diesen Beitrag antworten »
eulerscheZahl

gcc <deineDatei>.c gnuplot_i.c
damit sollte das kompilieren klappen.
Ein Problem bleibt: das Plotfenster verschwindet nach einem Sekundenbruchteil schon wieder - mal schauen, was ich da machen kann.
Auf diesen Beitrag antworten »
eulerscheZahl

Fehler gefunden, Speicher muss nach Eingabe geflusht werden:
entweder: (meines Wissens nur unter Windows)
code:
1:
2:
3:
    printf("Wenn Sie genug gesehen haben, druecken Sie bitte return.\n");
    fflush(stdin);
	getchar();

oder:
code:
1:
2:
3:
    printf("Wenn Sie genug gesehen haben, druecken Sie bitte return.\n");
    getchar();
	getchar();

Methode 2 hat den Nachteil, dass bei einem Leerzeichen nach Eingabe der oberen Grenze trotzdem sofort beendet wird.

Das Schließen des Plotfensters klappt nur mit der Leertaste und mit q.
Auf diesen Beitrag antworten »
kein_plan

Die zweite Methode war eigentlich schon so im Programm. Da hab ich wohl aus Versehen ein getchar(); gelöscht.

Vielen, vielen Dank. Du hast mir wirklich sehr geholfen. Ich glaube, ohne deine Hilfe wär ich sonst noch verzweifelt. Gott
Auf diesen Beitrag antworten »
eulerscheZahl

Gern geschehen.

Jetzt, da alles (außer cygwin) funktioniert wie gewünscht, noch ein Rat:
hol dir Code::Blocks. Das ist eine Entwicklungsumgebung, das heißt du kannst dort dein Programm schreiben und auch gleich kompilieren und ausführen (erspart die Eingabeaufforderung). Damit lässt sich Zeit sparen und bei Fehlern kann man auch gleich an die fehlerhafte Zeile hinspringen.
Auf diesen Beitrag antworten »
kein_plan

Ich hab ja Visual Studio als Entwicklungsumgebung.
Aber ich wollte trotzdem noch den GCC-Compiler haben, weil wir den an der Uni in der Vorlesung benutzen. Und manchmal zeigt Visual Studio Fehlermeldungen an, wo der GCC alles einwandfrei kompiliert. Und damit ich bei den Beispielprogrammen aus der Vorlesung keine Probleme habe, kompiliere ich die lieber mit GCC. Außerdem zeigt Visual Studio bei Gnuplot auch ganz viele Fehlermeldungen an. Kriegt man wahrscheinlich auch irgendwie weg, aber ist ja jetzt nicht mehr so wichtig.
Auf diesen Beitrag antworten »
eulerscheZahl

Ach so.
Ja, Visual Studio ist auch gut, verwende ich auch.
Da ich genauso wenig Lust habe, gnuplot in Visual Studio auszutesten, bleibt mir nur noch, dir einen schönen Abend zu wünschen smile
Auf diesen Beitrag antworten »
kein_plan

Wünsche ich dir auch. Wink
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »