自転車ナビ

ゼロックススーパーカップに参戦することにしたのだが、自宅の練馬から日産スタジアムの距離が30㎞強ということで、自転車で行くことにした。ただし土地勘のない場所で迷って時間を無駄にしたくなかったので、携帯ナビを使うことにした。

準備

これまでの経験から、ナビを見るために携帯を一々ポケットから取り出すとそれだけで無駄に時間を食うことが判っていたのでハンドルに設置する携帯用ホルダーを用いることにした。入手したのはこれ。

仮に脱落して携帯を落としても、カバー式なら最小限のダメージで済むだろうということから選択。ただ、実際に携帯を入れてみると、電源ボタンへのアクセスが非常にしづらい。自分の使用する、Xperia Aは側面に電源ボタンがあるのだが、ビニール越しに無理やり押さざるを得ない。バッテリーを節約するためにこまめに画面を消したりしたい時不便だ。また、電源供給用コネクタも側面なため、バッテリーから電源を摂りながら運用することもできない。(もしかしたらL型のプラグを持つケーブルならいけるかもしれない)

また、ナビ使用では相当バッテリーも消耗するだろうから、予備のバッテリー。充電しながらの走行は出来ないが、試合中に繋いでおけば回復するだろうと期待。

ナビに関しては特に用意せず、グーグルマップの徒歩用ナビを使ってみた。自動車用と違って徒歩用は最短距離となるためその分自転車では効率的だろうと思ったからだ。

こんな感じでゼロックスに参戦した。

感想

ホルダー自体は非常にしっかりと固定出来て走っていても特に脱落の心配は感じなかった。ビニール越しの画面の映りも特に問題はなく、タッチパネルの感度が阻害されることも無かった。グローブがタッチパネル向けだったら操作に関するストレスは感じないだろう。ただ、やはり電源ボタンの操作は困難で、結論としては物は悪くないが、使う機種を選ぶかなといったところ。

ナビはダメ。自転車で楽しようと思ったら距離よりどれだけ平坦な道を使うかが重要なのはよく知られているが、グーグルマップの徒歩用ではお構いなしに急坂のあるコースを選んでくるし、さらに、階段まで入ってたりする。横浜の丘陵地帯のコースを登らされて下りが階段だった時にはのぼりで稼いだ位置エネルギーを思って泣きそうになった。また、徒歩に合わせて合図が出るため自転車の走行速度では全てタイミングが遅い。入り組んだ道になると却って迷わされる。やっぱり自転車専用ナビが必要だろう。

携帯バッテリーの持ちに関しては、やはり相当食う。環八~二子玉川~多摩川サイクリングロード~第三京浜側道~日産スタジアムというようなコースを想定していたが、二子玉川につくころにはバッテリーは40%程度にまでなってしまって、もっとも使いたいエリアで使えないというような感じになってしまった。長距離走るならやはり予備バッテリーを常に繋いでおく必要がありそうだ。

用意したバッテリーは十分な性能で、試合中に携帯に繋いでおいたら、帰りには100%まで回復していた。

試合は負けた。

 

UCG102

GUITER/USBインターフェイスのUCG102が安いので買ってみた。

インストールCDにはなるべく頼らず、ドライバーは最新版を入手。

アンプシミュレータはAC BOX COMBOのシリアルがついているが、インストールする前にDownloads : Drivers & Other Files | Supportより、NI SERVICE CENTERの新しい物を入れておいてから、シミュレータ本体をインストールする(インストール後にサービスセンターのインストールのチェックボックスにチェックが入っているがキャンセル)。新しい物でないとアクティベーション不可能。正しいかどうか判らないけど、設定さえすればこれだけでギターをPCのスピーカーで鳴らせる。

Schmidtサイクルの導出

Schmidtサイクルはスターリングエンジンの基本的な計算モデルとして広く知られているが、その導出過程を説明した日本語のリソースがあまり無いように感じている。そこで1984年刊行の「Stirling Cycle Engine Analysis」よりUrieliの手法を翻訳して紹介する。

背景

スターリングエンジンの概念における見かけ上の単純さと、その数学的解析の取り扱い憎さは矛盾している。理想化されたエンジンのモデルであっても、それを単純な閉じた式の表現で記述することは難しく、このことは、現在でも存在する一般に広がった懐疑論及び理解不足の理由の一つである。

我々は第2章で理想等温モデルを記述する基本的な方程式のセット(表2.1)を得た。Polytechnic institute のドイツ人 Gustav Schmidt は、1871年、これらの方程式について、作動空間が正弦的容積変化を行う特殊なケースにおける閉形式の解を導出する解析を発表した。(Schmidt 1871) この解析は古典的なスターリングサイクルの解析として現在でも用いられている。それは、図A.1.1に示される、非常に成功した Lehmann エンジンを記述するため導出された。論文にはエンジンの詳細な記述が含まれ、エンジンへの明晰な洞察および評価が示されている。図A.1.1から、非常に長い水平シリンダーABCが用いられているのを見てとれ、その中で、同心のディスプレーサLとパワーピストンDが、やや複雑な駆動機構に従って往復する。フルサイズの完全なLehmannエンジンはミュンヘンのドイツ博物館に永久展示されており、近年 Kolin(1972)による、エンジンの動作の明白かつモダンな解説が提供されている。

