【無料】家で簡単プログラミング ~その4 y = x² を図示してみよう~
どうも、おはこんばんにちは、ぽんぽこりん(@ponpokorin_24)です。
家で簡単プログラミング第4回です。1~3回へはそれぞれ、以下のリンクから飛べます。
その1 そもそもプログラミングとは?
その2 Rを使ってみよう
その3 Rを使ってみよう2
今回もRを使っていこうと思いますので、もしその1を見ていない方は、そちらを先にご覧ください。
さてさて。
今回はちょっと数学の勉強にも使えるようなプログラムを書いてみようと思います。具体的には「任意の関数のグラフを出力する」ことが目標です。なんだか難しそう…と思うかもしれませんが、これまでと同じく慣れれば大丈夫です。
一応流れはこんな感じでやっていきます。
始める前に、少々注意をば。コマンドをコピペして使うのは全然問題ないのですが、見やすくするために全角スペースが混ざっていることもあるので、面倒な英語とか以外は自分で書いてみることをオススメします。
R source(http://cse.naro.affrc.go.jp/takezawa/r-tips/r.html)で探してみます。
グラフィックス編のところに「とりあえずplot()」という節がありますね。ここを見てみましょう。グラフを出力する方法が書いてありますね。どうも plot に引数として、「y = (関数)」にした関数を与えればグラフを描いてくれるようです。意味不明な部分もあると思いますが、とりあえずR Consoleで試してみましょう。
func1 <- function(x) x # y = x
func2 <- function(x) x^2 # y = x^2
plot(func1)
plot(func2)
描けてますね。ここで function(x) x の書き方に?と思った方も多いのではないでしょうか。その直感は正解です。これは省略した書き方なんです。真面目に書くと、
func1 <- function(x) {
x
}
こんな感じです。分かりにくいですが、2行目は分かりやすくするために、Tabキーを押して左に空白を作ってます。ちなみに
func1 <- function(x){
x }
でも同じです。
ただやっぱり、処理が1つだけだと仰々しい感じもしますよね。そこで用意された省略法が上のやり方で、{}の中の処理が1行で済む場合は{}を省いてfunction(x)の横に書くだけでOK、というものです。
これで、グラフを描くためのコマンドは分かったと思いますが、実はもうちょっと見栄えをよくできます。
習うより慣れよ、ということでどんどん書いてみましょう。先程の func2 を利用していきましょう。
plot(func2, col="red", xlim=c(-10, 10), ylim=c(-1, 10), xlab="xの値", ylab="x^2の値")
plot(func2) に比べるとずいぶん長くなりましたし、なんかごちゃっとしてますが、グラフの方はちょっと分かりやすい感じになったと思います。長くなった分の解説をしますと
さらに分かりやすくするために、こんな風にしてもいいかもですね。
plot(func2, col="red", xlim=c(-10, 10), ylim=c(-1, 10), xlab="xの値", ylab="x^2の値")
abline(v=0)
abline(h=0)
abline でx=0とy=0の軸が引けます。他にこんなのもあります。
plot(func2, col="red", xlim=c(-10, 10), ylim=c(-1, 10), xlab="xの値", ylab="x^2の値", tck=1)
以上でカスタマイズについてのお話しは終わりにしようと思います。が、複数のグラフを描く時の凡例や、折れ線グラフにする時のポチの形などをカスタマイズすることもできます。もし興味があれば調べてみてください。これについてもR sourceにグラフィックスパラメータ(壱)、(弐)という節があり、詳しい説明が載っています。参考までに。
疲れたのなら一旦休憩しましょう。つぎで最後です。
簡単に言えば、for文は繰り返し処理、if文は条件別に違う処理を行うためのものです。これについてもまず試してみましょう。先にエディタに書いておくのをおすすめします。
# for文
x <- 0
for(i in 1:3){
x <- x + i
}
x # 6になります
# if文
x <- 2
if(x==2){
x <- x+2
print(x)
}else{
x <- x-1
print(x)
}
どうでしょうか?なんとなくどんな処理をしているのか分かりましたか?解説します!
if(x==2)以下の{}の中は、はもし(if)x==2 なら x <- x+2 と print(x) をするということで、else以下の{}の中はそうでないなら(x==2 でないなら)x <- x-1 と print(x) をするということを表しています。else の挙動もチェックするために、xを3とか4とかに変えて実行してみてください。
print は表示するためのコマンドです。
このうち、for文を利用すればさっきグラフ化したy=x²を描くことができます。以下のコマンドが一例になります。
x <- seq(-100,100)
y <- c()
for(i in -100:100){
y[i+101] <- i^2
}
plot(x, y, col=2)
これで十分に分かりますが、この点を滑らかに線で表現することもできます。
plot(x, y, col=2, type="l") # Lの小文字です
ここで使ったコマンドは今まで紹介したものだけでできています。ちょっと休憩もしつつ、ぜひ自分でもかけるように、各コマンドの使い方を思い出してみてください。きっと力になるはずです。
他にも、自分がやりたい処理があった時に適切なコマンドがなければ、または見つからなければ、for文・if文を使って自作することもあります(その5でやるつもりです)。なので、ぜひ他の基礎的なコマンドとともにfor文・if文にも慣れ親しんでみて下さい!
便利だ、為になったと思っていただけたなら、SNSなり学校なりで紹介していただけると著者は喜びます
それでは~
その5はこちら(書けたらリンク貼ります)
頑張って上でグラフを描きましたが、wolframalpha というサイトでは様々な数学の計算・描画をコンピューターでやってくれます。ちょっと読み込みが遅いのが玉に瑕ですが、自分の描いたグラフの確認や、方程式の解の確認などに使えます。一度見てみては?
家で簡単プログラミング第4回です。1~3回へはそれぞれ、以下のリンクから飛べます。
その1 そもそもプログラミングとは?
その2 Rを使ってみよう
その3 Rを使ってみよう2
今回もRを使っていこうと思いますので、もしその1を見ていない方は、そちらを先にご覧ください。
さてさて。
今回はちょっと数学の勉強にも使えるようなプログラムを書いてみようと思います。具体的には「任意の関数のグラフを出力する」ことが目標です。なんだか難しそう…と思うかもしれませんが、これまでと同じく慣れれば大丈夫です。
一応流れはこんな感じでやっていきます。
- グラフを描くコマンド
- グラフを描く時にいじれるもの
- for文、if文を使って自力で描いてみる
- 最後に
始める前に、少々注意をば。コマンドをコピペして使うのは全然問題ないのですが、見やすくするために全角スペースが混ざっていることもあるので、面倒な英語とか以外は自分で書いてみることをオススメします。
グラフを描くコマンド
早速、関数をグラフにしてくれそうなコマンドを探してみましょう。R source(http://cse.naro.affrc.go.jp/takezawa/r-tips/r.html)で探してみます。
グラフィックス編のところに「とりあえずplot()」という節がありますね。ここを見てみましょう。グラフを出力する方法が書いてありますね。どうも plot に引数として、「y = (関数)」にした関数を与えればグラフを描いてくれるようです。意味不明な部分もあると思いますが、とりあえずR Consoleで試してみましょう。
func1 <- function(x) x # y = x
func2 <- function(x) x^2 # y = x^2
plot(func1)
plot(func2)
描けてますね。ここで function(x) x の書き方に?と思った方も多いのではないでしょうか。その直感は正解です。これは省略した書き方なんです。真面目に書くと、
func1 <- function(x) {
x
}
こんな感じです。分かりにくいですが、2行目は分かりやすくするために、Tabキーを押して左に空白を作ってます。ちなみに
func1 <- function(x){
x }
でも同じです。
ただやっぱり、処理が1つだけだと仰々しい感じもしますよね。そこで用意された省略法が上のやり方で、{}の中の処理が1行で済む場合は{}を省いてfunction(x)の横に書くだけでOK、というものです。
これで、グラフを描くためのコマンドは分かったと思いますが、実はもうちょっと見栄えをよくできます。
グラフを描く時にいじれるもの
最初におおまかにカスタマイズできるものを例に挙げると- 色
- 表示範囲
- 軸の名前 etc...
習うより慣れよ、ということでどんどん書いてみましょう。先程の func2 を利用していきましょう。
plot(func2, col="red", xlim=c(-10, 10), ylim=c(-1, 10), xlab="xの値", ylab="x^2の値")
こうなると思います |
plot(func2) に比べるとずいぶん長くなりましたし、なんかごちゃっとしてますが、グラフの方はちょっと分かりやすい感じになったと思います。長くなった分の解説をしますと
col
お分かりの方もいると思いますが、color(色)です。上のように "red" と指定したり規定の番号で指定することもできます。たとえば col=2 でも赤を指定できます。xlim・ylim
これはx軸・y軸それぞれののlimit(限界)の指定です。見やすいように指定しましょう。注意としては=の後にはc(下限, 上限)の形で書くことです。xlab・ylab
こちらはx軸・y軸それぞれのlabel(ラベル)の指定です。こっちは=の後に""で括った文字を入れます。さらに分かりやすくするために、こんな風にしてもいいかもですね。
plot(func2, col="red", xlim=c(-10, 10), ylim=c(-1, 10), xlab="xの値", ylab="x^2の値")
abline(v=0)
abline(h=0)
こんな感じになるはず |
abline でx=0とy=0の軸が引けます。他にこんなのもあります。
plot(func2, col="red", xlim=c(-10, 10), ylim=c(-1, 10), xlab="xの値", ylab="x^2の値", tck=1)
こっちは格子状に |
以上でカスタマイズについてのお話しは終わりにしようと思います。が、複数のグラフを描く時の凡例や、折れ線グラフにする時のポチの形などをカスタマイズすることもできます。もし興味があれば調べてみてください。これについてもR sourceにグラフィックスパラメータ(壱)、(弐)という節があり、詳しい説明が載っています。参考までに。
疲れたのなら一旦休憩しましょう。つぎで最後です。
for文、if文を使って自力で描いてみる
正直、当初の目標「任意の関数のグラフを出力する」は上で紹介したコマンドだけで十分に達成しているのですが、このままではちょっと内容が少ない感じがしたので、for文・if文についてもやってみましょう!簡単に言えば、for文は繰り返し処理、if文は条件別に違う処理を行うためのものです。これについてもまず試してみましょう。先にエディタに書いておくのをおすすめします。
# for文
x <- 0
for(i in 1:3){
x <- x + i
}
x # 6になります
# if文
x <- 2
if(x==2){
x <- x+2
print(x)
}else{
x <- x-1
print(x)
}
どうでしょうか?なんとなくどんな処理をしているのか分かりましたか?解説します!
for文
まるっと全体で何をやっていたのか書きます。- 一番最初xは0ですが、まずiに1が入り、x <- x + i が実行されます。そうするとxは1に更新されます。
- つぎにiに2が入り、再び x <- x + i が実行されます。するとxは3に更新されます。
- 最後にiに3が入り、またまた x <- x + i が実行されます。xは6に更新されてfor文終了。
i in 1:3 は1から順に3までの整数をiに代入しながら、という意味だったわけです。こういった処理をすることからfor文はforループと呼ばれることもあります。
if文
同じようにif文の処理についてもまるっと書きます。こっちの方が分かりやすいと思います。if(x==2)以下の{}の中は、はもし(if)x==2 なら x <- x+2 と print(x) をするということで、else以下の{}の中はそうでないなら(x==2 でないなら)x <- x-1 と print(x) をするということを表しています。else の挙動もチェックするために、xを3とか4とかに変えて実行してみてください。
print は表示するためのコマンドです。
このうち、for文を利用すればさっきグラフ化したy=x²を描くことができます。以下のコマンドが一例になります。
x <- seq(-100,100)
y <- c()
for(i in -100:100){
y[i+101] <- i^2
}
plot(x, y, col=2)
これで十分に分かりますが、この点を滑らかに線で表現することもできます。
plot(x, y, col=2, type="l") # Lの小文字です
完全体 |
ここで使ったコマンドは今まで紹介したものだけでできています。ちょっと休憩もしつつ、ぜひ自分でもかけるように、各コマンドの使い方を思い出してみてください。きっと力になるはずです。
最後に
今回はどうだったでしょうか?あんまり面白くなかったかもしれませんが、数学の課題には役立つことでしょう(もちろん答えの確かめにですよ?)。また、最後にやったfor文のところは意外と大事です。Rだけでなく多くのプログラミング言語でも、基礎的なコマンドとfor文やif文を組み合わせて様々なコマンドが作られています。他にも、自分がやりたい処理があった時に適切なコマンドがなければ、または見つからなければ、for文・if文を使って自作することもあります(その5でやるつもりです)。なので、ぜひ他の基礎的なコマンドとともにfor文・if文にも慣れ親しんでみて下さい!
便利だ、為になったと思っていただけたなら、SNSなり学校なりで紹介していただけると著者は喜びます
それでは~
その5はこちら(書けたらリンク貼ります)
おまけ
ここまで読んでくれた方にちょっと便利なサイトをご紹介。頑張って上でグラフを描きましたが、wolframalpha というサイトでは様々な数学の計算・描画をコンピューターでやってくれます。ちょっと読み込みが遅いのが玉に瑕ですが、自分の描いたグラフの確認や、方程式の解の確認などに使えます。一度見てみては?
コメント
コメントを投稿