2012年3月23日金曜日

Euler法による一階常微分方程式の解法(CR回路を例に)

少し前の予告通りEuler法による微分方程式の求解を。

まず、微分方程式というのは方程式内に微分の形を含むもので、
例えば速度のみが与えられる場合にも微分方程式となると思います。
(勝手な定義してます。ごめんなさい。)

この場合、

であり、両辺を積分することで

が得られます。

これが一般的な不定積分ですけど、数値解析の場合にはdxとdtを
「無限に小さな刻み幅」から少しゆるめて、
「有限の小さな値」として取り扱います。

有限になるということは普通の値と同様に扱うことができるようになります。

よって上の式を

とできます。そしてこれは

と変形できます。

ここでvは定数、Δtは任意の刻み幅なので微小時間Δtにおける変位、
x(t+Δt)-x(t)が求められます。x(t)は現在の位置です。
最後の式は微小時間が経過したあとの位置です。
一瞬前の場所x(t)に微小時間と速度を掛けたものを足した値が新しい位置となっています。


これを基本にして次の二階微分方程式を解きます。
画像多めにつき続きからどうぞ。

2012年2月23日木曜日

Newton-Roaphson法による方程式の求解

関数のグラフ化により数値解の個数とおおよその解が判別出来たところで、
その解を求めていく作業に入ります。 

全部書くのは大変なのでwikipediaさんのお力を借ります。
http://ja.wikipedia.org/wiki/%E3%83%8B%E3%83%A5%E3%83%BC%E3%83%88%E3%83%B3%E6%B3%95

ニュートン法はwikipediaにもあるように、 まず、任意のx座標(wikiではxn)を決めて、
そこのy値での接線を引きます。



接線を引くと接線の傾きが0でなければ、x軸のどこかと交差します。(wikiではxn+1の点) 
そのxn+1の点を再びxnとして用い、そこのy値の接線を引きます。
そしてまた接線との交点をxn+1とします。 これの繰り返しで方程式の近似解が得られます。
x軸と接線との角をθとすると、tanθは

   

ここで右の二式で求まっていないものはxn+1だけなのでそれを変形すると、

 

となるので現在分かっているxn,f(xn),f'(xn)から未知の点xn+1を求められます。
 これを繰り返すと設定した点xnから大体一番近い解に収束していきます。

 Newton-Roaphson法を使うにあたって必要なこと。
 1.方程式が判っている。(関数のグラフ化では0.5X^3 + 0.75X^2 - 2X - 2)
 2.解の個数が判っている。(同じく3個)
 3.接線の方程式(方程式の一階微分)が判っている。(同じく1.5X^2 + 1.5X - 2)
 4.解の大体の値が判っている。
 こんな感じです。
使用時はValue of X にそこそこ解に近い適当な値(xn)を入れてください。
forの中で10回ループしてますけど、大体そのくらいで収束します。

二つ以上の解の場合、たとえば上の図だと初期値が3以下であれば解は1くらいの値に、
3以上であれば5くらいの値に収束します。
3の場合はエラーだと思います。(接線の傾きが0のためx軸と交わらない)


 以下リスト。

2012年1月31日火曜日

Contents

label:電子工作

トランジスタ2石アンプ
http://hamachan-pon.blogspot.com/2011/04/blog-post.html

LT Spiceの導入
http://hamachan-pon.blogspot.com/2011/04/ltspice.html

LEDバーサライタの製作(上から順に古い)
http://hamachan-pon.blogspot.com/2011/01/led.html
http://hamachan-pon.blogspot.com/2011/03/led_23.html
http://hamachan-pon.blogspot.com/2011/04/ledmarkii.html
http://hamachan-pon.blogspot.com/2011/04/ledmarkii_05.html

DCモータのPWM制御
http://hamachan-pon.blogspot.jp/2012/08/dcpwm.html

UbuntuでのAVR開発
http://hamachan-pon.blogspot.jp/2012/11/ubuntuavr.html

STM32F4 DISCOVERYことはじめ
http://hamachan-pon.blogspot.jp/2015/09/stm32f4-discovery.html

label:ControlSystem

モータのPID制御1(サーボ制御の基礎,P制御)
http://hamachan-pon.blogspot.jp/2013/12/pid1p.html

モータのPID制御2(偏差無し制御,I制御)
http://hamachan-pon.blogspot.jp/2015/04/pid1i.html

