2012年6月20日水曜日

よく使うLaTeX文法

文章編

1.TITLEという表題をナンバリングなしでつける。
\part*{TITLE}

2.セクションをSECTIONという名前で付ける。レベル1
\section{SECTION}

3.サブセクションをSUBSECTIONという名前で付ける。レベル2
\subsection{SUBSECTION}

4.サブサブセクションをSUBSUBSECTIONという名前で付ける。レベル3
\subsubsection{SUBSUBSECTION}

2012年6月19日火曜日

UbuntuでLaTeX

台風4号で休講になって時間ができたので備忘録。

UbuntuによるLaTeXのコンパイル法。
やっぱり新しいプログラムとか書くときに一番面倒なのが開発環境の構築なので、
できるだけシンプルに、統合環境とか使わない方向で書いてみる。
インストールの概念がないのでそこで躓かない様になってる気がする。


1.まず、Ubuntuをインストール。これに関しては割愛。

2.端末を開き、以下を実行。エンターキーのあとにパスワード入力。
(入力しても何も変わらないけどEnter押すと入力したことになってる)
sudo apt-get install make

3.実行出来れば、同様に以下を実行。
sudo apt-get install ptex-base

4.同様に。
sudo apt-get install nkf

5.同様に。これでインストール終わり。
sudo apt-get install texlive-base

6.テキストエディタで以下をコピーしてMakefileという名前で保存。
(行はじめの字下げはスペースではなく必ずTABキーで)
.SUFFIXES : .tex .dvi .pdf .ltx

PROG = Title
OBJS = Part1

CC = platex
NKF = nkf
NKFOPS = -d -e
DVIP = dvipdfmx

$(PROG).pdf : $(PROG).dvi
$(DVIP) $< #字下げ

$(PROG).dvi : $(PROG).tex
$(CC) $< #字下げ

$(PROG).tex : $(OBJS:=.tex)

.ltx.tex :
$(NKF) $(NKFOPS) $< > $@ #字下げ

clean :
$(RM) *.tex *.aux *.dvi *.log #字下げ

all :
make -B && make -B && make clean #字下げ

長いので続き。

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法でも数値計算を行う予定です。

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


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