• ベストアンサー

R言語について

wl <- 0 i <- 1 for (i in 1:10) { wl <- wl+100 x <- c(1:1000) y <- sin(2*pi*x/wl) plot(x,y, type=‘l’) } このプログラムのそれぞれの意味はなんですか?

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

  • ベストアンサー
  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.1

> wl <- 0  wlという変数に0を代入する。<-は代入を意味する。Rでは 0 -> wl という書き方も可能。 > i <- 1  iに1を代入。ここでは次の行で上書きしてしまうので無意味。 > for (i in 1:10) {  iを1,2,...,10と変えながら最後の}行までを繰り返し実行する。  一般にforはinの後のベクタの各要素をinの前の変数iに入れながら繰り返し実行する。  1:10は1から10までのベクタ。一般にm:nでmからnまでのベクタになる。 > wl <- wl+100  wlを100増やす > x <- c(1:1000)  1から1000までのベクタを変数xに代入する。この行は単に x <- 1:1000 でも可能。 > y <- sin(2*pi*x/wl)  ベクタ変数xの各値に対してsin(2*pi*x/wl)を対応させたベクタをyに代入する。  ベクタ変数の要素ごと計算が簡単にできるのがRの特徴です。 > plot(x,y, type=‘l’)  xを横軸、yを縦軸にとった折れ線グラフを描画する。type='l'で折れ線を指示する。 > }  forループの範囲を終わる。 こんな感じで。

Erdbeerkegels
質問者

お礼

