Octaveのデータを保存し、gnuplotで表示

このQ&Aのポイント
  • Octaveの計算結果の数値を保存しgnuplotでグラフ表示する方法について
  • for文を利用した際に最後のループの数値しか保存されない問題に対する解決方法
  • gnuplotを使用して保存したデータをグラフ化するためのコマンドについて
回答を見る
  • ベストアンサー

Octaveのデータを保存し、gnuplotで表示

現在、Octaveの計算結果の数値を保存しgnuplotでグラフ表示させたいと考えています。 ですが、for文を利用した際に最後のループの数値しか保存されません。 すべての数値を保存したいのですがどのようにすればよいかご意見をいただけないでしょうか。(mファイルで実行しています) また、保存したデータをグラフ化する際のgnuplotのコマンドを教えて頂けないでしょうか。 よろしくお願いします。 【参考プログラム】 for a=-2:1:2 for b=-2:1:2 printf("x(1)=%f x(2)=%f \n",a,b); printf("\n"); endfor endfor save nn.dat a b

質問者が選んだベストアンサー

  • ベストアンサー
  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.1

いまいちやりたいことがよく分からないのですが、何を保存したいんですか? a,bのすべての組み合わせってことですか? といっても、a,bの組み合わせはほとんど自明だと思うのですが。 とりあえず、a,bを記録したいなら最後のsave文を消して、printf文をfprintf文にしてファイルに出力するなど。

