2008年07月27日

三角関数などの根を小さい方から順に求める[Maxima]

前回RでやったのをMaximaで。

root:[0,0,0,0,0,0,0,0,0,0];
f(x):=cos(x)*(x*3);
myfindroot(f):=block([j:0,a:0.1,k:0],
 loop,k:k+1,
 for i:1 while f(j)*f(j+a)>0 do(a:a+0.1),
 root[k]:find_root(f(x),x,j,j+a),
 j:root[k]+0.1,
 if k=10 then return(root),
 go(loop));

前回は関数のエラーを利用していてスマートじゃなかったのでちゃんと符号を見て関数を使うようにした。 まーでも範囲を0.1ずつ増やしているので、0.1の範囲にいくつも根があると見逃してしまうだろう。もっと上手い方法はないものかしら。

しかしMaximaは使い方がよくわからないなー。一冊くらい本を買って勉強しないとだめかな。 Rみたいに任意の長さのベクトルをパッと作る方法は無いんだろうか。あとエディタからパッと命令を送る方法は無いんだろうか。 エディタをいじらないと駄目な気がしているけどどうなんだろう。やっぱRが一番使いやすいなー。

posted by Rion778 at 21:50 | Comment(0) | TrackBack(0) | 勉強ノート | このブログの読者になる | 更新情報をチェックする
2008年07月21日

読んでないのに本棚に入れた本がいくつあるだろう

気分が優れないのは大抵部屋が汚いせいなので、朝から住居の掃除と部屋の片付けなどをしていた。 やばい事になっていた水槽の掃除も行ったので、幾分気分がすっきりした。

ついでに部屋の物品の配置変更を行った。最近テレビをあまり見なくなったので、 テレビを見にくい位置に移動させて代わりににラジオを引っ張り出してみた。しかしながらラジオもどうも面白くない。 まあ視線を向ける必要性のないだけテレビよりましか。見なければ、聞かなければいいとは思うけれど、 部屋にいくらかの騒がしさが欲しいときはしばしばあるので仕方ない。

ところで、狭い部屋の中のいたるところに配置されていた読みかけの本を集めて積んでみたら思ったより大変なことになった。

DSC00095_R

読みかけといえばまだ聞こえがいいが、どう考えても読まない(読めない)本がちらほら。「一般理論」なんて読めるわけないだろ… なんで買ったんだろ。

posted by Rion778 at 02:18 | Comment(0) | TrackBack(0) | diary | このブログの読者になる | 更新情報をチェックする
2008年07月16日

三角関数などの根を小さい方から順に求める[R]

当たり前の話だけど,三角関数なんかは何度も何度もy=0を通る.つまり,y=0に対応するxの値というのは無限に存在する.これを小さいほうから順に求めていく方法がほしかった.

が,結局良く分からなかったのでかなーり無理やりなやり方でどうにかすることとした.

f <- function(x) sin(x)
f_root <- numeric(10)
j <- 0
for(i in 1:10){
	while(F==is.vector(try(uniroot(f, c(j,j+1))$root,T))){
		j <- j+0.1
		if(is.vector(try(uniroot(f, c(j,j+1))$root,T))){
			f_root[i] <- try(uniroot(f, c(j,j+1))$root,T)
			}
		}
	j <- f_root[i]+0.1
	}
f_root
f <- function(x) sin(x)
f_root <- numeric(10)
j <- 0
for(i in 1:10){
	a <- 0.1
	while(F==is.vector(try(uniroot(f, c(j,j+a),tol=1e-10)$root,T))){
		a <- a+0.1
		}
	f_root[i] <- uniroot(f, c(j,j+a),tol=1e-10)$root
	j <- f_root[i]+0.001
	}
f_root

(2008/7/17 修正,前回のは全然正しくなかった.if文をwhile文の中に入れる必要性がさっぱりわからない.寝ぼけてたとしか.)

最初に目的の関数をfとして作成する(この場合sin).

次に求めたい根の個数だけの長さの入れ物を作る(続くfor文での繰り返し回数とそろえる).

そして関数の最初の点を決定する.

実行.f_rootの中に根が収納される.

いいのかこんなんで?

エラーを無視させて無理やり処理を継続させたり,繰り返しの中で繰り返しを使ったりとかなり汚い感じ.きっと変な関数入れたら止まらなくなるんじゃないだろうか.正の方向へ十分な個数の根を持たない関数入れたら止まらないのは明らかだしなー.

まあ自分が使う範囲なら問題なく動くのでいいか.使用注意.

posted by Rion778 at 21:06 | Comment(0) | TrackBack(0) | PC関連。HTMLとか,Linuxとか,Rとか | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。