回答ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • c言語

    c言語で写真の課題を出されたのですが自分のプログラムでは上手くいきません。どこが間違っているのか教えて欲しいです。 自分のプログラム #include<stdio.h> #include<math.h> int main(){ int i,j; double c,d,x,y,z; for(i=0;i<=360;i++){ c=10*cos(i*M_PI/180); d=10*sin(i*M_PI/180); if(c>=0 && d>=0){ for(j=0;j<=1000;j++){ x=0.001*j; y =x*d/c; z=1-x*x-(sqrt(x)+y)*(sqrt(x)+y); if(z<=0.0){break;} } } if(c<=0 && d>=0){ for(j=0;j<=1000;j++){ x=-0.001*j; y=x*d/c; z=1-x*x-(sqrt(-x)+y)*(sqrt(-x)+y); if(z<=0.0){break;} } } if(c<=0 && d<=0){ for(j=0;j<=1000;j++){ x=-0.001*j; y=x*d/c; z=1-x*x-(sqrt(-x)+y)*(sqrt(-x)+y); if(z<=0.0){break;} } } if(c>=0 && d<=0){ for(j=0;j<=1000;j++){ x=0.001*j; y=x*d/c; z=1-x*x-(sqrt(x)+y)*(sqrt(x)+y); if(z<=0.0){break;} } } printf("x=%lf y=%lf z=%lf\n",x,y,z); } return(0); }

  • 式をC言語で立てれません

    式をC言語で立てれません 式をC 言語で立てれません こんにちは。私は今実験で円板振動子の中心軸上の音圧分布を求めています。 そこで写真のような図をプロットするために与えられた式をC言語で書いています。 式の詳細は P/2ρcV = |sinπ(√(r/λ)^2 + (a/λ)^2)(√はここまで)-(r/λ))| です。 しかしうまくプロットできません。 プログラムは ------------------------------------- #include <stdio.h> #include <math.h> #define F 120 //周波数(Hz) #define C 1500 //音速(m/s) #define A 0.2 // 半径(m) int main() { double x, m, s, p, o, w, l; int i; for (i=0; i<100; i++) { x= (double)i; //観測点までの距離を表しました。距離が変化することで音圧が変わるためです。 l = C/F; //λをlとして音速÷周波数で定義できます。 m = x/l; //x軸です。 o = m*m + (A/l)*(A/l); //式のsinの中身です。 s = sin(M_PI*(sqrt (o) - m)); //sin全体を定義します。 w = fabs(s); //sin全体を絶対値に置き換えます。 p = w; //新しい変数に入れます。 printf("%9.9f %9.9f\n", m, p); } return 0; } ------------------------------ といった感じです。先生からはx軸のプログラムだけいじれば勝手に y軸も出てくるとヒントを頂いているのでx軸についてのプログラムを 書いています。コンパイルはできても写真のようにいきません。 半径やλや周波数はa/λ=2.5と書いてあったので値は推測です。 C言語はあまり得意ではないので困っています。 お分かりになる方、ご教授お願い致します。 ※式が間違っていたので新しく質問します。

  • 式をC言語で立てれません

    式をC言語で立てれません こんにちは。私は今実験で円板振動子の中心軸上の音圧分布を求めています。 そこで写真のような図をプロットするために与えられた式をC言語で書いています。 式の詳細は P/2ρcV = |sinπ(√(r/λ)^2 + (a/λ)^2)(√はここまで)-(r/λ)^2)| です。 しかしうまくプロットできません。 プログラムは ------------------------------------- #include <stdio.h> #include <math.h> #define F 120 //周波数(Hz) #define C 1500 //音速(m/s) #define A 0.2 // 半径(m) int main() { double x, m, s, p, o, w, l; int i; for (i=0; i<100; i++) { x= (double)i; //観測点までの距離を表しました。距離が変化することで音圧が変わるためです。 l = C/F; //λをlとして音速÷周波数で定義できます。 m = x/l; //x軸です。 o = m*m + (A/l)*(A/l); //式のsinの中身です。 s = sin(M_PI*(sqrt (o) - m)); //sin全体を定義します。 w = fabs(s); //sin全体を絶対値に置き換えます。 p = w; //新しい変数に入れます。 printf("%9.9f %9.9f\n", m, p); } return 0; } ------------------------------ といった感じです。先生からはx軸のプログラムだけいじれば勝手に y軸も出てくるとヒントを頂いているのでx軸についてのプログラムを 書いています。コンパイルはできても写真のようにいきません。 半径やλや周波数はa/λ=2.5と書いてあったので値は推測です。 C言語はあまり得意ではないので困っています。 お分かりになる方、ご教授お願い致します。

  • 数値解析(MATLAB)について

    vehi=[0,1,1,-1,-1,0;2,1,-1,-1,1,2]; plot(vehi(1,:),vehi(2,:));axis equal;axis([-15 15 -15 15]); [x,y]=ginput(1); hold on;plot(x,y,'p');hold off; [x1,y1]=ginput(1); hold on;plot([x x1],[y y1]);hold off; theta=atan2(y1-y,x1-x)-pi/2; R=cos(theta),-sin(theta);sin(theta),cos(theta)]; newvehi=R*vehi; hold on;plot(newvehi(1,:)+x,newvehi(2,:)+y);hold off このプログラムは実効したんでどのようになるかは分るんですが、講義で、プログラムの説明がされなかったので、全然意味が分りません。 vehiって何ですか? ginput(1)って何をしているんですか?(1)の意味って何ですか? hold onは何をしているんでしょうか? plot(x,y,'p')は何をしているんですか?pって何ですか? hold offで何をしてるんですか? theta=atan2(y1-y,x1-x)-pi/2は何をしているんですか?atan2って何ですか?アークタンジェント2? plot(newvehi(1,:)+x,newvehi(2,:)+y)って何をしてるんですか? ほとんど意味が分りません。特に、atan2とかは意味不明です。 それぞれが何をしているのか順序を追って説明をお願いします。 分りやすい解説をお願いします。

  • グラフの描き方

    Q、キーボードからnの値を読み込み、r=sin(nθ)で表される曲線のグラフをかけ。 ヒント、x=rcosθ、y=rsinθと与えられた式で(x、y)とすればいい。また、θは度の単位で0°から360°まで計算すればよい。 この問題で、、、 SET WINDOW -1.1,1.1,-1.1,1.1 INPUT n FOR i=0 to 360 STEP 10 x=cos(n*θ*PI/180) y=sin(n*θPI/180) PLOT LINES:x,y; NEXT i END これのどこがおかしいでしょうか? おねがいします。

  • C言語からgnuplot呼び出し

    C言語からgnuplotを呼び出したいのですが、一瞬表示されてすぐ消えてしまいます。 プログラムは以下のように書きました。 --------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <math.h> int main(int argc, char **argv) { FILE *gid; int i; double x; gid=popen("gnuplot -persist","w"); for (i=0; i<100 ;i++){ x = 0.03*i; fprintf(gid,"plot sin(x-%f*pi)\n",x); } pclose(gid); } --------------------------------------------------------------- この後、 gcc test.c -lm ./a.out でコンパイル、実行しました。 かなり初心者なので初歩的な質問かもしれませんがよろしくお願いします。

  • MATLABで円の投影データの作成

    単位円をx軸に投影するプログラムを作るのですが。 ラジアンをt=(0:100)*2*pi/100で設定し、x=cos(t),y=sin(t)をplot(x,y)で円をプロットするところまではできたのですが。 この後、radonというコマンドを使って投影をするそうなのですが、そっから先に進みません。いろいろなサイトを調べたのですが、radonの使い方が分からないのです。すいません、よろしくいお願いします。

  • Matlabでsinカーブを作成の方法(合成して)

    毎度お世話になります。 sin波形の描き方について、教えてください。 最初の1サイクルの波形はsin(2*pi*f*t)で描き次のサイクルの 波形はsin(2*pi*2*f*t)と言う様に、サイクルごとに周波数が 増加する関数をつくり、plot(t,y)で描画したいのですが、 その技法がわかりません。 下記は、途中のプログラムですが、考え方が まったく間違っている様です(無視してください) ーーーーーーーーーーーーーーーーーーーーーーー %draw sweep wave t1=0:pi/16:2*pi;  y1=sin(t1); ;----- t2=2*pi:pi/16:4*pi; y2=sin(t2); ;----- t=t1::t2;  ;t2をt1の後に連結したし y=y1::y2; ;y2をy1の後に連結したし plot(t,y);

  • matlabできる方教えてください

    matlab初心者です。 入力信号(sin波)に階段波形をかけるプログラムをかきたいのですが、うまくいきません。 以下は、私がかいたプログラムです。 わかる方がいらっしゃいましたら回答宜しくお願いします。 clear all;close all; fs= 250; t_l=[0 1]; t=t_l(1)+1/fs:1/fs:t_l(2); X = sin(2*pi*2*t); Y = sin(2*pi*10*t); Z = stairs(X).*Y; figure stairs(t,Z)

  • c言語 パスカルの三角形

    c言語でパスカルの三角形を出力するプログラムを作りたいのですが、上手くいきません。 何を直せばいいのか教えてください。 #include <stdio.h> #define N 10 int main(void){ int i, j = 1, x, y; int d[N][N]; /* 三角形を作成 */ for (i = 1 ; i < N ; i++){ d[i][0] = 1; while (j <= i - 1){ d[i][j] = d[i-1][j-1] + d[i-1][j]; j ++; } } /* 三角形の表示 */ for (y = 0; y < N; y++) { for (x = 0; x < N-y; x++) printf(" "); for (x = 0; x < y; x++) printf("%3d ", d[x][y]); printf("\n"); } return 0; } 実行結果 -2147417616 2665208 1629976532 1627572249 1629101723 1 1629982744 2665256 2665548 3407923 1629345053 1627571017 0 3538997 1629739051 10 1629345053 2665368 3670071 2665384 1629739040 1627927140 2665244 1628040295 57 1628810863 1629476960 1628602749 2665560 2665304 1629345053 0 1629739040 1629740576 1628992224 2 4411498 1628040588 -2147417600 0 1629476960 1629740664 1629739040 1 267574 0