関連するQ&A

  • gnuplotにおいて

    数値計算でf(x)=-1/xのグラフをgnuplotを使いながら計算しています。 その課題において,x軸方向に周期5ずつずらしてf(x)=-1/xのグラフをずらしていく(左右に)といった作業があるのですが,方法がわかりません。 助けてくださる方がいたら,至急お願いします。

  • gnuplotについて質問です。

    現在、linuxでC言語からパイプを使ってgnuplotに接続し、計算した結果をすぐに表示しようとしています。 下のようなプログラムでうまくいくと思ったのですが、グラフが表示されるのにすごい時間がかかってしまいます。 解決策をご存知でしたらご教示お願いいたします。 #include<stdio.h> #include<stdlib.h> #include<math.h> void main(){ FILE *plotin; double x , y; int i = 0; struct sched_param param; struct timespec tt; //gnuplotにパイプで接続 plotin = popen("gnuplot","w"); //制御LOOP開始 for(i = 0 ; i < 1000 ; i ++) { if( i == 10000) { exit(0); } //gnuplotで表示するグラフの計算 x = i * 0.01; y = x*x; //gnuplotに表示する fprintf(plotin,"plot '-' title \"oscillation\" \n"); fprintf(plotin,"%f %f\n", x,y); fprintf(plotin,"e\n"); i++; } //gnuplot閉じる pclose(plotin); }

  • GNUPLOTでΣは?

    GNUPLOTを使って、 f(x) = Σ[ {(-1)^n } * { cos (2nπx / L) } / n ] (Lは定数で、Σのnの範囲は0~20です) 横軸にx、縦軸にf(x)をとってグラフを書く事はできるのでしょうか??もしできるのであれば、どのように入力すれば良いか教えてください。お願いします。

  • gnuplotが分かる方教えてください。

    貯蔵弾性率と損失弾性率のグラフを描くにあたり、 横軸をG’(ω)/GおよびG''(ω)/G、縦軸をωτとなるグラフをgnuplotで描きたいのですが、 gnuplot>plot x**2/(1+x**2), x/(1+x**2) gnuplot>set logscale xy gnuplot>replot ではだめでしょうか。 何回やっても、x/x2 range must be greater than 0 for log scale!というエラーメッセージが出てしまいます。どう直せばいいか分かる方教えてください。

  • gnuplotでreplotできない??

    下記のプログラムを書きました。 下記のプログラムでは1枚のグラフの複数のグラフをどんどん重ね、さらに1つのemfファイルとして出力し保存しようとしています。 しかし、問題が発生しました。 プログラム中のfprintf(gp, "replot (x+1)*x*(x-1)\n");を消すとプログラムは動くのですがreplotがあるとうまく画像ファイルが保存されません。 emfファイルはできている(ファイル容量は0ではない。)のですが、emfファイルが壊れており見ることができません。 その理由がわかる方がいましたら、教えていただけないでしょうか? よろしくお願いします。 以下、書いたプログラムです。 #include <stdio.h> #include <windows.h> #include <tchar.h> #include <string> #include<conio.h> using namespace std; #define GNUPLOT_PATH "C:/gnuplot/gnuplot/binary/gnuplot.exe" //char *a[10]; char a[10][50]; long n; long l; int main() { FILE *gp; gp = _popen(GNUPLOT_PATH, "w"); if (gp == NULL) { fprintf(stderr, "Oops, I can't find %s.", GNUPLOT_PATH); exit(EXIT_FAILURE); } // gnuplotにコマンドを送る fprintf(gp, "set terminal emf color 'Ryumin-Light-EUC-H' 16\n"); fprintf(gp, "set output '%s.emf'\n", a[n]); fprintf(gp, "set title '日本語-入力テスト'\n"); //x軸の範囲の設定 //fprintf(gp, "set xrange [-60:60]\n"); //fprintf(gp, "set yrange [0:3]\n"); fprintf(gp, "set grid\n"); fprintf(gp, "set datafile separator ','\n"); fprintf(gp, "set datafile separator ','\n"); fprintf(gp, "set key bottom outside\n"); fprintf(gp, "plot sin(x)\n");     fprintf(gp, "replot (x+1)*x*(x-1)\n"); fflush(gp); // バッファに格納されているデータを吐き出す(必須) //getchar(); // 入力待ち _pclose(gp); exit(EXIT_SUCCESS); return 0; }

  • グラフ描画コンテンツのgnuplotの使い方について質問します。

    グラフ描画コンテンツのgnuplotの使い方について質問します。 グラフを書く際に、範囲を分けて書きたいのですがどのようにすればいいのでしょう? 具体的に言いますと、F(x)=x のグラフを x軸 -5から0までの範囲、g(x)=x*xのグラフを x軸 0から3までの範囲で描写したいときに、どう打ち込めばよいのでしょうか?

  • gnuplotでグラフをだしたいのですがわからないです。

    以下は二項分布のC言語プログラミングソースです。 #include<stdio.h> #include<stdlib.c> #include<math.h> void error(char *s) { printf("%s\n", s); } int main() { int k,m; double u,q,s,t; printf("m,u?"); scanf("%d%lf", &n,&u); q = 1 - p; s = t =pow(q, m); if (s == 0) error("mかu が大きすぎます。"); for (k = 0;k <m; k++) { printf("%4d %7.4f\n",k,s); t *= (m - k) * u / ((k + 1)*q); s += t; } printf("%4d %7.4f\n",m,s); return EXIT_SUCCESS; } この実行結果で出た数値をグラフ化をしたいのです。折線グラフでも、曲線グラフでも構わないので、おしえていただけないでしょうか???

  • gnuplotについて。

    OSはWINDOWS XPなんですが、xウィンドウを立ち上げて、リモートアクセスしたunix環境のパソコンからgnuplotを使っています。 グラフを表示したら、そのウィンドウ上で二点を右クリックすると、その囲まれた領域が拡大されます。しかし、戻ることはできないのですが、どのようにしたらいいのでしょうか? あと、そのグラフを画像として保存するのはどうしたらいいのでしょうか? まだ使い始めたばかりのソフトなのでよろしくお願いします。

  • gnuplot内の数値計算

    gnuplotでf(x)=15000000000*(0.08/exp((x/49)^0.25)+0.92/exp((x/9000000)^0.35))という計算を行いたいのですが、 a=0.08 b=49 c=0.25 d=9000000 e=0.35 f=15000000000 f(x)=f*(a/exp((x/b)**c)+(1-a)/exp((x/d)**e)) と入力してもExcelでの計算と一桁違ってしまいます。 おそらく数式を間違えていると思うのですが、よくわかりません。 どうすれば正しい数式になるのか教えてください。

  • scanf関数のプログラムをgetchar関数で

    scanf関数を使って四則演算、論理輪、論理積をint、float、double型で表示するプログラムを作ったのですが これをscanf関数ではなく、getchar関数で組みなおし、関数化する課題が出ました。 そのままscanf関数のところだけを変えても型が違うというエラーが出てうまくいきません。 どうすればいいでしょうか? 一応scanf関数で組んだプログラムの一部を載せておきます。 #include <stdio.h> #include <math.h> main() { float a , b; float x[5]; printf("正の数字を2つ入力して下さい(小数点を含めて4ケタまで):\n"); for(;;) { printf("\na="); scanf("%f" , &a); if(a>=0 && a<=9999 && a) { break; } else { printf("****aに入力エラー****\n"); printf("数字は4ケタ以内の正数を入力:\n"); continue; } } for(;;) { printf("b="); scanf("%f" , &b); if(b>=0 && b<=9999 && b) { break; } else { printf("****bに入力エラー****\n"); printf("数字は4ケタ以内の正数を入力:\n"); continue; } } x[0] = a+b; x[1] = a-b; x[2] = a*b; x[3] = a/b; x[4] = a||b; x[5] = a&&b; printf("\n"); printf("int型 結果:\n足し算=%d\n" , (int)x[0]); printf("引き算=%d\n" , (int)x[1]); printf("掛け算=%d\n" , (int)x[2]); printf("割り算=%d\n" , (int)x[3]); printf("論理和=%d\n" , (int)x[4]); printf("論理積=%d\n" , (int)x[5]); printf("\n"); printf("float型 結果:\n足し算=%f\n" , x[0]); printf("引き算=%f\n" , x[1]); printf("掛け算=%f\n" , x[2]); printf("割り算=%f\n" , x[3]); printf("論理和=%f\n" , x[4]); printf("論理積=%f\n" , x[5]); ・ ・ ・ getchar(); }

専門家に質問してみよう