2006-06-16
■ [その他]カラーコーディング

はてなグループにおけるスーパーpre記法の拡張について - はてなグループ日記 - 機能変更、お知らせなどより
「はてなスーパーpre記法」が拡張されて自動で色がつくようになった。matlabにも対応していて、うん、便利…と思ったら色合いが。文字列、コメント、ファンクションなど。styleタグとか見るとkwikiとかの機能からなのかな?英語も勉強しなくちゃ。
■ [Matlab]じゃあfevalってどうなのよ。

no titleより
「昨日」の続き。以前まではfeval
は関数ハンドルを評価する唯一の方法だったけど、R14からはそんなことなくなってるから、別に使わなくても良いんじゃね?だそうだ。
関数ハンドルわかんね。
以前の書き方
function y = halfcircle(fun,n) if nargin < 2 n = 20; end y = feval(fun, 0:pi/n:pi);
ys = halfcircle(@sin); yc = halfcircle(@cos);
R14以降
function y = halfcircle(fh,n) if nargin < 2 n = 20; end y = fh(0:pi/n:pi);
ys = halfcircle(@sin); yc = halfcircle(@cos);
だけど
feval
を使うとただの文字列だって関数として評価できる。
fn = 'sin'; y = feval(fn, 0:pi/3:pi);
まぁそんな感じ。
kiri-no2006/06/28 01:58がおー
2006-06-15
■ [Matlab]evalは使うべきではない

no titleより
eval
を使うべきでない理由
eval
は Code Clarity / Readability, Efficiency, Analyzability の点から使うべきでは無い。
eval
を使った文は読みづらく、流れを追いにくい。そのため解析もしづらくなる。
また、Matlab ではコードを実行する際に、コードを内部コードに変換してから実行する。再度コードが実行される際、コードになんの変更もなかった場合その変換作業は省かれる。しかし、文中でeval
が使用されていた場合は、同一性が保証されないため、毎回変換作業が必要となり、そのために効率性に欠ける。
evalを避けるテクニック
- command の代わりに functional form を使う
- 名前付けされた変数では無く、その名前をフィールドに持つ構造体を使う。このとき動的フィールド参照が有効
-
str2func
をつかう
functional formってのはスペースでコマンドを分けるのでは無く()を使えってことかな。
例えば
a) save mydata.mat x y z b) save('mydata.mat',x,y,z)
a)でなくb)と書く、とか。a)の場合はsave
に続くものがすべて文字列扱いされてしまうけどb)の場合はそうではないから柔軟な書き方が可能である、ってことか。
str2funcは文字列を引数に、その関数ハンドルを出力するみたい。関数ハンドルはよく分からない。
str2func
目的
関数名文字列から関数ハンドルを作成
表示
fhandle = str2func('str')
詳細
str2func('str')
は、文字列'str'
の中で名付けられた関数に対して、関数ハンドルfhandle
を作成します。@function シンタックス、または、コマンド
str2func
のいずれかを使って、関数ハンドルを作成できます。 この演算を文字列のセル配列に適用することもできます。 この場合、関数ハンドルの配列が戻されます。
また、続く「no title」では構造体を使え、と述べている。fieldnames
と、動的フィールド参照を使えば良いじゃない、って感じ。また、.matファイルからのデータのロードも構造体としてロードできる。
MyData = load('data.mat');
2006-06-14
■ [processing.org]「プレゼンテーション法」より (4) 基本技法を用いた描画(2)

// 変数の宣言 int i, w, h, step, c; color cl; // 初期設定 w = 400; h = 400; step = 4; // 描画域の用意 size(w,h); background(0); // w/step = 400/4本のラインを引く for(i=0; i<w/step; i++){ // ライン色の設定 cl = color(255/(w/step)*i, 32, 255-255/(w/step)*i, 50); stroke(cl); line(0,i*step, i*step,h); //始点(上端, t), 終点(t, 下端) line(w,i*step, i*step,0); //始点(右端, t), 終点(t, 左端) }
こんな単純な式でもこんなに美しい。数式によるアーティスティックな表現が簡単にできる、って言うただこの一点だけでも、十分にprocessingを使う価値があると思う。
しかし、processingで外部ライブラリを用いることなく扱える数学演算はごくわずか。
ここでの数式はプログラム中にも書いてあるけど、始点 (0,t) , 終点 (t,400) の直線と、始点 (400,t), 終点 (t, 0) の直線をそれぞれ t を 0 から 4 刻みで 400 まで。
描画のところをちょっとだけ変えて描画。
int i, w, h, step, c; color cl; w = 400; h = 400; step = 2; size(w,h); background(0); for(i=0; i<w; i++){ cl = color(255/(w/step)*i, 32, 255-255/(w/step)*i, 50); stroke(cl); line(0,w*sin(i*step), h*cos(i*step),h); line(w,w*cos(i*step), h*sin(i*step),0); }
こちらは,始点 (0, 400*sin(t)), 終点 (400*cos(t), t) の直線と、始点 (t, 400*cos(t)), 終点 (400*sin(t), 0) の直線をそれぞれ t を 0 から 1 刻みで 400 まで。400 は描画領域のサイズ.
2006-06-13