STM32F4 DISCOVERYでのPID制御
http://hamachan-pon.blogspot.jp/2015/09/stm32f4-discoverypid.html

倒立振子シミュレーション(MATLAB/Simulink)
http://hamachan-pon.blogspot.jp/2016/01/matlabsimulink.html

多入力多出力系とは
http://hamachan-pon.blogspot.jp/2016/05/blog-post.html

シンプルな外乱オブザーバ
https://hamachan-pon.blogspot.jp/2016/10/blog-post.html

4ストロークエンジンの物理モデル
https://hamachan-pon.blogspot.jp/2017/04/4.html

カルマンフィルタの基礎式を代数とベイズ定理から見る
https://hamachan-pon.blogspot.jp/2017/04/blog-post.html

label:課題

積分の近似式(台形公式/シンプソン公式)
http://hamachan-pon.blogspot.com/2011/05/blog-post.html

ガウスの消去法(上から古い)
http://hamachan-pon.blogspot.com/2011/06/1.html
http://hamachan-pon.blogspot.com/2011/06/2.html
http://hamachan-pon.blogspot.com/2011/06/3.html

lagrange補間
http://hamachan-pon.blogspot.jp/2012/11/lagrange.html

label:Programming

C言語によるWindows用(Win32)オセロ
http://hamachan-pon.blogspot.com/2011/06/windows.html

X-Windowによる数学関数のグラフ表示
http://hamachan-on.blogspot.com/2012/01/blog-post_17.html

Newton-Roaphson法による方程式の求解
http://hamachan-pon.blogspot.com/2012/02/newton-roaphson.html

Euler法による一階常微分方程式の解法(CR回路を例に)
http://hamachan-pon.blogspot.jp/2012/03/eulercr.html

C言語でニューラルネット(関数近似)
http://hamachan-pon.blogspot.jp/2015/08/c.html

C言語でニューラルネット(2次元平面での分離)
http://hamachan-pon.blogspot.jp/2015/08/c2.html

パーティクルフィルタによるグリッドマップマッチング
http://hamachan-pon.blogspot.jp/2016/06/blog-post.html

ニューラルネットで雑な手書き文字認識
https://hamachan-pon.blogspot.jp/2016/08/blog-post.html

label:LaTeX

UbuntuでLaTeX
http://hamachan-pon.blogspot.jp/2012/06/ubuntulatex.html

よく使うLaTeX文法
http://hamachan-pon.blogspot.jp/2012/06/latex.html


label:other

MacbookAir2012にUbuntu
http://hamachan-pon.blogspot.jp/2012/07/macbookair2012ubuntu.html
http://hamachan-pon.blogspot.jp/2012/08/usbmacbookair2012ubuntu.html

2012年1月17日火曜日

数学関数のグラフ表示

今回は数学関数をX-WindowSystemでグラフ化する方法を載せたいと思います。
グラフ化することによって視覚的にわかり易くなり、実数解が存在するか程度ならすぐに分かります。

ではひとまず定義。



これが表示用の関数です。

ウィンドウの大きさは480*480で、うち上下左右40pxは空白部とします。
また、数値解析における分割数は100分割で、400px内を100分割して直線で結ぶ感じです。
つまり4pxは直線だけど大きい目で見たら曲線に見えるよね、って感じかな。

線を引くためには始点と終点が必要になりますが、終点は現在の計算点、始点は前回の計算点とします。
0→1、1→2、2→3点という風になります。

以下プログラムリスト。
Linuxの人はindentコマンドで整形するなりなんなりしてくだされ。

ちなみにindentコマンドは
sudo apt-get install indent
より
indent FILENAME -OPTION
で使えます。
OPTIONは-krをつかうと幸せ。

こんな感じになります。



以下リスト。

睦月

新年明けましてもう17日となりましたが、あけましておめでとうございます。

どうにか生きながらえております。

先日、成人式がありました。僕の誕生日は今月20日なので成人してるわけでは無いのですが。
中学校時代の同級生と久々に会いましたが、案外わかるもんなんですね。
望んだ理系が多くてなんか嬉しかった感じです。N氏やT氏やR氏など。

一緒に何か作れたら良いなと思ってます。
なかまになりたそうにそちらを見ます。

半期に渡る「週1でA4を10数枚」のレポートを出される授業がなんとか終わったので久しぶりの更新に至った次第です。

ちなみにこれを書いている最中にIbus標準の変換機能が悪すぎて泣いたのでmozc入れました(笑)。

