2015年08月30日

JPEG 法

明日で八月も終わり。九月になると朝晩の通勤がまた混雑するんでしょうね。

昔、「アルゴリズムのコーナー」で紹介した「JPEG 法」のサンプル・プログラムを見直しています。10 年くらい前にまとめたもので、当時は C 言語で構築していたので C++ で書き直し、並行してドキュメントもリニューアルする予定です。
JPEG は 90 年代に規格化された後、急速に広まった画像フォーマットでした。当時は JPEG と GIF が一般的な画像形式だったと記憶してます。離散コサイン変換 (DCT) を使い、見た目はほとんど変わることなく非可逆的に圧縮するというのはそれまでなかっただけに新鮮に思いました。本格的に内容を理解しようとしたのは 10 年前くらいから。そのころは JPEG2000 という新しいフォーマットも誕生して、これは「ウェーブレット変換」を使っているという情報だけでいろいろと調べたり悩んだりしていました。JPEG2000、今は全く使われないですね。結局今でも JPEG が残っているといいのはある意味すごいことだと思います。

ところで GIF と同様に JPEG も特許関係で訴えられたことがありました。有名なのが Forgent Networks (現在は Asure Software )。なんだか怪しげな会社です(会社と言っていいんでしょうか)。  

Posted by fussy at 19:06Comments(0)TrackBack(0)

2015年08月30日

暑さが思考を鈍らせる

大雨の日が続きますね。しかし、おかげで涼しくなってきました。

最近になって思うのは、温度より湿度のほうが「暑苦しい」という感覚に影響しているということです。30 度を超えていても湿度の低い日は案外エアコンなしで大丈夫だったりしました。逆に 30 度以下でも湿度が高いときは耐えられないですね。だいたい 60% くらいがリミットでしょうか。

暑いと思考回路も鈍くなるということで、今日はどうでもいいようなところで悩んでいました。

例えば、下のようなクラスを作ります。


template< class T >
class Test
{
  T* t_;

public:

  Test( T& t ) : t_( &t ) {}

  void print( size_t i )
  { std::cout << (*t_)[i] << std::endl; }
};


使うときはこんな感じになります。


int data[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, };
std::vector<int> vec( &data[0], &data[sizeof(data) / sizeof(data[0])] );

Test< std::vector<int> > test1( vec );
test1.print( 1 );


意図した通り、これで 1 が出力されます。しかし、


Test< int* > test2( &data[0] );
test2.print( 1 );


とすると下のようなエラーが出力されます。

error: no matching function for call to ‘Test::Test(int*)’

いろいろ試行錯誤してみると


Test< int*const > test2( &data[0] );


のようにポインタを定数とすればちゃんとコンパイルできました。実際はもう少し複雑なクラスの中で発生した問題だったので、最初はなぜこのような動作になるのか全くわからず、コンパイラのバグじゃないのと疑う始末。で、上に書いたようなクラスを使って検証した結果、


int* p = &data[0];
Test< int* > test2( p );


とすれば正常にコンパイルすることができて、&data[0] として渡した場合、定数ではないポインタへの参照としては扱われないということを理解しました。先週はこれにずっと頭を悩ませていたわけで、理由がわかって何かスッキリしました。というより、もっと早く気付けと過去の自分に言いたい  

2015年08月23日

ダブル台風

台風がまた近づいているようです。台風 15 号は明日、沖縄に接近してそのまま日本海側へ通過する模様。台風 16 号は現在、小笠原諸島にいるようです。それにしても、今年は台風が異常に多い気が。

何年か前までは、台風が直撃しなければまあ大丈夫とか思っていましたが、最近は直撃しなくてもその影響で大雨になって大変な思いをすることが多くなったような気がします。大雨になると、傘をさしていても足元はぐしょ濡れになってしまい、台風で暴風雨になれば傘もさせない状態になって、雨ざらしのまま帰らなければならなくなることも。
傘といえばかなり昔からあるものですが、これに代わるものってないですよね。折りたたみ傘のように持ち運びが楽で、足元も濡れることなく、しかも風で飛ばされるようなこともない画期的な道具が発明されればいいんですが。さっと装着できるポンチョタイプのレインコートなんかがありますけど、あれは使った後が大変なんですよね。しかし、台風の時は傘は使えないので、最後の切り札として持っておいたほうがいいかも。  