■ [その他]キーワードでのリンク集・TODO

今のところ「リンク集:hoge」と言う形で準備してるけど,カテゴリーリンクと同様に「link::hoge」とする方が良いかも.
そしてこういうTODOはアシカを使えば良いかと.
■ [メイデル][苗床]伺か・プチまとめ (at 2006-5-23)

オリジナルの伺かは人工無脳としては基本的な辞書応答系を取る。伺かのユニークな所は2個体あるいは複数個体を1単位とする事で、個体間のコミュニケーションを基本とした事が挙げられる.これにより、人間の関与圧力が減り、また予測の範囲内で応答を行なうため、自然な応答が可能となる.
初期人工無脳の進化を辿るようにアクセサリ/アシスタントとしての様々な機能(ToDO、天気予報、占いなど)を備えて行ったりしているように見受けられる./ この文未完.
現状ではSHIORIが簡易プログラミング環境&API群となっている、のかな?これによって結構色々な事が可能になってるようだ.
2006-06-12
■ [processing.org]Stroke/ラインのプロパティを指定する各種メソッド

目次
- [processing.org]Stroke/ラインのプロパティを指定する各種メソッド
- stroke()
- これはナニ?
- 文法
- 引数
- 例
- noStroke()
- これはナニ?
- 文法
- 引数
- 例
- strokeWeight()
- これはナニ?
- 文法
- 引数
- 例
- strokeJoin()
- これはナニ?
- 文法
- 引数
- 例
- strokeCap()
- これはナニ?
- 文法
- 引数
- 例
- [その他]日誌的/昨日の続き
「プレゼンテーション法(3) - 雲雀は高く空を舞い - ひよこの会」にてラインを引くデモを示した。ここではライン関係の関数を紹介する。
ここではProcessingリファレンスより、Stroke・ラインに関するメソッドを紹介する。なお,ここで記述はProcessing 1.0(BETA)に基づくものであり,バージョンの違いにより異なった挙動を示す可能性がある事に注意すること。
Language (API) リファレンス / Processing 1.0 (BETA)
stroke()
これはナニ?
ラインや図形の境界線の色を指定する関数。指定される色のモードは、現在のcolorMode()
によってRGBかHSBになる。デフォルトのカラースペースはRGBであり,各色の範囲は0から255である。
文法
stroke(gray)
stroke(gray, alpha)
stroke(color)
stroke(value1, value2, value3)
stroke(value1, value2, value3, alpha)
引数
- gray
- グレイスケール。整数(int)あるいは浮動小数(float)
- alpha
- 線のアルファ値(透明度)。 整数(int)あるいは浮動小数(float)
- color
- color変数。color変数として宣言されてれば何でも(多分)
- value1
- 赤(Red)あるいは色相(Hue)。現在のカラーモードによる。整数(int)あるいは浮動小数(float)。
- value2
- 緑(Green)あるいは彩度(Saturation)。現在のカラーモードによる。整数(int)あるいは浮動小数(float)。
- value3
- 青(Blue)あるいは明度(Brightness)。現在のカラーモードによる。整数(int)あるいは浮動小数(float)。
…めいどと入力すると,メイドと変換される…。
例
stroke(153); line(30, 20, 85, 95);
stroke(204, 102, 0); line(30, 20, 85, 95);
noStroke()
これはナニ?
線と図形の境界線を引かなくする。もしnoStroke()
とnoFill()が共に呼ばれた場合,スクリーンには何も描画されない。
文法
引数
なし
例
noStroke(); rect(30, 20, 55, 55);
ちょっと例が分かりにくいね。
strokeWeight()
これはナニ?
線幅の指定。単位はpixel。これはP3Dレンダラーの元では機能しない(とか)
文法
strokeWeight(width)
引数
- width
- 線幅(pixels)。 整数(int)あるいは浮動小数(float)。
例
smooth(); strokeWeight(1); // Default line(20, 20, 80, 20); strokeWeight(4); // Thicker line(20, 40, 80, 40); strokeWeight(10); // Beastly line(20, 70, 80, 70);
strokeJoin()
これはナニ?
ラインの接続部分の形状を指定する.形状はMITER, BEVEL, ROUNDの三種類(例を参照)。
なお,この関数はP2D, P3D, OPENGLレンダラーの元では機能しない。
文法
strokeJoin(MODE)
引数
- MODE
- MITER, BEVEL, ROUNDのいずれか。例を参照。
例
smooth(); strokeWeight(10.0); strokeJoin(MITER); beginShape(LINE_STRIP); vertex(35, 20); vertex(65, 50); vertex(35, 80); endShape();
smooth(); strokeWeight(10.0); strokeJoin(BEVEL); beginShape(LINE_STRIP); vertex(35, 20); vertex(65, 50); vertex(35, 80); endShape();
smooth(); strokeWeight(10.0); strokeJoin(ROUND); beginShape(LINE_STRIP); vertex(35, 20); vertex(65, 50); vertex(35, 80); endShape();
strokeCap()
これはナニ?
線の端の形状を指定する.指定できる形状は四角か丸かちょい伸びの三種類(例を参照の事)。デフォルトの形状は丸(ROUND)。
なお,この関数はP2D, P3D, OPENGLレンダラーの元では機能しない。
文法
strokeCap(MODE)
引数
- MODE
- SQUARE, PROJECT, ROUNDのいずれか。例を参照.
例
smooth(); strokeWeight(12.0); strokeCap(ROUND); line(20, 30, 80, 30); strokeCap(SQUARE); line(20, 50, 80, 50); strokeCap(PROJECT); line(20, 70, 80, 70);
cat::processing.org, processing.org
processing, processing.org, proce55ing
■ [その他]日誌的/昨日の続き