駆動機構は正弦運動を生み出さない。Schmidt は、'想像上の無限長のスラストロッドを用い、パワーピストンとディスプレーサの純粋な動作(正弦運動)を達成する'等価な機構を誘導した。

Lehmannエンジンのピストンシールは、自転車のポンプと同様に巧妙に構成され、一定の圧力の制限の下運用される。パワーピストンは内側に折り返された皮のスリーブを用いることで密閉される。エンジン内部の空気が外部の大気圧より高い圧力を持ちさえすれば、このスリーブは外部への空気の流出を効果的に防止する。しかしながら、内部の圧力が通常の大気圧以下に低下するやいなや外部の空気がエンジン内部に流入することを許した。

'Lehmannエンジンの配置は、パワーピストンが常に冷たい空気とのみ接触しているという優越性を持つ。それによって内側に折り返した皮のスリーブが燃えてしまうことを防止している。'

Schmidtは高圧でのサイクルの作動に優越性があること、その更なる状態を痛切に感じていた。'疑いなく未来への約束を持つただ一つのシステムであって、なぜなら、高圧のエンジンが低温を用い、それにより耐久性のある機械が製作されるからだ。'

興味深いことは、初期のEricssonエンジンにおける再生器の使用についての記述があるにも関わらず、論文を通して再生器の重要性への言及が為されていないことである。図A.1.1において、我々は、3番目のシリンダーが炉に囲まれ、残りのシリンダーがウォータージャケットに囲まれていることに気付く。'ディスプレーサは、それ自身とシリンダーA、間に入る部品B及び加熱容器Cの間に、環状の隙間の断面が、空気の通行における最小限の抵抗を許すのに十分の広さ、かつ加熱と冷却が可能な限り速やかに達成されるための薄い空気層を形成するのに十分な狭さの、丁度よい大きさの空間を残している。Lehmann エンジンに再生器が備えられていなのは明白である。今では、周期的定常状態の下でのサイクルを通じて再生器へ伝達される正味の熱量は0でありことから、Schmidt が再生器の重要性を認識することが出来なかったと考えられる。彼はZeunerによる教科書を'完全でシンプルかつ明白な理論'を持つ空気エンジンの教科書として参照しているが、同じ教科書でZeunerは空気エンジンでの再生器の使用を非難している。(Finkelstein 1959)

解析

Schmidt によって取られた解析のアプローチは、以下に再掲する式(2.5)によって与えられる圧力の関係を導出するまで、2章で用いられた等温解析に殆ど密接に従う。:

{\displaystyle p=MR{\left( \frac{V_c}{T_k}+\frac{V_k}{T_k}+\frac{V_r\mathrm{ln}\left( \frac{T_h}{T_k}\right) }{\left(T_h-T_k\right)}+\frac{V_h}{T_h}+\frac{V_e}{T_h}\right) }^{-1}\tag{A.1.1} }

正弦的容積変化は以下に示すように、式(2.15)と(2.16)で得られた。

{\displaystyle \begin{align} V_c=V_{clc}+V_{swc}\left(1+\mathrm{cos}\theta)\right/2\tag{A.1.2}\\ V_e=V_{cle}+V_{swe}\left\{1+\mathrm{cos}\left(\theta+\alpha)\right\}\right/2 \tag{A.1.3} \end{align}}

式(A.1.2)と式(A.1.3)を式(A.1.1)に代入して整理すると以下の式が得られる。

{\displaystyle p=MR{\left\{s+\left(\frac{V_{swe}\mathrm{cos}\alpha}{2T_h}+\frac{V_{swc}}{2T_k}\right)\mathrm{cos}\theta-\left( \frac{V_{swe}}{2T_h}\mathrm{sin}\alpha \right) \mathrm{sin} \theta \right\}}^{-1} \tag{A.1.4}}

ここでsは以下の式である。

{\displaystyle s=\left\{\frac{V_{swc}}{2T_k}+\frac{V_{clc}}{T_k}+\frac{V_k}{T_k}+\frac{V_{r}\mathrm{ln}\left( \frac{T_h}{T_k}\right) }{T_h-T_k}+\frac{V_h}{T_h}+\frac{V_{swe}}{2T_h}+\frac{V_{cle}}{T_h}\right\} }

図A.1.2を参照して、以下の三角法による置換えを考えると、