Posted by fussy at 21:18Comments(0)TrackBack(0)

2015年08月22日

解と係数の不思議な関係

気がつけば、夏休みも残り一週間あまりとなりました。

天むすは名古屋が発祥の地と思っていましたが、実際は三重県の津市なんだそうです。本当に知りませんでした。名古屋の人にウケたからそう勘違いされるようになったんでしょうかね。しかし、自分はあまり食べたことないです。エビフライも特別好きというわけではないし。

マテマティカ2」さんからまた一問挑戦。例によって合っている保証はありません。

-----

方程式

x17 + 7x = 1 (☆)

について、

(1) ☆の 17 個の解の 17 乗の総和を求めよ。
(2) ☆の 17 個の解の逆数の和を求めよ。

( x - a )( x - b ) = x2 - ( a + b )x + ab より、二次方程式 x2 + Ax + B = 0 の解と係数の関係は

A = -( a + b )
B = ab

となります。これは、たしか高校時代に習った内容だったと記憶しています。

二次方程式の左辺に x - c を掛けた三次式

[ x2 - ( a + b )x + ab ]( x - c )

の二次項は、左側カッコ内の式の一次項 -( a + b )x と右側カッコ内の式の一次項 x の積と、同様に左側二次項 x2 と右側定数項 -c の積の和となるので係数は -( a + b + c ) となり、二次項の係数は解の和の符号を反転したものと等しくなります。N 次方程式の N - 1 次項の係数が同様に解の和の符号を反転したものに等しい、すなわち

Πi{1→N}( x - ai ) = xN - Σi{1→N}aixN-1 + R(x)

但し R(x) は N - 2 次以下の項の和

と仮定したとき、この式に x - aN+1 を掛けて展開すると、N 次項は、左側カッコ内の式の N - 1 次項 -Σi{1→N}aixN-1 と右側カッコ内の式の一次項 x の積と、左側 N 次項 xN と右側定数項 -aN+1 の積の和となるので係数は -Σi{1→N+1}ai となり、N 次項の係数も解の和の符号を反転したものに等しくなります。よって帰納法により、任意の自然数 N に対し、N 次項の係数が 1 である N 次方程式の係数は解の和の符号を反転したものに等しくなります。

方程式 x17 + 7x = 1 に対し、16 次項は存在しない(係数はゼロ)ことから解の和はゼロになります。任意の解について x17 = 1 - 7x なので、解 x を 17 乗した値の和は 1 - 7x の和に等しくなります。ところが 7x の和はゼロになるので、和は 17 となります。

同様に一次項について考察すると、三次式においては左側定数項 ab と右側一次項 x の積と、左側一次項 -( a + b )x と右側定数項 -c の積の和になるので係数は

( a + b )c + ab = bc + ca + ab = abc( 1/a + 1/b + 1/c )

になります。また、定数項は -abc であることはすぐに分かります。そこで N 次方程式が

Πi{1→N}( x - ai ) = xN + ( -1 )N+1Πi{1→N}aiΣi{1→N}( 1 / ai )x + ( -1 )NΠi{1→N}ai + R(x)

但し R(x) は 2 次から N - 2 次までの項の和

と仮定してみます。これに x - aN+1 を掛けて展開すると、一次項は、左側定数項 ( -1 )NΠi{1→N}ai と右側一次項 x の積と、左側一次項 ( -1 )N+1Πi{1→N}aiΣi{1→N}( 1 / ai )x と右側定数項 -aN+1 の積の和になるので係数は