岐阜大学 横田康成氏による信号処理の授業用テキスト.フーリエ変換、確率的信号処理、非定常信号処理、独立成分分析と網羅的にまとめられていてすばらしい.分量もかなりあり、その分丁寧にまとめられている.
京都大学 佐藤 亨氏による時変スペクトル信号処理の授業用ハンドアウト.レーダーの分野の方らしく、内容の濃いテキスト.ただ、これだけでは理解が難しかった.
京都大学 蘆田 宏氏によるもの.ガボール変換、ガボールウェーブレットなどに関して簡単な概説.
ガボール変換は短時間フーリエ変換を行なうにあたって、窓関数としてガウシアンを用いたもの.ガウシアンの使用により、短時間フーリエ変換では最良の時間-周波数解像度を得ることが出来る.
- Leon Cohen: Time-frequency distributions-a review. Proceedings of the IEEE, pp. 941-981, issue. 7, vol. 77, 1989 (バックアップ)
- Hlawatsch, F. Boudreaux-Bartels, G.F.: Linear and quadratic time-frequency signal representations. Signal Processing Magazine, IEEE, pp.21-67, vol. 9, issue 2, 1992 (バックアップ)
佐藤亨氏のテキストに参考文献として挙げられていたレビュー.1)は(多分)この分野の第一人者であるCohen氏によるもの.
Amazon.co.jpによると、Cohen氏の「時間-周波数解析」と言う本があるらしい.
http://www.amazon.co.jp/exec/obidos/ASIN/4254200927/503-2828858-1749531
一般化位相空間分布表現のクラスを概念化し、時間-周波数分布の代名詞同然となった「コーエンのクラス」の生みの親であるコーエン教授の著した、平易明瞭な物理数学テキスト。
Amazon.comにて"Cohen,Leon time frequency"で検索すると色々ヒット.ふーむ。
TutuEmpahToday anybody has an iOS device. iPads are so widespread that this has led to developing a tons of apps that provide servises such as games, entertainment playgrounds and others. To download any app a user must get an account at Apple Store. But not all apps are available there as they don't meet the Apple rules. To avoid this a new app was developed - TutuApp. This helper works on iOS run tablets and it has the biggest library of apps. We name a few: Pokemon Go, Spotify, Clash of Clans, Fortnite, Snapchat and many others. They come with zero ads and locked content! Whant to know more? Visit <a href=https://tutuapp-app.com/ios/>TutuApp iOS Download page</a> to download Tutu App for free on your iOS phone. Installation instructions for TutuApp Helper are available there.
2006-06-11
■ [その他]日誌的に。/時変信号処理

うまくまとめるところまで分かりきらなかったので。
時変信号処理は、時間によって性質が変わる様な信号。大雑把に言って。これに対する処理方法として、短時間フーリエ解析、とwavelet解析、と言うものがあるんだけど、その間を埋めるもの、として、コーエンのクラス?と言うものがあるとか。それに関する色々なんだけど、うーん、よく分からなかった。
追記。
定常信号(ずっと周期的な波が続く信号)に対して非定常信号というものがある。定常信号に対する解析手法としてフーリエ解析がある。これは、信号をサイン波の重ね合わせで表現することで、その信号の周波数を知りましょう、というもの。(大雑把に)
ところが、非定常信号だと、まぁ、色々良くないよね。と言うことで、例えばノイズがはいる様な信号に対して、確率信号処理、時間に応じて性質の変わる波に対して、時変信号処理、てのが考えだされた、と。
順番に、ある手法が考えだされたのは、以前までの手法のこう言うところがダメなのだ、というところを追いながら学習した方が分かりやすそう。
使った資料はあとでリンクを張る。
■ [Matlab]deal()