{\displaystyle\begin{align} c\,\mathrm{sin}\beta =\frac{V_{swe} \mathrm{sin} \alpha}{2T_h}\tag{A.1.5}\\ c\,\mathrm{cos}\beta =\frac{V_{swe} \mathrm{cos} \alpha}{2T_h} +\frac{V_{swc}}{2T_h}\tag{A.1.6} \end{align}}

ここでβは、

{\displaystyle \beta=\mathrm{tan}^{-1}\left( \frac{V_{swe}\mathrm{sin} \alpha /T_h}{V_{swe}\mathrm{cos} \alpha /T_h+V_{swc}/T_k}\right) \tag{A.1.7}}

また、cは、

{\displaystyle c=\frac{1}{2}{\left\{ {\left( \frac{V_{swe}}{T_h}\right) }^{2}+2\frac{V_{swe}}{T_h}\frac{V_{swc}}{T_k}\mathrm{cos} \alpha +{\left( \frac{V_{swc}}{T_k}\right) }^{2}\right\} }^{\frac{1}{2}} \tag{A.1.8}}

である。

式(A.1.5)と(A.1.6)を式(1.1.4)に代入して整理すると以下の式が得られる。

{\displaystyle p=\frac{MR}{s\left(1+b\,\mathrm{cos}\phi\right)} \tag{A.1.9} }

ここで、

{\displaystyle \phi=\theta+\beta } {\displaystyle b=c/s }

である。

式(A.1.9)は'caloric lineの方程式'で、Schmidtによって得られたものと同じ形である。圧力の最大値と最小値はcosφの極値から簡単に求められる。

{\displaystyle p_{max}=\frac{MR}{s\left(1-b\right)} \tag{A.1.10} } {\displaystyle p_{min}=\frac{MR}{s\left(1+b\right)} \tag{A.1.11} }

サイクル中の平均圧力は以下の式で与えられる。

{\displaystyle\begin{align} p_{mean}=\frac{1}{2\pi }\int_{0}^{2\pi }pd\phi\\ =\frac{MR}{2\pi s}\int_{0}^{2\pi}\frac{1}{1+b\,\mathrm{cos}\left( \phi\right) }d\phi\tag{A.1.12} \end{align}}

積分表(Dwight 1961)から式(A.1.12)は以下の式に整理される。

{\displaystyle p_{mean}=MR/(s\sqrt{1-b^2}) \tag{A.1.13} }

式(A.1.13)は、作動ガスの全質量と、比較的簡単に定められた平均作動ガス圧力を関連付ける、最も手頃な手法であり、この目的の下、この本を通じて用いられる。

作動空間VcとVeの容積変化の効果により、エンジンにより外部に仕事がなされる。エンジンによってなされる全仕事は、膨張空間及び圧縮空間にて行われた仕事の代数和となる。サイクルを完了することで以下の式が得られる。

{\displaystyle\begin{align} W_c=\oint p\,dV_c=\int_{0}^{2\pi}p\frac{dV_c}{d\theta}d\theta \tag{A.1.14}\\ W_e=\oint p\,dV_e=\int_{0}^{2\pi}p\frac{dV_e}{d\theta}d\theta \tag{A.1.15}\\ W=W_e+W_c \tag{A.1.16} \end{align}}

微分方程式(A.1.2)と(A.1.3)より、容積の導関数は以下のようになる。

{\displaystyle\begin{align} \frac{d\,V_c}{d\theta}= -\frac{1}{2}V_{swc}\mathrm{sin} \theta \tag{A.1.17}\\ \frac{d\,V_e}{d\theta}= -\frac{1}{2}V_{swe}\mathrm{sin}\left( \theta+\alpha\right) \tag{A.1.18} \end{align}}

式(A.1.17)(A.1.18)及び(A.1.9)を式(A.1.14)(A.1.15)に代入すると以下の式が得られる。

{\displaystyle\begin{align} W_c=-\frac{V_{swc}MR}{2s}\int_{0}^{2\pi }\frac{\mathrm{sin} \theta }{1+b\,\mathrm{cos}\left( \beta+\theta\right) }d\theta \tag{A.1.19}\\ W_e=-\frac{V_{swe}MR}{2s}\int_{0}^{2\pi }\frac{\mathrm{sin}\left( \theta+\alpha\right) }{1+b\,\mathrm{cos}\left( \beta+\theta\right) }d\theta \tag{A.1.20} \end{align}}

以下の式(A.1.19)と(A.1.20)の積分の解を求める方法はSchmidtによるものとは幾分異なる。しかしながら、筆者はより理解しやすいものと考えている。

まず、圧力の式におけるフーリエ級数展開を検討する。この展開における一つの項だけが0でない積分を返すということが解る。この積分を行うことによって厳密解が得られる。

式(A.1.21)に示されるp(φ)のフーリエ級数展開は以下のようになる

