49138


gnuplotに座標データを与え、曲線をプロットする方法を教えて下さい。  
c言語で座標データを作成し、.datファイルに保存したものをgnuplotでグラフとして表示するプログラムを作成したいのですが、期待する曲線のプロットが出来ません。  
以下はデータ作成のcコードです。

[code]

    #include <stdio.h>
    
    int main(void){
    
    FILE *data,*gp; 
    char *data_file; 
    
    int i, n=100; 
    
    double r=3.80; // 初期条件
    double x[101]; // 
    x[0]=0.7; // 初期条件
    
    /*--- データ作成 ---*/
    
    data_file="sample.dat";
    data=fopen(data_file,"w");
    for(i=0;i<n;i++){
            x[i+1]=r*(1-x[i])*x[i];
            fprintf(data,"%lf\t%lf",x[i],x[i+1]);
    }
    fclose(data);
    
    /*--- データをプロット ---*/
    
    gp=popen("gnuplot -persist","w");
    fprintf(gp,"set xrange [0:1]\n");
    fprintf(gp,"set yrange [0:1]\n");
    fprintf(gp,"plot \"%s\"with line\n",data_file);
    
    fprintf(gp,"e\n");
    pclose(gp);
    
    return 0;
    }
    
[/code]

.dataファイルには100行2列で、1列目にはx座標、２列目にはy座標が出力されます。しかし、gnuplotで`plot "sample.dat"
with
lines`としても曲線にはなりません。何故なのでしょうか。[![プロットされたもの](https://i.stack.imgur.com/R3mGT.png)](https://i.stack.imgur.com/R3mGT.png)

以下はsample.datの中身の8行目までです。

[code]

    0.700000 0.798000
    0.798000 0.612545
    0.612545 0.901868
    0.901868 0.336308
    0.336308 0.848179
    0.848179 0.489331
    0.489331 0.949567
    0.949567 0.181979
    
[/code]


CC BY-SA 4.0
2018-10-10T04:06:17.483
49120
2018-10-10T09:55:19.770
2018-10-10T04:24:08.353
30371
30371
question
c gnuplot
gnuplotで座標データから曲線を描く方法について


>
> 今回は`x[n+1]=3.8x[i](1-x[i])`という関数をプロットしたのですが、gnuplotでは差分方程式を座標などを用いずにシンプルにプロットする方法などはあるのでしょうか？

条件次第では可能です。その条件というのは、データの X 値 が全て unique であることです。gnuplot には `smooth unique`
というオプションがあって、これはデータを X 値でソートして、同一の X 値に対応する Y 値を平均化します。X 値が unique であれば、単に X
値でソートされるだけになります。

[code]

    r = 3.80
    x0 = 0.7
    set xrange [0:1]
    set yrange [0:1]
    plot sample [i=1:100] '+' using (x1=(i==1?x0:x1)):(x1=r*x1*(1-x1)) with lines smooth unique
    
[/code]


CC BY-SA 4.0
2018-10-10T09:55:19.770
49138
2018-10-10T09:55:19.770
49120
answer