no titleより
cell配列や構造体の要素をそれぞれの変数に分配するには以前はdeal()関数を使うか,あるいは,loopを使用する必要があった.Matlab R14からは :
を使う事でそれが可能となった.
deal()
[Y1, Y2, Y3, ...] = deal(X) [Y1, Y2, Y3, ...] = deal(X1, X2, X3, ...)
:
を使ったdeal()
の実現
ここでセル配列Cと構造体Aを以下のように定義する.
C = {rand(3) ones(3,1) eye(3) zeros(3,1)}; A.name = 'Pat'; A.number = 176554; A(2).name = 'Tony'; A(2).number = 901325;
deal()
を使った要素の展開
[a,b,c,d] = deal(C{:}) [name1,name2] = deal(A(:).name)
これは以下のように実現される.
[a,b,c,d] = C{:} [name1,name2] = A(:).name
2006-06-10
■ [その他]至言

Learn from yesterday, live for today, hope for tomorrow. The important thing is not to stop questioning.
—Albert Einstein
過去に学び,今を生き,未来を望め.大事なことは問い続けることだ.問い続けることを止めないことだ.
- アルベルト・アインシュタイン (19世紀後半から20世紀前半を生きたユダヤ系ドイツ人男性)
■ [Ruby] ホームワーク

関数の定義方法 - 雲雀は高く空を舞い - ひよこの会の続き
404 Not Foundの演習問題
半径 r の円の面積を返す関数を定義せよ。
def sCircle(r = 1.0) pi = 3.141592654 return (r ** 2.0) * pi end
実行結果
irb(main):001:0> sCircle => 3.141592654 irb(main):002:0> sCircle(4) => 50.265482464 irb(main):003:0> sCircle(19843) => 1236985296.85021
立方体の体積を返す関数を定義せよ。
def vCube(w = 1.0, d = 1.0, h = 1.0) return w * d * h end
実行結果
irb(main):004:0> vCube => 1.0 irb(main):005:0> vCube(1,4) => 4.0 irb(main):006:0> vCube(6,2,48) => 576
円錐の体積を返す関数を定義せよ。
def vCone(r = 1.0, h = 1.0) pi = 3.141592654 return ( ( (r ** 2.0) * pi )* h ) / 3.0 end
実行結果
irb(main):007:0> vCone => 1.04719755133333 irb(main):008:0> vCone(3,24) => 226.194671088
原点から点 (x, y, z) までの距離を返す関数を定義せよ。
def distance(x = 0.0, y = 0.0, z = 0.0) return ( (x ** 2.0) + (y ** 2.0) + (z ** 2.0) ) ** 0.5 end
実行結果
irb(main):009:0> distance => 0.0 irb(main):010:0> distance(2,4,5) => 6.70820393249937 irb(main):011:0> distance(2) => 2.0
と
の値を表示する関数を定義せよ。
def exponent(a = 1.0, b = 1.0) return a ** b, b ** a end
実行結果
irb(main):001:0> exponent(4,3) => [64, 81]
2006-06-09
■ [Ruby]関数の定義方法