sudo apt-get install ibus-mozc
で一発です。
Ibusの設定でインプットメソッドの選択→mozc→追加で使用可能です。上に持って行ってください。

少し打っただけでもすごい優秀で涙が出てきます。
閑話休題。

先程のN氏、T氏、R氏は情報理工の専門なのでちょっと(というかかなり)知識が及ばないと感じたため、逃げて専門の理工を伸ばす方向に決めたいと思います。

そこで次回からの更新予定。(すべて物理系のシミュレーションです。ちなみに開発環境はUbuntuLinux。X-WindowSystemとC言語中心です。)

1.数学関数のグラフ表示
2.Newton-Roaphson法により方程式の数値解を求める。
3.Euler法による一階常微分方程式の解法とそのグラフ化。(CR回路を例に)
4.Euler法による二階常微分方程式の解法とそのグラフ化。(ばね・ダンパ系を例に)
5.ばねによる二階常微分方程式のリアルタイムシミュレーション。
6.振り子によるに会場微分方程式のリアルタイムシミュレーション。
//7.落下、衝突のリアルタイムシミュレーション。
//8.衛生軌道のリアルタイムシミュレーション。

を考えています。
1~6は龍大理工機械の授業である通称KOJと同じモノなので載せていいか微妙なところです(笑)。まるまるコピーではないにしろCopyRightとかないのかな。

7,8はオリジナルであり作成中なので若干更新が滞る可能性があります。


また、授業ではリアルタイムシミュレーションにおいてEuler法を用いましたが、誤差が大きいため値が発散していきます。そのため同時にRunge-Kutta法でも数値計算を行う予定です。

誤差が大きいと時間が経つにつれて振り子が運動量保存則を無視して一回転したり、床でのバウンドがどんどん高くなっていったりします(笑)。


こんな感じで新年の挨拶は終わらせていただきます。
ではまた。

2011年8月26日金曜日

picasaアドレス変更?

いつもbloggerに画像を上げる時にはgoogleのサービスであるpicasaを使っていたんですけど
どうやら現在、一部を除いてブログに画像が表示されていません。

クリックでもリンク先へ飛べないので調べたところ、どうやら画像のアドレスが変わっているようです。
さすがに全部の画像を貼り直すのはとても面倒なので他の方法を考えたんですけど、
残念ながら手作業でリンク先を変更するしかないようです。

調べても引っ掛からなかったから他の人はこんな現象起こってないのかなぁ。
最近Androidケータイに変えてそこから一度更新したので、
それが悪さをしたんじゃないかと思う反面、アドレスの先頭が変わってるので単なる変更の可能性も……。

特にgoogleからのアナウンスはないみたいですね。
と言っても訳後でないと読めませんけど(笑)


すぐに戻すにはちょっと時間が足りないのでぼちぼちって感じですねー。
電験の終わる9/4日以降かな?


夏休みはいろいろする予定だったんだけど遊んで終わっちゃいそうだなぁー……。
そして電験の得点率が6割を越しませんorz
一教科受かればそれでいいんだけどなー。


ここでgalaxy SII tips。
galaxy SIIではホームボタンと電源ボタンでスクリーンショットが撮れます。
これはiPhoneと同じみたいですね。
初期から入っている操作なのでアプリのダウンロードの必要はありません。
操作は、ホームボタンを先に押し、すかさず押したまま電源ボタンを押すことで撮ることができます。

ちょっとしたポップアップが出るので撮れたかどうか確認できます。
画像はギャラリー内に。
でもあんまり使う機会がなさそうってのもあるんだよなぁ。

以上、今回も携帯からの投稿でした。

2011年8月15日月曜日

Android

先日、携帯電話がスマートフォン、サムスン製のgalaxySIIに変わりました。
現在のところ活用できるほど何も入れていませんが、
これからいろいろ入れていく予定です。

iPhoneでなくAndroidを選んだ理由はまあ、
よくある回線の問題や開発の容易さが大きかったかな。

iPhoneのアプリはMacintoshでしか開発できないからなぁ。
その分Androidはプラットホームを選ばないし簡単。
言語もjavaだし。

そんな感じでプログラミングの練習がてら
いつものオセロでも作ってみる感じです。


そのあとはチェスとかかなー?
もちろんそっちの専門ではないので対人打ちだけですけど。
Aiはかなり敷居が……。

他にはARとか触っていけたらいいなーなんて。

今回、ケータイからの投稿なのでこのくらいで。