{\displaystyle p\left( \phi\right) =p_0+\sum_{i=1}^{\infty }\left\{p_{ci}\mathrm{cos}\left( i\phi\right) +p_{si}\mathrm{sin}\left(i\phi\right)\right\} \tag{A.1.21} }

ここで、

{\displaystyle\begin{align} p_{0}=\frac{1}{2\pi }\int_{0}^{2\pi }p\left( \phi\right) d\phi\\ p_{ci}=\frac{1}{\pi }\int_{0}^{2\pi }p\left( \phi\right) \mathrm{cos}\left( i\phi\right) d\phi\\ p_{si}=\frac{1}{\pi }\int_{0}^{2\pi }p\left( \phi\right) \mathrm{sin}\left( i\phi\right) d\phi \end{align}}

ここで、bの一般的な値における式(A.1.9)のグラフを参照すると、p(φ)は変数φの偶関数であること気づき、従ってコサインの項のみによって表現できる。これより式(A.1.21)は以下のように省略でき、

{\displaystyle p\left( \phi\right) =p_0+\sum_{i=1}^{\infty }p_{ci}\mathrm{cos}\left( i\phi\right) \tag{A.1.22} }

式(A.1.22)と(A.1.17)を(A.1.14)に代入して以下の式が得られる。

{\displaystyle W_c= -\frac{{V}_{swc}}{2} \int_{0}^{2\pi }\left(p_0+\sum_{i=1}^{\infty }p_{ci}\mathrm{cos}\left(i\phi\right) \right)\mathrm{sin}\theta d\theta \tag{A.1.23} }

式(A.1.23)を展開して、

{\displaystyle W_c= -\frac{{V}_{swc}p_0}{2} \int_{0}^{2\pi }\mathrm{sin} \theta d\theta -\frac{V_{swc}}{2} \sum_{i=2}^{\infty }{p}_{ci}\int_{0}^{2\pi } \mathrm{cos}\left\{i \left( \theta+\beta\right)\right\}\mathrm{sin} \theta d\theta -\frac{V_{swc}{p}_{c1}}{2} \int_{0}^{2\pi }\mathrm{cos}\left( \theta+\beta\right) \mathrm{sin} \theta d\theta \tag{A.1.24} }

式(A.1.24)の右辺の最初の2項が0であることは簡単にわかり、結果として以下の式となる。

{\displaystyle W_c= -\frac{V_{swc}{p}_{c1}}{2} \int_{0}^{2\pi }\mathrm{cos}\left( \theta+\beta\right) \mathrm{sin} \theta d\theta \tag{A.1.25} }

式(A.1.25)の積分を実行すると、

{\displaystyle W_c=\frac{1}{2}\pi V_{swc}p_{c1} \mathrm{sin}\beta \tag{A.1.26} }

膨張空間に対しても同様に

{\displaystyle W_e=\frac{1}{2}\pi V_{swe} p_{c1}\mathrm{sin}\beta \tag{A.1.27} }

ここで、式(A.1.21)と(A.1.9)より、

{\displaystyle p_{c1}=\frac{MR}{\pi s}\int_{0}^{2\pi }\frac{\mathrm{cos}\, \phi }{\left(1+b\,\mathrm{cos} \phi\right) }d\phi \tag{A.1.28} }

式(A.1.28)は積分表を用いて2段階で求めることができ、以下のようになる(Dwight 1961):

{\displaystyle \begin{align} p_{c1}=\frac{MR}{\pi s}\left( \frac{2\pi }{b}-\frac{1}{b}\int_{0}^{2\pi }\frac{1}{1+b\,\mathrm{cos}\, \phi }d\phi\right)\\ =\frac{MR}{\pi s}\left( \frac{2\pi }{b}-\frac{2\pi }{b\sqrt{1-b^2}}\right)\\ =\frac{2MR}{sb}\left( 1-\frac{1}{\sqrt{1-b^2}}\right) \end{align} \tag{A.1.29} }

式(A.1.29)と(A.1.13)を(A.1.26)(A.1.27)に代入して最終的に以下の式が得られる。

{\displaystyle \begin{align} W_c=\pi V_{swc}p_{mean}\mathrm{sin} \beta \left( \sqrt{1-{b}^{2}}-1\right) /b \tag{A.1.30}\\ W_e=\pi V_{swe}p_{mean}\mathrm{sin}\left( \beta-\alpha\right) \left( \sqrt{1-{b}^{2}}-1\right)/ b \tag{A.1.31} \end{align} }

式(A.1.30)と(A.1.31)はSchmidtによって得られたものと基本的に同じ結果であり、解析の主要な解析結果を構成する。

ここで、Schmidt解析は理想等温解析を基礎においていることから、熱効率はカルノー効率に収束する。熱効率はエンジンの行った仕事と外部から供給された熱量との比で定義される。2章で外部からの熱の供給は膨張空間で行われた仕事と等しいことが示されている。(式(2.12)と(2.13))従って、