ここで関数とは、入力に対して出力を返すもの…大まかすぎる気がする。これでは、システムの様なものになってしまう。まぁいいや。
関数の定義はdef 関数名(仮引数,...) 〜 end
で行なう。ここで、仮引数は関数への入力となる変数。
関数定義の例
[復習] 関数の実行方法
関数の実行は
ruby function.rb
irb -r function.rb
関数定義の例
# x の3乗を返す関数 cube def cube(x) x**3 end # 2数の和を返す関数 sum def sum(x,y) # 複数の仮引数はコンマで区切る x + y end # 0 を返す関数 zero def zero # 仮引数がないときは省略可 0 end
これをファイルtest.rb
に保存して実行したのが以下。このとき、ファイルの改行方法をWindows式(CR+LF)かUnix式(LF)にすること。Mac式(CR)ではシンタックスエラーとなる。
$ irb -r test.rb irb(main):001:0> sum(43,243) => 286 irb(main):002:0> zero => 0 irb(main):003:0> cube(432) => 80621568 irb(main):004:0> sum(34,345) + cube(34) => 39683 irb(main):005:0> sum(43,zero) => 43 irb(main):006:0> cube(sum(4,3)) => 343 irb(main):007:0> exit
また、cube(4)
, sum(4,3)
は cube 4
, sum 4,3
のように( )
を省略する事もできる
デフォルト引数
仮引数にデフォルト値を設定する事で入力を省略する事が出来る。デフォルト値の設定はdef function(x, y=0) ... end
のように、「仮引数=デフォルト値」とする。また、このとき、引数は、デフォルト値のない引数、デフォルト値のある引数の順に記述する必要がある。
例
# 3数までの数値の和 sum def sum(x, y=0, z=0) x + y + z end # xのn乗根(省略すれば平方根)を返す関数 root def root(x, n=2) x ** (1.0 / n) end
実行結果
$ irb -r test.rb irb(main):001:0> sum(1,2) => 3 irb(main):002:0> sum(1,2,3) => 6 irb(main):003:0> sum(1) => 1 irb(main):004:0> root(3) => 1.73205080756888 irb(main):005:0> root(4,4) => 1.4142135623731 irb(main):006:0> exit
変数の有効範囲(スコープ)
ローカル変数は、それが定義された範囲内(def ~ end
やdo ~ end
など)でしか有効ではない。
x = 1 # (1) 変数 x の定義 # (2) def f(x) # (3) 仮引数 x の定義(?) y = 2 # (4) 変数 y の定義 y * x + y # (5) end # (6) # (7) def g(n) # (8) 仮引数 n の定義(?) n + 1 # (9) end # (A) # (B)
このような関数があった時にそれぞれ
(1)で定義されたx
は、 (1)(2)(7)(B)で有効
(3)で定義されたx
は、 (4)(5)で有効
(4)で定義されたx
は、 (5)で有効
(8)で定義されたx
は、 (9)で有効
ブロック内で定義された変数(ローカル変数)は、そのブロックをぬけると有効範囲を外れ、破棄される。一方、(1)のようにどのブロックにも属さない範囲(トップレベル)で定義されたローカル変数はプログラム終了まで残る。
ホームワーク
- 半径 r の円の面積を返す関数を定義せよ。
- 円錐の体積を返す関数を定義せよ。
- 立方体の体積を返す関数を定義せよ。
- 原点から点 (x, y, z) までの距離を返す関数を定義せよ。
-
と
の値を表示する関数を定義せよ。
2006-06-08
■ [その他]イメージファイルの投稿

イメージファイルの投稿をどうしようか。何が言いたいかというとフォトライフが使い辛い。フリーでのアップロード限度が3MB。さらに、アップロードした画像を自動で再圧縮してしまう。その結果、今日投稿した二枚のイメージは元が9KB, 8KBだったものがそれぞれ100KB弱となってしまった。
さて、どうしよう。
2) フォトライフの有料オプションか、グループの有料オプションを使う
3) 別のところにイメージだけアップロードする。
3)がbetterな気がするけど、めんどくさいのはいやだなぁ。とくにFTPなんてもう使いたく無い。
追記
画像はLivedoor Blogにアップロードすることにしました。
coco-log, fc2 blogも試したんだけど、これらは外部から画像読み込みできなかったので。coco-logはJAVAアプレットまで貼れる、fc2 blogはアレゲなデザインが多くてステキ、だったのに残念。
■ [信号処理]窓関数(2)

Type of window | Approx. transition width of main lobe | Peak sidelobe(dB) |
---|---|---|
Rectangular | -13 | |
Bartlett | -27 | |
Hanning | -32 | |
Hamming | -43 | |
Blackman | -58 |
以下、Rectangular window, Hanning window, Hamming windowについて。Chebychev, Kaiserについては後ほど。
Rectangular window
Rectangular | -13 |
メインローブ幅は狭いがサイドローブも大きい。そのため、ブロードな周波数特性を示す。(図はN=128のRectangular Window)
Hanning Window
Hanning | -32 |
(0 ≦ n ≦ N-1)
窓の両端が0となり、窓長と同じ長さの信号成分がスペクトルに反映しない。(図はN=128のHanning Window)
Hamming Window
Hamming | -43 |
(0 ≦ n ≦ N-1)
Hanning windowの境界効果を修正したもの。(図はN=128のHamming Window)
■ [その他]クネクネ

id:Agapeさんの「階段の登り方」の解答(id:Agape:20060608:1149788621)。良い考え方だと思います。解答の作り方(書き方)はこれから追々馴れていくと思いますし問題ないんじゃないかな、と思います。
13C2をTeXで書くとしたら、このように書くかなぁ。
[tex: _{13}C_2]
でも、13がいやに下にさがってしまって、ちょっとかっこわるいかも。
2006-06-07
■ [日誌]窓関数について

