タグ

JavaとはじめMath! Javaでコンピに関するTensorのブックマーク (25)

  • 最終回 はじめMath! Javaでコンピュータ数学 総まとめ | gihyo.jp

    どんな小さな山でも、地図なしに登るのは不安です。目的の山頂を目指して、途中の絶景ポイントを巡りながら、安心して歩き続けるためには地図が不可欠です。歩き慣れない道ならなおさらです。高い山になれば、地図だけではまだ不安です。たいていの山には要所要所にチェックポイントがあります。このチェックポイントを追えば一応山頂に着くでしょう。しかし、一番は道案内人です。初心者が途中困ったことになるのを、前もって避けさせてくれるからです。 連載も78回(現時点)の長きに渡りました。今回で連載を締めくくるに当たって、全体を見渡す地図を残します。絶景ポイントのリスト代わりに、用語一覧を、道順のチェックポイント代わりに語句の索引(用語総解説)を用意します。 今回の記事が、皆さんにとっての登山案内人としてお役にたてれば幸いです。 図78.1 目次・索引は書物の案内人 連載で取り扱った内容 はやいもので、連載が始まっ

    最終回 はじめMath! Javaでコンピュータ数学 総まとめ | gihyo.jp
  • 第77回 計算量の数学 計算量と実際のコード その3 | gihyo.jp

    何かを作るとき、全くゼロから作り始めると言うことはまれです。たいていは、何か「ひな形」になるものや、類似のものを用意して、それを変更したり、機能を付加して新しいものにしていくでしょう。そのとき、サンプルのカタログが手元にあると重宝します。どれだけたくさんのサンプルを持っているかが、技能・技術のレベルに大きく影響します。それは経験と言い換えることも出来るでしょう。 これまで、計算量がO (n ),O (log2 (n )),O (1 )となるアルゴリズムとコードを紹介しました。今回はその他の代表的な計算量の値とそのときのコード例を紹介します。 これまでの連載とあわせれば、計算量とコードの小さなカタログになります。ご活用いただけると幸いです。なお、計算量に関する連載記事の内容は、きしだなおきさんのブログエントリを参考にさせていただきました。快く許可下さったきしださんに、この場を借りてお礼申し上

    第77回 計算量の数学 計算量と実際のコード その3 | gihyo.jp
  • 第75回 計算量の数学 計算量と実際のコード その1 | gihyo.jp

    仕事をやり遂げるために必要な時間を見立てることが出来たら、次はその時間をいかに短縮するかを考えます。同じ仕事が短時間で出来るなら、それにこしたことはありません。余った時間で間違いがないかどうかの確認や、より品質を高めることが出来ます。 前回は、計算量O (n )のアルゴリズムの例としてリニアサーチを取り上げました。要素の数nの大きさに比例して、最悪検索時間が長くなります。今回は、リニアサーチよりも高速なバイナリサーチの計算量を求め、実際にコードを動かして速さの違いを実感しましょう。当に同じ仕事を、より短い時間で実行できるのでしょうか。 図75.1 同じ品質ならより速く 計算量:バイナリサーチの場合O (log2(n)) バイナリサーチ[1]とは、データの真ん中の値、すなわち中央値[2]を「とりあえず」チェックする方法です。データは整列済みで、小さい値から大きい値の順に並んでいます。目的の

    第75回 計算量の数学 計算量と実際のコード その1 | gihyo.jp
  • はじめMath! Javaでコンピュータ数学:第74回 計算量の数学 計算量とは |gihyo.jp … 技術評論社

    バイキングで事をするとき、若い頃は何も考えずにお皿にどんどん乗せていました。少々無理に盛っても、気合いでべきっていました。元を取ってやろうとか、元以上にべてやろうとか、そんな不純な気持ちもありましたし。しかし、このごろ、油ものや炭水化物を控えめにし、更に皿の大きさから自分のべられる量に見当をつけて取るようになりました。べ残しをしたくない事もありますが、おなか周りの余剰財産をなんとか増やさないようにしたいのです。その思いはなかなか実らず、だぶついた財産は心肺機能を圧迫し続けています。 さて、見当を付ける、ということは何時でも大切なことです。しかし、プログラミングの初心者のうちは、見当の付けようが分からず、組んで動かしてみて初めてパフォーマンスの悪さに愕然としたりするものです。できるなら、コードを組む前に、少なくとも動かす前にはパフォーマンスの見当を付けたいものです。今回から学習する

    はじめMath! Javaでコンピュータ数学:第74回 計算量の数学 計算量とは |gihyo.jp … 技術評論社
  • 第70回 微分・積分の数学 数値微分 [中編] | gihyo.jp

    前回は前進差分、後退差分の式の導出を行いました。これらは十分に実用的な方法なのですが、更に高い精度を求めたい場合もあるでしょう。今回は、前進差分や後退差分より誤差を小さくできる「中心差分」と、数値微分を行う場合の「微少な量」の決定の仕方を紹介します。 中心差分 中心差分[1]は、図70.1のように、差分近似を求めたい位置 x の前後 x-h と x+h を取り、関数の描くグラフ上の2つの点をつなげた直線の傾きを、求める微分の近似値とする方法です。この直線の傾きは、前進差分や後退差分の直線と比較して、注目する位置xでの関数の接線の傾きにより近いように見えます。実際に誤差が小さいことを、式を導出することで確認できます。 図70.1 中心差分とは 中心差分の式は、前回導いた式69.5と69.14から、以下のように導きます。誤差のオーダーを再確認するために、 O(h2) はもともとの形にもどします

    第70回 微分・積分の数学 数値微分 [中編] | gihyo.jp
  • 第71回 微分・積分の数学 差分法 [後編] | gihyo.jp

    これまで、数値微分の方法を紹介してきました。今回は、そのまとめとして実際にコンピュータに計算させましょう。 問題 関数を数値微分するプログラムを作りましょう。 前進差分と中心差分それぞれの場合で求めましょう。その際、導関数から求めた値と並べて出力させてください。 解説 問題 関数を数値微分するプログラムを作りましょう。 先ずは、解析的に求めた導関数の式を示します。 (1)はともかく、(⁠2)はいやですよね。こんなのは、導出が正しいかどうか不安でしようがありません。数値計算で求めた値が使えるなら、そうさせていただきたいところです。 それでは早速、前進差分と中心差分を適用してみましょう。微少な量hは前回検討した結果を用いて、前進差分では2-26、中心差分では2-52を用いて実行してみましょう。 ソースコード:Forward CentralDifference01.java 01: class

    第71回 微分・積分の数学 差分法 [後編] | gihyo.jp
  • 第72回 微分・積分の数学 数値積分 区分求積法・台形公式[前編] | gihyo.jp

    火の通りにくい野菜は、二つ、三つに切ってから鍋に入れます。ゴボウなど、硬いものは細くささがけにします。キャベツも生でサラダにするときには、消化の良いように千切りに。大きいままではべにくい材も、細かく切ればおいしくべられます。 今回から学習する数値積分は、まさにそんな手段です。かなり強引な例えでしょうか?いえいえ、数々の公式やテクニックを駆使しないと積分できない関数に対面したり、大量の連続データを目の前に呆然と立ちつくしているならば、コンピュータのパワーでまさに「みじん切り」にして、お望みの結果を手に入れることが出来るのです。おいしい数値積分を、さあ、召し上がれ。 図72.1 硬い野菜は小さく切って煮込む 数値積分とは 数値積分[1]とは、積分公式を用いず、与えられた関数そのままで、関数の描く曲線で囲まれた面積の近似値を求める方法です。面積を求める、という部分に注目して、数値的求積法と

    第72回 微分・積分の数学 数値積分 区分求積法・台形公式[前編] | gihyo.jp
  • 第73回 微分・積分の数学 数値積分 区分求積法・台形公式[後編] | gihyo.jp

    前回の問題で取り組んだ、Java言語で数値積分するプログラム例を紹介します。少々長くなりましたから、JavaDocを利用してドキュメントを出力出来るようにしておきました。先ずはこのソースコードをエディタにコピーして、後で紹介するバッチファイルを実行してJavaDocを生成させてください。 ドキュメントは、ソースコードを保存したディレクトリ内に作られるjavadocディレクトリ内にあります。index.htmlをダブルクリックするとブラウザに表示されますので、こちらを読むと構成がわかりやすいでしょう。 なお、プログラムの実行時には、アサーションを利用していますので、-eaオプションを忘れずに指定しましょう。 解説 問題 関数を数値積分するプログラムを作りましょう。 前回、手で計算した結果を活かしながら、数値積分の結果を検証するプログラムを作りましょう。以下はその一例です。 ソースコード:Te

    第73回 微分・積分の数学 数値積分 区分求積法・台形公式[後編] | gihyo.jp
  • 第69回 微分・積分の数学 数値微分 [前編] | gihyo.jp

    料理レシピを読んでいて困るのが「○○を少々」という表現です。量りで量れないようなわずかな分量だから「少々」と書くのです。材料が元々含む塩分や、好みによってこの「少々」が変動することはよく分かります。でも、困るのです。経験の浅い私は臆病になって「ほーんのちょっぴり」になってしまったり、加減が分からなくて「入れすぎ」になったりします。結果、妙に味のないスープになってしまったり、辛くて思わずしかめっ面したくなるような野菜炒めになってしまったり。「⁠少々」というのは難しいものですね。「⁠さじ加減」をしながら、だんだん上手になりたいものです。それまでは、おおよその加減で「おいしい」と思えれば、それで良しとするのが精神衛生上も良いのでしょう。 これから紹介する数値微分は、まさしくそのような手段です。「⁠出来ないよりは、役に立つ程度に出来ればOK」そんなツールです。どうです?興味がわいたことでしょう。

    第69回 微分・積分の数学 数値微分 [前編] | gihyo.jp
  • 第68回 微分・積分の数学 ニュートン・ラフソン法 [後編] | gihyo.jp

    前回紹介したニュートン・ラフソン法を利用して、方程式の解を求めてみましょう。練習問題ですから、シンプルで、手でも計算が可能な方程式を取り上げます。問題の方程式を因数分解をするとわかりますが、解は重解で1つのみです。数値計算して得た結果と、因数分解して得た結果がどれだけ一致しているか、それを確認してみましょう。 問題 ニュートン・ラフソン法で4x2+12x+9=0 の解を求めましょう。 前回の例題で紹介したソースコードを編集して、問題の方程式のためのプログラムを作成しましょう。変更が必要なのは、作成した漸化式を表すコードの部分だけです。漸化式さえコードにしてしまえば終わりの簡単な課題ではつまりませんので、もうひと味。方程式の真の値を手で計算しておいて、真の値とニュートン・ラフソン法で得た値との差を最後に表示してみましょう。 解説 問題 ニュートン・ラフソン法で4x2+12x+9=0 の解を求

    第68回 微分・積分の数学 ニュートン・ラフソン法 [後編] | gihyo.jp
  • 第67回 微分・積分の数学 ニュートン・ラフソン法 [前編] | gihyo.jp

    離れたところに飛んでくるテニスボールに対して、プレイヤーは先ず大股で駆け寄ります。ボールの落下点が近くなったら次第にステップを小刻みに、いよいよと言うところではすり足、そして最後の一歩を大きく踏み出してインパクト。 かつてソフトテニス部の副顧問をしていた時、この練習を見ていてニュートン・ラフソン法を思い出しました。人間はこのような動作アルゴリズムを練習で身につければ、ほぼ無意識に実行し、ボールとラケットのインパクトという1つの解を得ます。人間の身体コントロール能力というのは、当に素晴らしいものだと感じます。 今回学習するのは、微分とコンピュータを活用した方程式の近似解法です。原理は大変シンプルですから、気負わずに取り組んでください。そう。力んでラケットを振ると、空振りするのと同じだと思って。 図67.1 目的に向けて的確に歩みをすすめる ニュートン・ラフソン法とは ニュートン・ラフソン法

    第67回 微分・積分の数学 ニュートン・ラフソン法 [前編] | gihyo.jp
  • 第66回 微分・積分の数学 微分・積分とは | gihyo.jp

    微分・積分というと、日常生活には全く縁がないもの、と思われがちではないでしょうか。しかし、「⁠速さ」「⁠加速」あるいは「減速⁠」⁠、そして「移動距離」などと、歩いたり走ったり、自転車や自動車に乗っていれば、誰もが当たり前に使うこれらの言葉、考え方は、微分・積分と密接な関係があります。微分・積分は、私たちの日常生活に関わりが深い数学です。 しかし、例えば「エンジンの仕組みを知らなければ車に乗ることはできない」とか、「⁠電気信号の処理方法を知らなければ電話をかけられない」なんてことはありません。むしろ、そんなことを意識しないで使えるからよいのです。でも、この記事に関心を持ってくださったあなたは、きっと「もう一歩突っ込んでみたい」という気持ちがあるはずです。ただ便利に使うだけではもったいない、と思うからこそ、数学やプログラミングに関心がおありのはず。コンピュータの助けを借りて、微分・積分をより便

    第66回 微分・積分の数学 微分・積分とは | gihyo.jp
  • 第65回 統計の数学 相関係数を導く[後編] | gihyo.jp

    前回は相関係数を導く準備として、統計の数学を用いて回帰直線の式を導きました。今回は前回で準備した要素をもとに、最終的に相関係数を導きます。どうして相関係数というものが登場したかがわかる、小説に例えれば主人公の登場秘話のクライマックスといったところでしょうか。 決定係数 回帰直線の一次式の定数が求まりましたから、回帰直線の式と測定値の間の関係の強さを評価する方法が欲しくなりました。そこで、回帰直線の式によって得られた値の分散と、測定値の分散が近ければ、関係が強いと評価することにします。そのような式を導き出してみましょう。 測定値の集合に、最も良くあてはまる回帰直線が得られたとして、各xi に対応するyの値を(推定値)と書くことにします。 (65.1)-(64.27) ここで、を見てみましょう。 この式の総和部分の第2項は式65.2を代入して推定値を消去できます。 こうして、式65.5の第2項

    第65回 統計の数学 相関係数を導く[後編] | gihyo.jp
  • 第64回 統計の数学 相関係数を導く [前編] | gihyo.jp

    前回は相関係数とは何か、大変大雑把に紹介し、計算手順をJava言語で実装、テストするところまで行いました。今回は、相関係数というものがどういう筋道で導かれたものなのか、丁寧に追っていきます。途中の数式を極力省かずにたどります。全て高校数学までの内容です。 今回、そして次回の前後編は、まるっきり数学ばかりです。⁠”Javaでコンピュータ数学⁠”の看板に偽りあり?とおっしゃらず、だまされたと思って取り組んでみてください。プログラミングを専門としていれば、少なからず「効率の良い計算」を必要とする場面があります。すると、そのときに使う数学は、ちょうど今回出てくるような「合計」や「平均」と似た操作を上手に組み合わせることが多いのです。コンピュータは「単純なんだけれども、人の手と頭ではとても処理できないような、たくさんのデータを処理すること」が最も得意な機械だからです。 これから出てくる、「⁠数式のこ

    第64回 統計の数学 相関係数を導く [前編] | gihyo.jp
  • 第63回 統計の数学 相関係数とは[後編] | gihyo.jp

    前回は相関係数の計算方法を紹介しました。今回は、相関係数の計算手順をJava言語のプログラムとして書き表すことに挑戦してみましょう。 問題 CSVファイルのデータを読み込み、相関係数を計算するプログラムを作りましょう。 第61回の問題で作成したコードに、相関係数を計算するコードを加えましょう。それだけでは退屈ですから、コマンドライン引数でデータファイルを指定し、指定されたファイルを読み込んで処理するプログラムに変更してください。なに、ほんのちょっとした変更だけで済みます。⁠”Java コマンドライン 引数⁠”としてGoogleで検索すれば、たくさんのサンプルが表示されるでしょう。それらから盗み取って作成してください。 解説 問題 CSVファイルのデータを読み込み、相関係数を計算するプログラムを作りましょう。 計算に用いたデータファイルdata001.csvも前回と同じものを用いましょう。

    第63回 統計の数学 相関係数とは[後編] | gihyo.jp
  • 第62回 統計の数学 相関係数とは [前編] | gihyo.jp

    「大風がふけば桶屋がもうかる」とか「バタフライ効果」だとか、物事・出来事は関連を持って存在するものだと考えられています。ただ、それらの関連を明確に表現する方法が無いために、カンや推測で判断せざるを得ないことが多いですね。 スポーツの世界でも、真剣な勝負であるほど、ある攻撃を仕掛けたときに相手がどのような反応を示すか、というデータを集めて分析し、次の試合に備えます。あるプレーに対して、相手がどう対応する傾向が強いか、それを知ることが出来ればこんな有利なことはありません。もちろん、スポーツには即応性が要求されますから、最後の瞬間は能に頼るのですが。しかし、データのバックアップがあるのと無いのとでは、大きな違いです。 今回学習する内容は、一対一に対応するデータの集合について、線形な関係があるかどうかを数値で評価する方法についてです。数値化することで比較が可能になります。統計の数学の学習の終わり

    第62回 統計の数学 相関係数とは [前編] | gihyo.jp
  • 第61回 統計の数学 回帰直線[後編] | gihyo.jp

    前回は、回帰直線を数学的に詳しく学びました。今回は前回の知識を使って、Java言語で回帰直線のグラフを描きましょう。Officeソフトで回帰直線を得ることと、Java言語のプログラムで回帰直線を得ることの比較は、電卓での計算と筆算での計算の比較に例えられます。2つの結果が等しい、あるいは非常に近ければ、それぞれの方法が正しく実行されたかどうかの確認になります。 サンプルのソースコードが少々長くなりますが、解答の必要な部分はわずかです。是非ともくじけずに取り組んでみてください。 問題 最小二乗法を用いて、回帰直線の定数を求め、データにフィットするグラフを描きましょう。 今回の問題で示すソースコードには、最小二乗法を計算する部分のコードが欠落しています。コードを補充して完成させてください。 できる限り短いコードにするために、GUIでプログラムを終了させるためのコードを含みません。Windows

    第61回 統計の数学 回帰直線[後編] | gihyo.jp
  • 第60回 統計の数学 回帰直線[中編] | gihyo.jp

    今回は回帰直線を得るためのひとつの方法、最小二乗法をしっかりと紹介します。「⁠コンピュータ数学」と銘打っていますから、遠慮なく数式を出します。高校数学から少しはみ出す部分がありますが、記号の奔流にだまされず、実はそんなに難しくないことに気付いていただけると幸いです。 最小二乗法とは 最小二乗法[1]とは、調査や測定によって得られた「ばらつき」のあるデータに対して、最もまんべんなく当てはまる直線や曲線の式を得るための数学的手段です。直線を当てはめる場合を特に線形最小二乗法[2]といいます。 得られた回帰直線の式を使えば、データのない区間について、値の予想ができます。データに誤差があると考えられる場合は、真の値を予想することが出来ます。なにより、バラバラだったデータの集合が、ひとつの一次式で表現できるというのは魅力的です。 最小二乗法は、工学に限らず広い分野で活用されています。プログラマは最小

    第60回 統計の数学 回帰直線[中編] | gihyo.jp
  • 第58回 統計の数学 移動平均 | gihyo.jp

    バスケットボールでは、相手のフェイントに惑わされぬよう腰に注目します。どんなに激しく動いても、腰が動く先が相手の動く先だからです。柔道では釣り手(相手の襟をつかんだ手)の感覚に注意を払います。釣り手を通して伝わって来る相手の体(たい)の動きが、相手の技の全てを表しているからです。 とかく細かな動きにとらわれると、質をとらえることが難しくなってしまいます。今回学習するのは、データの細かな変動を緩和し、生のデータからでは得られなかった傾向をつかむための便利な手段です。 図58.1 子細に惑わず質を感じよ! 移動平均 移動平均[1]とは、細かな変動を含むデータをスムーズにする(平滑化する)方法です。 平均をとるというと、100個のデータの総計を、データの個数100で割って1つの値を得ることですが、これではデータ全体が増加傾向・減少傾向を持つのか、それともあるピークを持っている山形・谷型の分布

    第58回 統計の数学 移動平均 | gihyo.jp
  • 第56回 統計の数学 統計とは | gihyo.jp

    情報を最大限に活用して勝負に勝つ、というと、野球では野村克也監督のデータ野球が有名です。野球ではたくさんの選手がゲームに関係するため、データの処理・活用は大変なことでしょう。野球に限らず、相手のあるスポーツ、勝負事ではデータの活用が大きな力となります。相手の得意技・苦手を知っているのといないのでは、天と地の差があります。古くから「敵を知り、己を知れば百戦危うからず」(⁠※1)と言われます。試合の前には、せめて最近の相手の勝ち手、負け手ぐらいはチェックしておきたいものです。 さて、勝負事、すなわち実利に深く関わりのある数学が統計の数学です。客観的にデータを調査・理解したいとき、強力なツールとなります。これからしばらくの間、基的で簡単な統計の数学を学び、Java言語で活用していきましょう。 図56.1 データから戦略を練る 統計とは 統計[2]とは、実験や調査で得られたデータ(統計の用語で標

    第56回 統計の数学 統計とは | gihyo.jp