数値計算とあとで読むに関するfenrir-naruのブックマーク (22)

  • C言語における浮動小数点演算の短縮 (contract) とそれに対する防衛術

    標準 C言語では、複数の浮動小数点演算を一つの演算にまとめることを許容しています。これは式の短縮 (contract) と呼ばれています(C17 6.5の段落8)。 (JIS X3010では「contract」の訳語に「短縮」を使っているようなので、この記事でもそれに従います。) この規定により、FMA命令のある環境では a * b + c の形の式をFMAへコンパイルすることが可能になります。というか、この規定は実質的にはFMAのためにあると言って良いでしょう。しかし、C標準は式の形には言及していないので、例えば a + b + c をまとめて計算できる命令セットがあればそれを利用することも許容されると思われます。 重要なのは、式の短縮によって演算結果が変わるケースがあるということです。実際のコード例は過去の記事にも書きました: 浮動小数点演算の結果が環境依存なのはどんなときか C言語に

    C言語における浮動小数点演算の短縮 (contract) とそれに対する防衛術
  • 任意要素数の高速フーリエ変換 - Qiita

    目的・方法 よく紹介されているFFT(高速フーリエ変換)のアルゴリズムでは、要素数が2の冪乗のCooley-Tukey法が使われている。これを使って要素数が2の冪乗でないデータをフーリエ変換しようと思うと、要素数より大きい最小の2の冪乗を求め、配列を生成し、データを移し、ゼロ埋めしてFFTしなければならない。また、ゼロ埋による副作用も考えなくてはならない。任意の要素数の配列をそのまま扱えたほうが、FFTを使う側としては楽である。 Cooley-Tukey法は、要素数が合成数ならば使える。サンプル数が素数のときは、レーダーのアルゴリズムがある。これを組み合わせて、任意要素数のFFTのプログラムを書く。 DFT(離散フーリエ変換)とは サンプル数nのデータ列 $x[i]$ から以下の演算をして、$y[i]$を得る。 ここで $\omega_n = e^{2 \pi i/n}$ である。 この計

    任意要素数の高速フーリエ変換 - Qiita
  • ARMはx86より効率がいいというのは過去の神話

    従来から、「ARMはx86より(電力的に)効率的だ」という言説があります。これは単純に「ARMは省電力なスマホ向けで、x86は電力をPC向け」程度のアバウトなイメージのこともありますし、前世紀のRISC vs CISC論争のころからある「ARMはx86 (x64を含む)に比べ命令セットがシンプルなので、命令デコードにかかる電力が少なくて済んで効率的」という議論の形をとることもあります。 この議論については、半導体エンジニアの多くは「ARMがx86 より効率が良いというのは、もはや過去の神話」(in today’s age it is a very dead argument)という認識を共有していると言っていいでしょう。有名なところではApple CPU (ARM)とZen (x86)の両方を開発したジム・ケラー氏のインタビューでも言われていますし、Chips and Cheeseとい

    ARMはx86より効率がいいというのは過去の神話
  • 統計手法のチャート図

  • 徐々に高度になるリングバッファの話 - Software Transactional Memo

    リングバッファのイメージ図 1. リングバッファとは何か 機能的にはFirst In First Out (FIFO)とも呼ばれるキューの一種であるが、リング状にバッファを置いてそれの中でReadとWriteのインデックスがグルグルと回る構造をとる事によって容量に上限ができることと引き換えに高速な読み書き速度を得たものである。キューを単に実装するだけなら山ほど方法があって線形リストを使ってもいいしスタックを2つ使っても原理的には可能だ。その中でもリングバッファを用いた方法の利点はひとえに性能の高さでありメモリ確保などを行わないお陰でシステム系の様々な場所で使われている。 これの実装自体は情報系の大学生の演習レベルの難度であるが少し奥が深い。まずリングバッファのスタンダードなインタフェースと実装は以下のようなものである。 class RingBuffer { public: explicit

    徐々に高度になるリングバッファの話 - Software Transactional Memo
  • Rust でレイトレーシングレンダラーをディープラーニングしてみた

    何が何だかわからないタイトルですが、次のような3Dのレンダラーをディープラーニングで模倣してみようということです。左側が訓練データ、右側がディープラーニングした結果でレンダリングしたものです。 まず、私はディープラーニングの専門家ではありませんので、この記事は自分の学習過程を記録したものになります。 今回はディープラーニングというかニューラルネットワーク一般の理解を深めるため、全てをフルスクラッチで実装してみました。行列の掛け算から誤差逆伝搬法まで。このため学習過程を可視化するGUIを作りました。 これは全て CPU で動作するので速度は期待しないでください。 リポジトリはこちらです。 ブラウザ上で動作する WebAssembly 版もありますが、ファイルから画像をロードする機能はありませんし、ネイティブ版より遅いです。 ニューラルネットワークの基 ニューラルネットワークおよびディープラ

    Rust でレイトレーシングレンダラーをディープラーニングしてみた
  • 統計検定準1級 合格体験記 - Qiita

    はじめに 統計検定準1級は(一財)統計質保証推進協会が実施、(一社)日統計学会が公式認定する「2級までの基礎知識をもとに、実社会の様々な問題に対して適切な統計学の諸手法を応用できる能力を問う」試験です。現在はCBTでの実施となっています。 主観を込めて言いますと、2級と準1級では難易度に雲泥の差があります。 強調して言っておきます。まったく違います! 準1級では統計的推定や検定に加えて、多変量解析(重回帰、PCA、主成分分析、数量化)、時系列解析、マルコフ連鎖、確率過程、分散分析、ベイズ統計、MCMC...と範囲が広いのが特徴です。 以下、かなりの長文になりましたが、受験して得た知見をかなり具体的に記述しました。読者の皆様の合格への一助となれば幸いです。 目的 私はとある私立中高で物理と情報を教えています。統計の勉強を始めたのは、教科「情報」を教えるにあたってのスキルアップが目的です。も

    統計検定準1級 合格体験記 - Qiita
  • hashアルゴリズムとハッシュ値の長さ一覧

    「ハッシュ値の衝突」(コリジョン)や「データの改ざん」などの対策で、ベストなハッシュ・アルゴリムを判断するために、ハッシュ値の「長さ」や「速度の目安」一覧が欲しい。 ハ ... ... ハッシュ? ... ってか、ハッシュって、そんなにおいしいの?圧縮された暗号とちゃうん? TL; DR (今北産業) この記事はハッシュ関数の出力結果を桁数ごとに、まとめたものです。 ハッシュ関数の各々の「アルゴリズムが最大何文字・・の 16 進数で返してくるか」の事前確認に利用ください。 マスター、一番強いヤツをくれ。 バランス優先 👉 sha3-512(64 Byte, 128桁, 2020/12/22 現在) OS やプログラム言語間の互換性・強度・速度で、一番バランスが取れているハッシュ・アルゴリズム。使いやすさなら、SHA3-256。 互換性?ここでいう互換性とは「どの言語でも標準・・で大抵は実

    hashアルゴリズムとハッシュ値の長さ一覧
  • Python言語による実務で使える100+の最適化問題 | opt100

    はじめに 書は,筆者が長年書き溜めた様々な実務的な最適化問題についてまとめたものである. 書は,Jupyter Laboで記述されたものを自動的に変換したものであり,以下のサポートページで公開している. コードも一部公開しているが,ソースコードを保管した Github 自体はプライベートである. を購入した人は,サポートページで公開していないプログラムを 圧縮ファイル でダウンロードすることができる. ダウンロードしたファイルの解凍パスワードは<に記述>である. 作者のページ My HP 書のサポートページ Support Page 出版社のページ Pythonによる実務で役立つ最適化問題100+ (1) ―グラフ理論と組合せ最適化への招待― Pythonによる実務で役立つ最適化問題100+ (2) ―割当・施設配置・在庫最適化・巡回セールスマン― Pythonによる実務で役立つ

  • NUOCW

    子どもと家族のWell-beingをVISIONに描いて A vision for the well-being of children and families

    NUOCW
  • 技術計算製作所:数値計算 ==機械設計に必要な情報とWebアプリ、ソフトウエアを公開しています-/science/numcal-

    行列を下三角行列Lと上三角行列Uに分解する方法について説明します。 LU分解は連立方程式の解法に用います。

  • 128ビット符号付き整数の最大値は素数 - Rustで任意精度整数演算

    概要 2^n-1 型の数はメルセンヌ数と呼ばれ、更に素数である場合にメルセンヌ素数といいます。記事では、メルセンヌ数に対する高速な素数判定法であるリュカ・レーマーテストを、Rustの任意精度演算用クレート rug を利用して実装します。 実行環境 CPU: Intel Core i7 1.8GHz メモリ: 16GB OS(ホスト): Windows 10 Home 21H1 WSL2: Ubuntu 20.04.3 rustc: Ver. 1.55.0 cargo: Ver. 1.55.0 符号付き整数型の範囲について Rustには組み込みの整数型として 8,\,16,\,32,\,64,\,128 ビット整数[1]がそれぞれ符号付き・符号なしで備わっています[2]。そのうち符号付き整数は、他の多くの言語と同様、2の補数によって負の数が表現されます。したがって、ビット数 n = 8,

    128ビット符号付き整数の最大値は素数 - Rustで任意精度整数演算
  • ruby/lib/matrix.rb at ruby_3_0 · ruby/ruby

  • Stan モデリング言語: ユーザーガイド・リファレンスマニュアル

    図4.4: Stanの変数宣言の型と対応するプリミティブな実装の型の表. Stanの関数・演算子・確率関数は引数と戻り値の型を持ち, それらはプリミティブな型と配列次元数によって宣言されます. 型推定の規則 Stanの型推定規則は, 変数宣言の背後にある組み合わせに基づいて, ある式の実装の型を定義します. この規則は, プリミティブなリテラルと変数の式から, 複合した式へとボトムアップに作用します. リテラル 42のような整数リテラルの式はint型です. 42.0のような実数リテラルはreal型です. 変数 局所的に, あるいは前のブロックで宣言された変数の型はその宣言で決定されます. ループ変数の型はintです. 各変数の宣言は, スコープ毎に常に唯一となります. Stanでは, 既に宣言された変数をもう一度宣言することを禁止しているからです. 5 インデックス操作 xが全体の次元数が

  • 2のべき乗サイズの配列は危ないという話 via 行列積 - elkurin’s blog

    こんにちは。労働者です。とあるプログラムで学生さんの課題を添削していたら面白い話に出会いました。 僕は今、主に学部生向けのインターン研修的なプログラムでメンターなるものをやっています。メンターとしての仕事は、学生さんの課題へフィードバックを返し、Office Hourというセッションを毎週設けて質問受けやCSに関するトークを行うといった内容になっています。今回話題に取り上げるのはその中の課題の1つ、「行列積のプログラムを書いて時間を計測せよ」という何気ない話で、続く課題たちのいわば前座のようなものです。こういったところに沼は隠されているものですね。 担当している学生さんたちが細かい実験を行ってくれて以下のような疑問が提示されました。 「行列積の計算が N = 1024のときだけ N = 1023, 1025のときに比べて3倍遅いのはなぜ?」 配列のサイズが2のべき乗になるのは避けるべきとい

    2のべき乗サイズの配列は危ないという話 via 行列積 - elkurin’s blog
  • 輸送問題を近似的に行列計算で解く(機械学習への応用つき) - 私と理論

    輸送問題と呼ばれる問題があります. この問題は,普通は線形計画法やフローのアルゴリズムを使って解かれます. この記事では,この輸送問題を近似的に行列計算で解くアルゴリズム(エントロピー正則化 + Sinkhorn-Knopp アルゴリズム)を紹介します. 輸送問題とは アルゴリズム 得られる解の例 なぜこれで解けるのか? 競プロの問題を解いてみる 機械学習界隈における流行 まとめ 輸送問題とは 輸送問題とは以下のような問題です. 件の工場と 件の店舗からなる,ある商品の流通圏があるとする. 各工場には 個の在庫がある.. 各店舗では 個の需要がある. 在庫の総和と需要の総和は等しいとする (すなわち ). 工場 から店舗 に商品を一つ運ぶためには の輸送コストがかかる. 各工場 から各店舗 への輸送量 を適切に決めて,各店舗の需要を満たしつつ輸送コストの総和を最小化せよ. 輸送問題は最適化

  • Python言語による実務で使える100+の最適化問題 | opt100

    指針 厳密解法に対しては、解ける問題例の規模の指針を与える。数理最適化ソルバーを使う場合には、Gurobi かmypulpを用い、それぞれの限界を調べる。動的最適化の場合には、メモリの限界について調べる。 近似解法に対しては、近似誤差の指針を与える。 複数の定式化を示し、どの定式化が実務的に良いかの指針を示す。 出来るだけベンチマーク問題例を用いる。OR-Libraryなどから問題例をダウンロードし、ディレクトリごとに保管しておく。 解説ビデオもYoutubeで公開する. 主要な問題に対してはアプリを作ってデモをする. 以下,デモビデオ: 注意 基的には,コードも公開するが, github自体はプライベート そのうちにするかもしれない(予約はしているが, 保証はない). プロジェクトに参加したい人は,以下の技量が必要(github, nbdev, poetry, gurobi); ペー

  • 数理計画法テキスト

    学習・研究用テキスト(最適化,線形計画法,内点法,数理計画法) このページでは最適化,線形計画法,内点法,数理計画法などの分野に関しての学習用テキストを公開しています. テキストの特徴として 定理などの証明を詳しく記述 多くの例を用いて説明 となっているため,学習しやすいテキストとなっております.

  • 「2乗してはじめて0になる数」とかあったら面白くないですか?ですよね - アジマティクス

    「その数自体は0でないのに、2乗するとはじめて0になる数」ってなんですか? そんな数あるはずがないと思いますか? でももしそんな数を考えることができるなら、ちょっとワクワクすると思いませんか? 今回はそんな謎の数のお話。 実数の中には、「2乗して0になる数」というのは0しかありません。 (2乗して0になる実数は0しかない図) ということは、「2乗してはじめて0になる数」というのがあるとしたら、それは実数ではありえません。 「1年A組にはメガネの人はいないので、メガネの人がいたとしたらその人は1年A組ではありえない」くらいの当たり前のことを言っています。 この辺の議論は、複素数で「」を導入したときと同じですね。 「実数の中には、2乗して-1になる数というのは存在しないので、それがあるとしたら実数ではありえない」ということで「虚数」であるが導入されるわけです。 それならばということで、ここでは

    「2乗してはじめて0になる数」とかあったら面白くないですか?ですよね - アジマティクス
  • 日本TDM学会:市販ソフト