windowingはtime domainではスカラーのかけ算として、frequency domainではコンボリューションで表される.そのため重要なのはfilterと違ってフラット性とか急峻性ではない.コンボリューションであることを考えれば明らかだけど、特徴となるのは、メインローブの幅と、メインローブとサイドローブの大きさ比となる。まぁもちろんtime domainでの形状は大事ではあるんだけどさ.
つまり、メインローブの幅が狭ければ周波数分解能が高まり、メインローブとサイドローブの大きさ比が小さければ、小さいエネルギーのピークが埋もれることはなくなる.これは…トレードオフなのかな?
128点の窓関数を比較する.
窓関数 | mainlobe width (-3dB) | Relative sidelobe attenuation |
---|---|---|
Hamming | 0.0195 | -42.6 |
Hanning | 0.021 | -31.5 |
Rectangular | 0.013 | -13.3 |
http://www.cybernet.co.jp/matlab/support/manual/r14/toolbox/matlab/index.shtml
2006-06-06
■ [ruby]ふぃぼなっち(2)

下にかいたフィボナッチ数列を求める関数fib()
は再帰関数の例として。n が自然数で無いときのことを考慮してないけど、フィボナッチ数列の定義に沿った、いまの僕には割と自然な書き方かな。
再帰を使わないで繰り返しでやる方法もあるだろうし、他にも書き方はいくらでもあると思うので、これはあとでやる。
あと、再帰と繰り返しとどっちが早いんだろう、とか、もっと早くするには何か最適化できるんだろうか、とか思うけど、うーん。今のところよく分からん。
あ、一般項計算しちゃえよ、ていうのもあるか。
一般項については
http://chick.g.hatena.ne.jp/kiri-no/20060606/1149583529
にid:kiri-noがまとめてるので、そちらを参照のこと。
■ [ruby]ふぃぼなっち。

def fib(n) if n == 1 return 1 elsif n == 2 return 2 elsif n > 2 return fib(n-1)+fib(n-2) end end
skypeしてて話題に上ったので。n番目のフィボナッチ数列を求めるプログラム。
elseif
じゃなくてelsif
なのね。これに気がつかなくて、てどれだけ初歩的な、てか注意力の問題だよね。中身についてはまた後ほど。とりあえず、眠い。
15番目のフィボナッチ数が987
20番目のフィボナッチ数が10946
40番目のフィボナッチ数が……計算が終わりません。
追記2
40番目のフィボナッチ数は165580141でした。
Rubyで実行時間を計るには何を使ったらいいんだろね。
追記2
フィボナッチ数の定義は、F(1) = 1, F(2) = 1, F(n) = F(n-1) + F(n-2) だった。
2006-06-05
■ [信号処理]「ニューラルネット入門」より (1)

これは云々である.
だいぶ基本的なテキストぽい.
1. はじめに
略.
2. 最急降下法
多くの場合,学習とは,与えられた評価関数の最適化問題に帰着する.数多く存在する最適化手法のうち,ここでは最も簡単な最適化手法の1つである「最急降下法」について記す.
評価関数 を最小にする
を求める.
最急降下法は,ある適当な初期値から始めて,その値を繰り返し更新することにより,最適なパラメータを求める繰り返し最適化手法のうち最も基本的なものの1つである.
この方法におけるパラメータ更新は式(1)でなされる.
ここで は
回目の繰り返しで得られたパラメータ
の推定値で,
は学習係数と呼ばれる定数であり,
である.
が大きい場合、最適パラメータの周囲で値が振動あるいは発散してしまう可能性がある.一方,
が小さい場合,1回の更新ではパラメータの値がほとんど修正されず,最適なパラメータが求まるまでの繰り返し回数が多く必要となる.
ほーむわーく
以下の が最小の値を取る
を最急降下法を用いて求めよ
2006-06-04
■ [Ruby]数値と演算子

数値
整数
-255
=-0377
=-0xff
=-0XFF
それぞれ、10進数、8進数、16進数。8進数は0で始まり、16進数は0x/0Xで始まる。
083
, 0xG
などはsyntax errorになる。
booleanはあるのかな?
浮動小数
3.14
, .14
, 3.0
, 6.02e23
( = ),
5.1e-5
( = ),
6e-1
( = )
演算子
四則演算+α
-
+
- 加算
-
-
- 減算
-
*
- 乗算
-
/
- 除算 (整数÷整数の計算の答えは整数に丸められる)
-
%
- 除算で商を整数とした余り
-
**
- 累乗 (乗除算よりも優先される。また連続してある場合は後ろから実行される)
整数の非負整数乗は整数で、それ以外は浮動小数0**0
と0**0.0
は0
になるが、0.0**0
と0.0**0.0
はNaN
(Not a Number)(どういう意図で?)
インスタンスメソッド
数値.abs
- 数値の絶対値を表示
数値.floor
- 数値を超えない最大の整数
数値.round
- 数値の小数点以下を四捨五入
数値.ceil
- 数値を下回らない最小の整数
-
数値.truncate
- 数値の0方向の丸めて整数に
-
数値.to_i
- 数値を0方向へ丸めて整数に (same as truncate)
-
数値.to_f
- 数値を浮動小数に
これらの演算は他の演算子よりも優先度が高い
また、他にどのようなメソッドがあるかはinteger (整数), float (浮動小数)により、以下を参照。
ref:Math, ref:Bignum, ref:Fixnum, ref:Numericなども参照。
■ [ruby]数学のためのRuby入門 4-2