( -1 )NΠi{1→N}ai + ( -aN+1 )( -1 )N+1Πi{1→N}aiΣi{1→N}( 1 / ai )
= ( -1 )N+2( 1 / aN+1i{1→N+1}ai + ( -1 )N+2Πi{1→N+1}aiΣi{1→N}( 1 / ai )
= ( -1 )N+2Πi{1→N+1}aiΣi{1→N+1}( 1 / ai )

であり、帰納法によって、任意の N に対して一次項の係数が ( -1 )N+1Πi{1→N}aiΣi{1→N}( 1 / ai ) となることが示されます。同様に、定数項が ( -1 )NΠi{1→N}ai で表されることは簡単に示すことができるので、この二つを使うと解の逆数の和は一次項の係数を定数項で割って符号を逆転することで求めることができます。

方程式 x17 + 7x - 1 = 0 の一次項は 7、定数項は -1 なので、解の逆数の和は -( 7 / -1 ) = 7 となります。

多項式の解と係数の関係を利用した問題ですね。最初はどこから手を付ければよいかなかなか気づかず苦戦しました。  

Posted by fussy at 23:30Comments(0)TrackBack(0)数学

2015年08月16日

連休最後の日

連休も今日で終わり。明日からまた仕事ですね。

連休明け直前の今日、新しいモニタが到着しました。最初、EIZO の EV2455 という、1920 x 1200 の解像度を持ったモニタに決めていましたが、その直前になって、27 型で 2560 x 1440 という解像度の EV2736W-Z という製品とどちらにするか悩み、さらに iiyama にも同じ解像度でもう少し安いモニタがあるのを見つけてさらに迷った結果、一昨日にようやく EV2736W-Z を選択しました。
27 型だと逆に見にくくなるんじゃないかとか、かなり値段も高くなるとか、いろいろと悩みのタネはあったわけですが、実際に寸法を確認して問題はなさそうだったことと、比較的安く購入できてドット落ちの保証もあるショップを見つけたことが決め手となりました。

利用してみた感想として、素人の目で見ても画像がきれいなのははっきりわかります。画面も以前より広くなったので、デスクトップを切り替えしなくても同時に二つのウィンドウを見ながら作業できるようになって便利になりました。小粒ながら便利なソフトも付属していて非常に満足してます。

それにしても、今年はエアコンにモニタと立て続けに故障したわけで、これ以上は故障のないことを祈ってます。  

Posted by fussy at 21:55Comments(0)TrackBack(0)

2015年08月14日

モニタ故障(その後)

テレビをモニタ代わりに使うのはきついので、以前使っていたノート PC からリモートでアクセスできるようにしました。これで休日の一日がつぶれてしまいました。

メイン PC は現在 Windows7 がホスト OS で、ここに VirtualBox を入れて Vine Linux をゲスト OS に使っています。
Windows7 へは vnc でアクセスできるようにしたものの、動作が重すぎてこちらは使い物になりませんでした。VirtualBox のゲスト OS にリモートデスクトップ接続できることを知って試してみたのですが接続ができず、よくよく調べてみると拡張パックをインストールしなければならないということで、さっそくダウンロード。Ver5 がリリースされていたということでついでにバージョンアップもしました。これで Linux へもアクセスできるようになり、しかもこちらは充分利用可能だったので何とかしのぐことができました。ちなみにノート PC は Lenovo の ThinkPad T510 という機種。中には xubuntu が入っていて、ずっと使ってなかったのでアップグレードも実施しました。

それから、購入するモニタの目処はついたものの、二台のうちからまだ選べきれず、悩んでいます。

いつ、どこで拾ったのか思い出せないですが、どこかの大学の入試問題だと記憶してます。

-----

t をパラメータとする次の曲線の法平面は原点で交わることを証明せよ。 x = a sin2 t, y = a sin t cos t , z = a cos t

まずは ( x, y, z ) を t で微分してみます。

dx / dt = 2a sin t cos t = a sin 2t
dy / dt = a cos2 t - a sin2 t = a cos 2t
dz / dt = -a sin t

∇ = ( dx/dt, dy/dt, dz/dt ) としたとき、∇ は曲線の接線ベクトルを表すので、その法平面は

a sin 2t ( x - a sin2 t ) + a cos 2t ( y - a sin t cos t ) - a sin t ( z - a cos t ) = 0

となります。( x, y, z ) = 0 のとき左辺は

-a sin 2t・a sin2 t - a cos 2t・a sin t cos t + a sin t・a cos t
= -a2 sin 2t・sin2 t - ( a2 / 2 ) cos 2t・sin 2t + ( a2 / 2 ) sin 2t
= -a2 sin 2t・sin2 t + ( a2 / 2 ) sin 2t ( 1 - cos 2t )
= -a2 sin 2t・sin2 t + ( a2 / 2 ) sin 2t [ 1 - ( cos2 t - sin2 t ) ]
= -a2 sin 2t・sin2 t + ( a2 / 2 ) sin 2t・2sin2 t
= -a2 sin 2t・sin2 t + a2 sin 2t・sin2 t = 0

であり、任意の t について曲線の法平面は原点で交わります。

例によって合っている保証はありません。  

Posted by fussy at 00:51Comments(0)TrackBack(0)数学

2015年08月12日

モニタ故障

ついこの間、エアコンが故障したと思ったら今度は PC 用のモニタまで壊れました。

以前に電源が入らなくなり保証期間内ということで修理に出したことがあります。どうやら同じ原因の故障のようで、電源投入しようとしても反応せず。昨日までは普通に動いていたのに...
で、保証も切れているし買い換えようかと考えてます。結構前に購入したやつで、1280 x 1024 という今では小さめのサイズ。新しいのを買おうと考えたこともありましたが、故障するまでは使おうかと長い間お世話になったモニタです。そう思うと少し残念ですね。ちなみに Logitec 製というあまり見かけない製品です。
今度は iiyama を買おうかとモニタの種類を探していたところ、EIZO のモニタがなかなかよさそうという情報を得ていろいろ調べてます。少々高いですが、保証も 5 年間と安心できそう。iiyama は画面を縦にすることができるというのが魅力的だったのですが、EIZO のモニタでもそれが可能ということで、ますます気持ちが傾いてきています。さらに、1920 x 1920 サイズのモニタというのもあって、すごくほしいわけですが、値段が 10 万超えというところでちょっと無理ですね。

ちなみに現在は TV を HDMI でつないで何とかしのいでます。PC 用途のモニタではないので、さすがに使っていて目が疲れてきます。しかもテレビ番組も見られず、PS3 も使えないという状態。連休直前にとんだハプニングでした。  

Posted by fussy at 00:36Comments(0)TrackBack(0)

2015年08月09日

サマーカット

今日は法事のため昼間からビール三昧でした。料理は、生前に祖母が好きだったカニづくしです。

そして夏に合わせて飼い犬をサマーカットにした結果、やけにほっそりと、というより貧弱になってしまいました。

サマーカット前サマーカット後
サマーカット前サマーカット後


夏にサマーカットすると涼しげに見えますが、さっき調べてみたら実際には逆効果になるのだそうです。体毛が断熱材の役割をするので熱が直接体に伝わるのを防いでくれるとのこと。朝から暑そうにしているので老犬だからと思っていましたが、もしかしたら体毛が短くなったからかも。これからはサマーカットはやめておきます。  

Posted by fussy at 20:28Comments(0)TrackBack(0)

2015年08月08日

立秋

今日から暦の上では秋になります。まだまだ暑い日が続きそうですが、今日は少しだけ涼しかったような気がします。

Twitter で数学の問題を出題しているサイトをまた見つけました。というか、フォローされていて気付かなかったようで、今日ようやくフォローいたしました。マテマティカ2 というユーザさんで、その中から一問挑戦してみました。

-----

143: 集合 M は 3 つの元 0, i, j からなる。すなわち M = { 0, i, j } である。M で加法をどのように定義すると、交換法則、結合法則を満たし、かつ減法できるようになるか。

また、上のときの次の計算をせよ。
i + i
i + j
j + j

ただし、任意の k に対して、k + 0 = k とする。

(解) 任意の k に対して k + 0 = k なので、0 + 0 = 0, i + 0 = 0 + i = i, j + 0 = 0 + j = j です。
また、i + j = i の場合 j = 0 となり、i + j = j の場合は i = 0 となるため、i + j = 0 でなければなりません。従って、

i = 0 - j = -j
j = 0 - i = -i

となります。結合法則を満たすためには、

( i + i ) + j = i + ( i + j )

が成り立つ必要がありますが、右辺は i に等しくなるため

( i + i ) + j = i より i + i = i - j = -j - j = -( j + j )

です。同様に

( j + j ) + i = j より j + j = j - i = -i - i = -( i + i )

となります。

つまり、i は j の ( j は i の ) 逆元になるように加法を定義すればよいということになります。


例によって合っている保証はないので注意です。  

Posted by fussy at 23:17Comments(0)TrackBack(0)数学

2015年08月06日

原爆投下から70年

広島に原爆が投下されてから今年で 70 年です。
節目の年に安保関連法案で大騒ぎの日本。戦時中に亡くなった人が見たらどう思うでしょうか。

日本は原発に対しても意見が対立しているわけですが、今のところは存続の方向に傾いています。核分裂を一気に行うのが原爆で、臨界に達しないようにゆっくりと反応させるのが原発。どちらも原理は同じ、と考えるとやっぱり怖いですね。  

Posted by fussy at 23:44Comments(0)TrackBack(0)

2015年08月04日

利己的個人主義

集団的自衛権の賛否で揺れる日本ですが、デモに対して「利己的個人主義」という書き込みが、しかも若手議員から上がったというのは結構インパクトがありました。戦時中なら「立派な若者だ」とほめられたのかもしれません。というか、実は「勉強会」なんかで洗脳されているのだったらと思うとゾッとしますね。

しかし、悲しいことですが自衛権そのものはもはや必要と考えざるを得ないのかもしれません。近隣の情勢も非常にきな臭いですからね。でも、集団的自衛権となるとどうしても首をかしげてしまいます。単純に考えれば、日本そのものが狙われる可能性を増やすだけですから。日本を守りたいのか、日本をアメリカの盾にしたいのか...

そして最近よくニュースになる「人を殺してみたかった」事件。これこそ利己的個人主義じゃあないでしょうかね。  

Posted by fussy at 23:17Comments(0)TrackBack(0)

2015年08月03日

はちみつの日

今日は「はちみつの日」です。例によって語呂合わせですね。

調べたら「ハサミの日」でもあるそうです。明日は 8 月 4 日なので「ハシの日」だろうかと思ったら大当たりでした。しかも「箸の日」と「橋の日」の両方ともあります。もう少しひねってもいいんじゃないでしょうか。
ちなみに、はちみつは好きですが、自分の好みにあったものを探すというほど凝っているわけでもなく。よく花の種類別に売られてたりして、試してみたいと思ったことはあるものの実行までにはいたっていません。もう過ぎてしまいましたが、せっかくの「はちみつの日」なので今度探してみようかな。

ところで、たいていはトーストやパンケーキにつけて、というのが多いですが、他にいい使い方とかないものですかね。  

Posted by fussy at 23:44Comments(0)TrackBack(0)

2015年08月02日

猛暑続き

毎日ほんとうに暑いですね。

今日は北側から寒気が流れ込んで天気が荒れると予報にあったので雨が降って暑さが和らげばと思ってましたが、全く降る気配はありません。しかし、大雨になっているところもあるみたいですね。
これだけ暑いと外にでるのも億劫になって、昨日床屋に行っただけであとは家の中で過ごしていました。午前中はエアコンなしでがんばったものの、さすがに昼になるとなしでは過ごせないです。で、息抜きの時間に YouTube でこんなのを見てました。いや、すごいものです。

  

Posted by fussy at 20:41Comments(0)TrackBack(0)