hirax.net::Keywords::「表計算」のブログ



2012-06-22[n年前へ]

続々々 エクセルのワークシートをC++言語プログラムに変換してみよう!  share on Tumblr 

 エクセルで(反復計算を用いた)循環参照が行われている計算シートと同じ計算を、C++言語で行うためのC++ソースコードを自動生成するRubyスクリプトを少しだけ更新してみました(github)。

 追加したのは、計算した結果を表示する機能と、無駄な数値代入計算をさせないようにしたという部分です。

 使い方は、とっても簡単。たとえば、

ruby xls2cpp.rb sample.xls > sample.cpp
という風にしてXLSファイルからC++ソースコードを生成し(参考:githubのsample.cppなど)、後は、
cl /EHsc /Ox sample.cpp
とでもし…つまり最適化をバッチリかけてやったならば、計算がバッチリ速くなるかも!?しれません。(エクセルの方が最適化されていて速かったり…とかいうこともありそうですが)

  というわけで、エクセルで(たとえば偏微分方程式を離散化して解く)コードをチョチョイと感覚的にプロトタイピングした上で、後はC++コードに変換し・最適化をかけまくる…という、「エクセルプロトタイピング+最適化C++コード自動生成」シミュレーションをしてみるのはいかがでしょう?

2012-11-18[n年前へ]

「黒パンツを覆う白生地中の光収支方程式」問題をエクセルで解いてみよう!?  share on Tumblr 

 検証!「夏目アナの脇汗事故はなぜ起こったか?」ー灰色の服が汗染みに弱い理由では、脇汗をかいた時、着衣の外見がどのような色になるかを考えてみました。
 今日は、別の着衣の「外見色」問題、「白生地で覆われた黒パンツは一体どんな風に見えるのか?」という(いわゆるひとつの)「黒パンツを覆う白生地中の光収支方程式」問題を、表計算ソフトであるエクセルを使って解いてみることにします。

 「白い生地」は光を散乱/拡散させる素材です。 簡単のために、白生地が完全に光を散乱/拡散させるものと近似すると、生地中の微小領域(部分)を考えれば、その領域は周囲に等方に光を発するということになります。 逆に言うと、「白生地の各領域は周りから発せられる光を受ける」ということです。 そんな風に考えると、(下図に描いたように)白生地の各領域の輝度は、「周囲の輝度の平均」を用いた形の式で表されることもわかります。つまり、この「黒パンツを覆う白生地中の光収支(輸送)方程式」は熱伝導方程式などを解いたのと同じやり方、エクセルで「反復計算(循環参照計算)」を使えば解くことができるのです(下図参照)。

 それでは、実際にエクセルを使って「白生地で覆われた黒パンツは一体どんな風に見えるのか?」問題、すなわち、「黒パンツを覆う白生地中の光収支方程式」問題を解いてみることにします。(参考までに、今回作ったエクセルのファイルはここに置いておきます
 まずは、エクセルに『体の上の「黒パンツ」』を示す「反射率分布」を白黒(1,0)で造ってみます(上図のA1からQ16までの領域)。 そして、その下に(B19からQ34までの領域)に「(黒パンツを覆う)白生地」を作ります。 白生地の各領域には "=(上+下+左+右)/6 + 自分×反射率/6+1/6" といったような式を入力します。 そして「反復再計算」を実行すると「白生地で覆われた黒パンツは一体どんな風に見えるのか?」をエクセルが計算してくれるわけです。 また、「数値の大小が色を表すような書式」にしておけば、計算結果をそのまま濃淡のイメージとして眺めることもできます。

 さて、体の上に「黒パンツ」があるとして(上図の右上部分)、その「黒パンツ」を覆う白生地が(外見上)どんな輝度に見えるかの計算結果を示したのが、上図の右下部分です。 (白=1, 黒=0)という色で示した計算結果を眺めてみると、白生地越しの黒パンツはずいぶん「ぼやけた姿」となって見える、ということがわかります。 単純な計算ですが「確かにそんな感じ」という結果になりました。

 下着が透けてしまう・それとも大丈夫(透けない)といった「着こなし」の問題に悩んだときは、その問題を表計算ソフト・エクセルを使って「実際に解いてみる」という解決策はいかがでしょうか?

「黒パンツを覆う白生地中の光収支方程式」問題をエクセルで解いてみよう!?






2014-08-22[n年前へ]

Excelで”-1^2″の計算結果が1で、”0-1^2″は-1になるヒミツ!?  share on Tumblr 

 Excelで”-1^2″の計算結果が1で、”0-1^2″は-1になるヒミツ!?を書きました。この話題、遙か昔から定番ですが、とても面白いと思います。

 このようなExcelの演算子解釈ルール(優先順位ルール)は、どのようにして生まれたのでしょう?「それは、きっとExcelに先行して発売されていた表計算ソフトのVisicalcやLotus 1-2-3にならったに違いない!」と言われることも多いのですが、残念ながらそうではありません。Visicalcの演算子解釈順は、単純に左から右へと並ぶ”並び順”で解釈されますし、Lotus 1-2-3は…



■Powered by yagm.net