404 Not Foundのホームワーク
- 2の平方根と立方根を計算せよ。
-
を計算せよ
-
を 10 で割った余りを求めよ
-
の小数第四位を四捨五入して、小数第三位まで求めた値を計算せよ
1) 2の平方根と立方根を計算せよ。
irb(main):003:0> 2.0 ** (1.0/2.0) => 1.4142135623731
**
で累乗の計算. **
は四則演算に優先するので, 1 / 2
を先に計算するために ( )
で囲む.
また,1 / 2
とした場合, 1
と 2
がインテジャ(整数)扱いされてしまうため,1.0 / 2.0
として計算する.以下に例を示す.
irb(main):004:0> 1/2 => 0 irb(main):006:0> 1.0/2 => 0.5 irb(main):007:0> 1/2.0 => 0.5
三乗根も同様.
irb(main):008:0> 2.0 ** (1.0 / 3.0) => 1.25992104989487
2)
を計算せよ
irb(main):015:0> ( 1.0 + (2.0 ** (1.0/2.0))) * ( 1.0 - ( 2.0 ** (1.0/2.0))) => -1.0
特に問題なし.
3)
を 10 で割った余りを求めよ
irb(main):010:0* ((2.0**6)+1) % 10 => 5.0 irb(main):011:0> ((2.0**6)+1) => 65.0
特に問題なし.
4)
の小数第四位を四捨五入して、小数第三位まで求めた値を計算せよ
irb(main):016:0> 22.0/7 => 3.14285714285714 irb(main):017:0> 22.0/7.0*1000 => 3142.85714285714 irb(main):019:0> ( 22.0 / 7.0 * 1000 ).round / 1000.0 => 3.143
.round
は数値の小数点第1位を四捨五入するメソッド.それを使うために,数値を1000倍して数値の小数点第4位を小数点第1位に持ってくる.そこで .round
により四捨五入,今度は1/1000して元の数値を得る,と.
こんなのピーナッツですな。
■ [Ruby] 変数と変数の代入

変数の命名規則
ある特定の値を保存するもの、あるいは不定の値の代わりをするもの。
命名は小文字の英字か_で始まり,英数字か_が続く名前ならOK.
また、予約語としてあらかじめ使われている文字列がある. これは変数名として使用する事が出来ない.
以下に変数名として使えるもの,使いないものの例を挙げる.
変数名として可能
x
pi
eulerGamma
log2_10
_DEGREE_
変数名として不可能
値の代入と参照
x=3
のように、左側に変数、右側に値を書くことで、変数に値が保存されます。これを(変数への値の)代入と呼びます。代入された値は、他の値を代入したり、変数のスコープを抜ける(後述)までは保持されます。代入された値を使うときは、変数をそのまま数値などと同じように書きます。このことを(変数の値の)参照と言います。
自己代入
変数の値を増やすために
x = x + 3
といったことをよく行います。これを省略して、x += 3
と書くことができます。同様に、-=
,*=
,/=
,%=
,**=
も使えます。こういった、変数自身との演算結果をその変数に代入するような演算子を、自己代入演算子といいます。
以下に例を示す.
irb(main):023:0* x = 10 => 10 irb(main):024:0> x += 2 => 12 irb(main):025:0> x *=3 => 36 irb(main):031:0> x ** 0.5 => 6.0
予約語一覧
2006-06-03
■ [Ruby]Ruby始めます。

手を広げすぎな気がするんだが。まぁ、1日1ジャンルくらい出来たら良いな、と思いつつ。
Rubyを始めてみようと思ったのは「404 Not Found」と言うページを見つけたので。割と数学演算が可能である、という記述を見るので挑戦してみることにした。
もっとも、本格的にやるならmatlabとか、あるいはフリーでRという最強の環境もあるので、とりあえずはこれを通してRubyを1通り読めるようになること、が目的かな。Rは特に触るつもりはないけど、数学処理、特に統計処理をするなら最強の環境かと思います。
■ [Ruby] インストール方法

Mac OS Xの場合ははじめから入ってるので特に問題なし。バージョンアップする方法は…後ほど。
$ ruby -v ruby 1.8.2 (2004-12-25) [powerpc-darwin8.0]
…ちょっと古いか。
■ [Ruby]とりあえず動かしてみよう