{\displaystyle \eta=W/W_e=\left(W_c+W_e\right)/W_e \tag{A.1.32} }

式(A.1.30) と(A.1.31)を(A.1.32)に代入して、

{\displaystyle \eta=1+\frac{V_{swc}\,\mathrm{sin} \beta }{V_{swe}\,\mathrm{sin}\left( \beta-\alpha\right) } \tag{A.1.33} }

式(A.1.33)を展開して整理すると、

{\displaystyle \eta=1-\frac{{V}_{swc}}{{V}_{swe}}\left(\frac{\mathrm{tan} \beta }{\mathrm{sin} \alpha -\mathrm{tan} \beta \mathrm{cos}\alpha }\right) \tag{A.1.34}}

式(A.1.7)を(A.1.34)に代入して整理すると、以下の式が得られ、これはカルノー効率を示すものである。

{\displaystyle \eta=1-T_k/T_h \tag{A.1.35} }

maximaにおける三角関数

数学関数

三角関数三角関数双曲線関数双曲線関数
  • sin(x) : 正弦
  • cos(x) : 余弦
  • tan(x) : 正接
  • csc(x) : 余割
  • sec(x) : 正割
  • cot(x) : 余接
  • asin(x) : 逆正弦
  • acos : 逆余弦
  • atan(x) : 逆正接
  • atan2(y,x) :-πから πまでの間の atan(y/x)の値を得る
  • acsc(x) : 逆余割
  • asec(x) : 逆正割
  • acot(x) : 逆余接
  • sinh(x) : 双曲正弦
  • cosh(x) : 双曲余弦
  • tanh(x) : 双曲正接
  • sech(x) : 双曲正割
  • csch(x) : 双曲余割
  • coth(x) : 双曲余接
  • acosh(x) : 逆双曲余弦
  • acoth(x) : 逆双曲余接
  • acsch(x) : 逆双曲余割
  • asech(x) : 逆双曲正割
  • asinh(x) : 逆双曲正弦
  • atanh(x) : 逆双曲正接

パッケージ

atrig1

atrig1パッケージは、逆三角関数のためのいくつかの追加の整理規則を含む。Maximaの既設の規則と共に、以下の角度が完全に提供される: 0, %pi/6, %pi/4, %pi/3, %pi/2。他の3象限の対応する角度も利用出来る。使用には load(atrig1);を実行すること。

ntrig

ntrigパッケージは、引数がf(n %pi/10)形式の三角関数を整理するのに使われる整理規則の集合を含む。ここでfは関数 sin, cos, tan, csc, sec, cotのいずれかである。

Maxima関数

関数名説明
trigexpand exprの中に現れる角の和や角の倍数の三角関数双曲線関数を展開する。
trigreduce sin(x),sinh(x),cos(x),cosh(x)の積、べき乗を、xの倍数の関数に統合する。
trigsimp tan, secなどを含む式を sin, cos, sinh, coshに整理するために、恒等式 sin(x)^2 + cos(x)^2 = 1 と cosh(x)^2 - sinh(x)^2 = 1 を用いる。
trigrat 三角関数の整理された標準疑似線形形式を与える

trigexpand

trigexpand (expr)

exprの中に現れる、角度の和や角度の積を持つ三角関数双曲線関数を展開する。最もよい結果を得るためにはexprを展開しておく。整理におけるユーザー制御を高めるために、この関数は、一度に1レベルのみ展開を行う。直ちにサインとコサインへの完全な展開を得るには trigexpand変数にtrueを設定すること。

trigexpandは以下のグローバル定数によって管理される:

trigexpand, halfangles, trigexpandplus, trigexpandtimes

(%i1) x+sin(3*x)/sin(x),trigexpand=true,expand;
                         2           2
(%o1)               - sin (x) + 3 cos (x) + x
(%i2) trigexpand(sin(10*x+y));
(%o2)          cos(10 x) sin(y) + sin(10 x) cos(y)

trigreduce

trigreduce (expr, x)

trigreduce (expr)

sin(x),sinh(x),cos(x),cosh(x)の積、べき乗を、xの倍数の関数に統合する。これらの関数が分母にある時これらの消去を試みる。xを引数に指定しない場合はexprの中の変数について行われる。

poissimpも参照してください。

(%i1) trigreduce(-sin(x)^2+3*cos(x)^2+x);
               cos(2 x)      cos(2 x)   1        1
(%o1)          -------- + 3 (-------- + -) + x - -
                  2             2       2        2

trigsimp

trigsimp (expr)

tan, secなどを含む式を sin, cos, sinh, coshに整理するために、 恒等式 sin(x)^2 + cos(x)^2 = 1 と cosh(x)^2 - sinh(x)^2 = 1 を用いる。

trigreduce, ratsimp, radcanは結果を更に整理できるかもしれません。