1) def sum(first, last) # summing from first to last 2) s = 0 3) for i in (first..last) 4) s += i 5) end 6) s 7) end 8) 9) puts sum(1, 10) # summing from 1 to 10 10) puts sum(84, 2500) # summing from 84 to 2500
(※ 行頭の数字はプログラム実行にあたり不要)
このプログラムをエディタで書き、適当なフォルダに適当な名前.rb
で保存する。
ここでは~/rubytest/sum.rb
で保存する。実行するにはruby sum.rb
で。
ruby sum.rb 55 3122764
となった。
以下、適当に。
■ [Ruby]irb - interactive ruby

引き続き、404 Not Foundより。
コマンドプロンプトでirb
とするとrubyの対話型実行環境が起動する。これによってrubyコマンドの一行ごとの実行が可能となる。またirb -r function.rb
とする事で適当なfunction.rb
をライブラリとして読み込んで実行できる
例
irb irb(main):001:0> 3-3 => 0 irb(main):002:0> 5*6 => 30 irb(main):003:0> exit
irb(main):001:0> exit Mashiro:~/test sora$ irb -r sum.rb 55 3122764 irb(main):001:0> sum(4,30) => 459 irb(main):002:0> sum(-4,3) => -4 irb(main):003:0> exit
2006-06-02
■ [processing.org]プレゼンテーション法(3)

第2回(id:allegro:20060531:p2)の続き。基本技法を使っての描画。
// 変数の宣言 int i, i_max, w, h; color cl; // 初期設定 w = 200; h = 200; i_max = 500; //i_max = 2500; //i_max = 5000; //i_max = 10000; // 描画領域の用意 size(w,h); background(0); // i_max回ランダムな向き、色、透明度25%でラインを描く for(i=0; i<i_max; i++){ cl = color(random(255),random(255),random(255),25); stroke(cl); line(random(w),random(h),random(w),random(h)); }
上の図はi_maxを500回(A)、2500回(B),5000回(C),10000回(D)としてそれぞれ保存、photoshopで一枚にして文字を書き込んだもの。
描画領域を制限する方法、文字を書き込む方法が分かればphotoshopを使う必要はないんだけど。
■ [processing.org]processing使用環境

- Processing 0115 Beta
■ [Processing.org]saveFrame()

プログラム中に
saveFrame();
と書いて実行すると、実行後にかかれた画面の画像データがTIFイメージファイルとして保存される。この時、保存されたファイルは「Sketch Folder」に保存される。[Sketch]メニューから[Show Sketch Folder]を選択することでフォルダが表示される。
2006-06-01
■ [Matlab]良いコードとは?

no titleより。
良いコードとは
- fast
- clear
- readable
- maintainable
- efficient
- short
- memory-efficient
- "clever"
- reliable
とのこと。また、これをどう追求していくかってのはmatlabに限った話しでは無い.毎日5回、1000回ずつ唱えよ.
コメント欄にRubyのイタレータを使えばよりアドバンスな表現が簡単に実現できる、と書いてある.簡単かどうかは馴れがあるだろうけど、たしかに簡単かも.
■ [Matlab]構造体の呼び出しにおけるダイナミックフィールドリファレンス

「http://blogs.mathworks.com/loren/?p=6:titleより.
Matlabのデータ型の1つ,構造体のフィールドには.
に続く文字列を指定することでアクセスできる.
allegro.height = 175; allegro.weight = 62; y = allegro.weight;
.()
を使うことで文字列を変数で指定できる.
property{1} = "height"; property{2} = "weight"; allegro.(property{1}) = 175; allegro.(property{2}) = 62; y = allegro.(property{2});
メリットとしては扱いやすいことや、分かりやすいことが挙げられる.複雑な構造体*1を使用する際にsetfield
, getfield
, eval
を使うよりもよっぽど読みやすく分かりやすい.
追記
fieldnames
と言う関数があるとか.これはfieldnames(structure)
とすることでフィールドの一覧をセル構造体として出力する.
■ [Matlab]sort & find

no titleよりsort
とfind
の使い方.
sort
sort
はデフォルトでは昇順に並び替える。しかし、オプションで並び順を明示することで昇順にも降順にも使用可能.
t2 = sort(t1, 'descend') t3 = sort(t1, 'ascend') another way (not recommended) t4 = flipud(sort(t1)); //with no option, sort sorts by ascend
find
find
では条件に合うものを「n個」探し出す、と言った使い方が出来る.
n = 3; x = rand(1, 100); xTrue = find(x>.5, n)
*1:個人的には「複雑な構造体」が出る時点で何らかしら問題があるんじゃないかと思うけど