demo ("trgsmp.dem")は trigsimpのいくつかの例を表示します。

trigrat

trigrat (expr)

三角関数の整理された標準疑似線形形式を与える; 式exprは いくつかのsin, cosもしくはtanの有理分数であり、それらの引数は、整数係数を持つ、いくつかの変数(もしくは核)と %pi/n (nは整数)の線形形式である。結果は sinと cosに関して線形の分子と分母を持つ整理された分数となる。trigrat関数は可能なときはいつも線形化を行う。

(%i1) trigrat(sin(3*a)/sin(a+%pi/3));
(%o1)            sqrt(3) sin(2 a) + cos(2 a) - 1

以下の例は Davenport, Siret, and TournierのCalcul Formel, Masson (もしくは英語版ではAddison-Wesley), 1.5.5節, モーレイの定理から引用。

(%i1) c : %pi/3 - a - b$
(%i2) bc : sin(a)*sin(3*c)/sin(a+b);
                                          %pi
                  sin(a) sin(3 (- b - a + ---))
                                           3
(%o2)             -----------------------------
                           sin(b + a)
(%i3) ba : bc, c=a, a=c;
                                         %pi
                    sin(3 a) sin(b + a - ---)
                                          3
(%o3)               -------------------------
                                  %pi
                          sin(a - ---)
                                   3
(%i4) ac2 : ba^2 + bc^2 - 2*bc*ba*cos(b);
         2         2         %pi
      sin (3 a) sin (b + a - ---)
                              3
(%o4) ---------------------------
                2     %pi
             sin (a - ---)
                       3
                                       %pi
 - (2 sin(a) sin(3 a) sin(3 (- b - a + ---)) cos(b)
                                        3
             %pi            %pi
 sin(b + a - ---))/(sin(a - ---) sin(b + a))
              3              3
      2       2              %pi
   sin (a) sin (3 (- b - a + ---))
                              3
 + -------------------------------
                2
             sin (b + a)
(%i5) trigrat (ac2);
(%o5) - (sqrt(3) sin(4 b + 4 a) - cos(4 b + 4 a)
 - 2 sqrt(3) sin(4 b + 2 a) + 2 cos(4 b + 2 a)
 - 2 sqrt(3) sin(2 b + 4 a) + 2 cos(2 b + 4 a)
 + 4 sqrt(3) sin(2 b + 2 a) - 8 cos(2 b + 2 a) - 4 cos(2 b - 2 a)
 + sqrt(3) sin(4 b) - cos(4 b) - 2 sqrt(3) sin(2 b) + 10 cos(2 b)
 + sqrt(3) sin(4 a) - cos(4 a) - 2 sqrt(3) sin(2 a) + 10 cos(2 a)
 - 9)/4

オプション変数

変数名デフォルト値説明
%piargs true 引数が %pi, %pi/2, %pi/3, %pi/4, %pi/6のいずれかの整数倍の時は、三角関数を代数定数に整理する。
%iargs true 引数が明らかに虚数単位 %i との積である場合、 三角関数双曲線関数に整理する。
halfangles false 引数expr/2をとる三角関数をexprの関数に整理する。
trigexpandplus true trigexpandplusは trigexpandの「和」規則を制御する。
trigexpandtimes true trigexpandtimesは trigexpandの「積」規則を制御する。
triginverses true triginversesは三角関数双曲線関数とそれらの逆関数の合成の整理を制御する。
trigsign true trigsignがtrueの時、三角関数への負の引数の整理を制御する。

%piargs

デフォルト値: true

%piargsが trueの時で、 引数が %pi, %pi/2, %pi/3, %pi/4, %pi/6のいずれかの整数倍の時は、三角関数が代数定数に整理される。

Maximaは %pi etc.と整数変数(整数として宣言されたシンボル)の積について、幾つかの恒等式を用いて処理する。

(%i1) %piargs : false$
(%i2) [sin (%pi), sin (%pi/2), sin (%pi/3)];
                                %pi       %pi
(%o2)            [sin(%pi), sin(---), sin(---)]
                                 2         3
(%i3) [sin (%pi/4), sin (%pi/5), sin (%pi/6)];
                      %pi       %pi       %pi
(%o3)            [sin(---), sin(---), sin(---)]
                       4         5         6
(%i4) %piargs : true$
(%i5) [sin (%pi), sin (%pi/2), sin (%pi/3)];
                                sqrt(3)
(%o5)                    [0, 1, -------]
                                   2
(%i6) [sin (%pi/4), sin (%pi/5), sin (%pi/6)];
                         1         %pi   1
(%o6)                [-------, sin(---), -]
                      sqrt(2)       5    2
(%i7) [cos (%pi/3), cos (10*%pi/3), tan (10*%pi/3),
       cos (sqrt(2)*%pi/3)];
                1    1               sqrt(2) %pi
(%o7)          [-, - -, sqrt(3), cos(-----------)]
                2    2                    3

%piと %pi/2 が整数変数にかけられた時、いくつかの恒等式が適用される。

(%i1) declare (n, integer, m, even)$
(%i2) [sin (%pi * n), cos (%pi * m), sin (%pi/2 * m),
       cos (%pi/2 * m)];
                                      m/2
(%o2)                  [0, 1, 0, (- 1)   ]

%iargs

デフォルト値: true

%iargsが trueの時、引数が明らかに虚数単位%iとの積であるならば、三角関数双曲線関数に整理する。さらに引数が実数の時でも整理は実行る。; Maximaはただ、引数が逐語的に%iとの積であるかどうかをのみ考慮する。

(%i1) %iargs : false$
(%i2) [sin (%i * x), cos (%i * x), tan (%i * x)];
(%o2)           [sin(%i x), cos(%i x), tan(%i x)]
(%i3) %iargs : true$
(%i4) [sin (%i * x), cos (%i * x), tan (%i * x)];
(%o4)           [%i sinh(x), cosh(x), %i tanh(x)]

引数が明らかに実数の時においても整理は実行される。

(%i1) declare (x, imaginary)$
(%i2) [featurep (x, imaginary), featurep (x, real)];
(%o2)                     [true, false]
(%i3) sin (%i * x);
(%o3)                      %i sinh(x)

halfangles

デフォルト値: false

halfanglesがtrueの時、引数 expr/2の三角関数は exprの関数に整理される。

区間 0 &lt x &lt 2*%piの実引数 xに対して 半角の正弦は簡単な式に整理される:

                         sqrt(1 - cos(x))
                         ----------------
                             sqrt(2)

すべての複素引数zについてこの式を正しくするためには複雑な要素が必要となる:

           realpart(z)
     floor(-----------)
              2 %pi
(- 1)                   (1 - unit_step(- imagpart(z))

                            realpart(z)            realpart(z)
                      floor(-----------) - ceiling(-----------)
                               2 %pi                  2 %pi
                ((- 1)                                          + 1))

Maximaは、この要素と、関数sin, cos, sinh, coshに対する同様の要素を知っている。 引数zの特別な値に対してこれらの因子は相応に整理される。

(%i1) halfangles:false;
(%o1)                                false
(%i2) sin(x/2);
                                        x
(%o2)                               sin(-)
                                        2
(%i3) halfangles:true;
(%o3)                                true
(%i4) sin(x/2);
                                                    x
                                            floor(-----)
                                                  2 %pi
                      sqrt(1 - cos(x)) (- 1)
(%o4)                 ----------------------------------
                                   sqrt(2)
(%i5) assume(x>0, x<2*%pi)$
(%i6) sin(x/2);
                               sqrt(1 - cos(x))
(%o6)                          ----------------
                                   sqrt(2)

 

trigexpandplus

デフォルト値: true

trigexpandplusは trigexpand関数の「和」規則を制御する。trigexpand関数が使われる、あるいはtrigexpand変数がtrueに設定されている時、式中の和(例えば sin(x+y)))の展開は、trigexpandplusが trueの時だけ行われる。

trigexpandtimes

デフォルト値: true

trigexpandtimesは trigexpandの「積」規則を制御する。 trigexpand関数が使われる、 あるいはtrigexpand変数がtrueに設定されている時、式中の積(例えば sin(2*x))の展開は、 trigexpandtimesが trueの時だけ行われる。

triginverses

デフォルト値: true

triginversesは三角関数双曲線関数とそれらの逆関数の合成の整理を制御する。

もし allなら、 例えば、atan(tan(x))と tan(atan(x))のどちらも xに整理される。

もし trueなら、 arcfun(fun(x))の整理は行われない。

もし falseなら、 arcfun(fun(x))と fun(arcfun(x))のどちらの整理も行われない。

trigsign

デフォルト値: true

trigsignがtrueの時、三角関数への負の引数の整理を認める。例えば、trigsignがtrueの時だけsin(-x)は -sin(x)に変換される。

関数ev

ev (expr, arg_1, …, arg_n)

引数arg_1, …, arg_nにおける状態の下、式exprを評価。評価の結果(別の式)を返す。

評価手順

  1. 引数より環境の設定。
    simp exprを整理する。falseなら整理を抑制するスイッチsimpの設定に関わらずです。
    noeval evの評価フェイズを抑制する。 (以下のステップ(4)を参照) これは、他のスイッチとの連携時や、exprを再評価せずに再整理をさせる時に有用。
    nouns exprの中の名詞形式 (例えば'integrateや'diffのような未評価関数)を評価する。
    expand 展開する。
    expand (m, n) maxposexとmaxnegexの値をそれぞれmとnに設定して展開する。
    detout exprの中で計算されるどんな逆行列も、逆行列の外側に行列式を保つようにする。
    diff exprの中のすべての微分を実行する。
    derivlist (x, y, z, ...) 指定された変数に関する微分のみを実行する。
    risch exprの中の積分をRischアルゴリズムを使って評価する。特殊なシンボルnounsを使った時には標準の積分ルーチンが呼び出される。
    float 非整数有理数浮動小数点に変換する。
    numer 数値引数が指定された(指数関数を含む)いくつかの数学関数を浮動小数点に評価する。 また、exprの中の numerval宣言された変数は、宣言された値に置き換えられる。 また、floatスイッチをオンにする。
    pred 述語(trueもしくはfalseに評価される式)を評価する。
    eval exprの特別な後評価をする。(ステップ(5)を参照。) evalは複数の場合があり、それぞれのインスタンスについて再評価される。
    評価フラグ(evflagを参照)として宣言されたアトムA exprの評価の最中、Aがtrueにバインドされる。
    V: expression(あるいはV=expression) exprの評価の最中、Vがexpressionの値にバインドされる。
    • もしVがMaximaオプションなら、exprの評価の最中、Vの値にexpressionが使われることに注意。
    • もしevの複数の引数がこのタイプの場合、並列してバインドされる。
    • もしVが非アトムの式なら、バインドではなく、代入が実行される。
    評価関数(evfun参照)として宣言されている場合の関数名F Fが exprに適用される。
    他のどんな関数名(例えば、sum) exprの中にそれらの名前が現れた時それらが動詞であるかのように評価する。 加えて、exprの中で出現する関数(例えばF(x))を、exprの今回の評価の目的のため、 F(X) := expressionをevの引数に与えて、局所的に定義することができる。
    以上で言及しなかったアトム、添字付き変数、または、添字付き式 それを評価して、もしその結果が等式もしくは割り当てであったら、示されたバインドもしくは代入を実行する。 もしその結果がリストなら、リストのメンバが、 evに与えられた追加の引数であるかのように扱う。 これにより solveが返すような、与えられた等式のリスト(例えば、 [X=1,Y=A**2])や等式の名前のリスト(例えば、[%t1, %t2]。ここで %t1, %t2は等式)が使える。

    evの引数は代入等式と評価関数以外はどんな順序で与えてもかまわない。代入等式は左から右へ順に扱われ、評価関数は、例えば、ev (expr, ratsimp, realpart)は realpart (ratsimp (expr))と扱われるように合成される。

    simp, numer, floatスイッチは、ブロックの中でローカルにも、 またMaximaの中でグローバルにも設定でき、その場合リセットされるまで効果を保つ。

    numerと floatスイッチがともに trueでない場合、 もし exprが標準有理式(CRE)なら evが返す式もまたCRE。

  2. step (1)の最中に、引数の中のもしくは引数の値の、等式の左辺に現れる添字なしの変数のリストを作る。 exprの中の変数(添字なし変数や配列関数に関連づけられていない添字付き変数)は、 先のリストに現れるものを除いて、グローバルな値に置き換えられる。 普通、 exprは、ただのラベルだったり (以下の例の %i2のように) %だったりするので、 その場合,このステップは単にラベルされた式を取り出し、 evはその式に対して機能することとなる。
  3. 引数で指定されたどんな代入文もすぐ実行される。
  4. (引数でnoevalが指定されていない限り)結果の式は再評価され 引数に従って整理される。 exprの中のどんな関数コールもその中の変数が評価された後実行されること、 ev(F(x))は F(ev(x))のように振る舞うことに注意。
  5. 引数の中のevalのそれぞれのインスタンスのために step (3)(4)を繰り返す。

演算子

'

シングルクォート演算子 'は評価を抑制する。

シンボル シンボルが評価されない。
関数コール 関数の引数は(抑制されない限り)評価される、関数コールは評価されない。 結果は関数コールの名詞形。
括弧でくくられた式 式の中のすべてのシンボルと関数コールは評価されない。 例えば、 '(f(x))は式 f(x)を評価しないことを意味する。 'f(x)(f(x)ではなく fへ適用されたシングルクォート)は [x]に適用された fの名詞形を返す。

シングルクォートは式整理を抑制しません。

:

割り当て演算子

左辺が(添字のない)単純変数 右辺を評価しその値を左辺に関連づける。
左辺がリストや行列、既に宣言されたMaxima配列、Lisp配列といった添字付の要素 右辺がその要素に割り当てられる。添字は既存の要素を示していなければならなず、左辺を拡張することは出来ない。
左辺が未宣言のMaxima配列の添字指定された要素 既存のものなら右辺はその要素に割り当てられ、もしまだ存在していなければ新しい要素が確保される。
左辺が単純変数または添字あり変数のリスト 右辺は必ずリストとして評価され、右辺の要素が左辺の要素に並列に割り当てられる。

killやremvalueにより左辺とその値のリンクを解消できる。