投稿

N88-BASICでベクトル (2回目)

イメージ
  2022/3/6(日) N88-BASICでベクトル (2回目)   ベクトルの外積   a,bベクトルの外積cベクトルは、 c = a×b = -b×aで、a,bベクトルが 作る平行四辺形の面積と同じ大きさ で垂直なベクトルになります 向きは、 aからbへ右手の4本指を 向けた時、残りの親指の方向です (aからbへ右ねじを回して進む向き)   b x  : d = b y  : a y   より、 b y d = a y b x   図 2 a,bベクトルが作る平行四辺形の面積     a x b y  - a y b x     a,bベクトルが作る平行四辺形(青+黄)の 面積は、図 2のようになります   黄に注目すると、平行四辺形の面積を変え ずに底辺を水平にすることができます   底辺を水平にした平行四辺形の面積は a x b y  - b y d です   紫の三角形は相似なので b x  : d = b y  : a y   より、 b y d = a y b x   となり、 紫 +灰?+水色の平行四辺形と 紫 +灰?+桃色の平行四辺形が同じ面積 になり、 a x b y  - b y d = a x b y  - a y b x   です よって、 a,bベクトルが作る平行四辺形 (青+黄)の面積は、a x b y  - a y b x   となります   a,bベクトルが作る平行四辺形の 面積と同じ大きさで垂直なベクトルを cベクトルとすると、 c = (0, 0, a x b y  - a y b x ) となります a,bベクトルはxy平面上なので cベクトルはz軸方向になります   ここから、 3次元ベクトルを大文字で 表すことにします   A = (a x , a y , a z ) B = (b x , b y , b z )として、 A,Bベクトルが作る平行四辺形を x,y,z軸側から見ると x軸 c x  = a y b z  - a z b y   y軸 c y  = a z b x  - a x b z   z軸 c z  = a x b y  - a y b x   の大きさに見えます C = (c x , c y , c z ) は A,Bベクトルが作る平行四辺形の 面積と同じ大きさで垂直なベクトル になります C =

N88-BASICでベクトル (1回目)

イメージ
2022/3/3(木) N88-BASICでベクトル (1回目)   ベクトルの内積     図 1 a・b = a x b x  + a y b y   ベクトル aとbの内積はa・b = |a||b|cosθ なので, |b|をaに垂直に落とした陰の長さ |b|cosθと|a|の積になり、ベクトルbを 90°回転したベクトルb'とaが作る 平行四辺形の面積と考える事が出来ます |b|cosθ=|b'|cosθ=平行四辺形の高さ |a|が底辺です   図 1を見ると、a x b x  + a y b y   が平行四辺形の 面積と同じなので、 a・b = a x b x  + a y b y   と なります (黄色同士と水色同士を見る) (a,b,b'ベクトルの成分はマス目の数を 見ると分かり易いと思います )   別の導き方、 ここから、ベクトルを大文字で表し、 A=(a 0 ,a 1 ,a 2 )と成分表記する事にします E i を各 (直交)座標軸の単位ベクトルとすると、 A = Σa i E i   、 E i ・ E i  = 1 、E i ・ E j  = 0(i≠j) A・B = (Σa i E i )・(Σb i E i ) = Σa i b i となり、各ベクトルの同じ成分同士の積の和 になります 3次元なら、a・b = a x b x +a y b y +a z b z   です A・B = |a||b|cosθより、cosθ = A・B/(|a||b|) なので、 cosの逆関数を使えば2つのベクトルの なす角がわかります N88-BASICではtanの逆関数しかないので、 tanθ = sinθ/cosθ       = √{(1-cosθcosθ)/(cosθcosθ)}       = √{1/(cosθcosθ) - 1}       = √[|a||b||a||b|/{(A・B)(A・B)} - 1] を使用します a・b    = a x b x  + a y b y |a||a| = a x a x  + a y a y |b||b| = b x b x  + b y b y から x = tanθを求めて、 t  = Tan -1 (x)で角度tが求まります tがラジアンの場合 θ = 180t/πで

N88-BASICでスライドパズル (3回目)

イメージ
2022/2/26(土) N88-BASICでスライドパズル (3回目)   Sliding puzzle(8)の解答探索 123      123      123 456 →   45  →  456 78       786      78   スペースの場所へ 1~8を動かしてから、 元に戻すパズルです。 上の例では 1回しか動かしていないので すぐ元に戻せますが、たくさん動かせば 元に戻すのが難しくなります。   動かしたい方向のカーソルキーで移動します。 (移動方向表示は30回またはEnterで改行) sキーで30回適当に移動します。 aキーで解答探索します。(qキーで途中中断) スペースキーで終了です。   解答探索        (1)    (2)    (3)       xxx    xxx    xxx 盤面    xx2 → xxx  , xx         x1     x 1    xx2 方法    ""     "→"   "↓"   (1)からは(2)と(3)の動かし方があります PUZZNは(1),(2),(3)の盤面を記憶する最大数です MOVENは(2),(3)へ至る方法を記憶する最大値です (2),(3)について(1)と同様に繰り返し、 初めに見つけた答えを表示しています。   深さ探索 (スタックの先入れ後出し)ではなく 幅探索 (ストリームの先入れ先出し)で検索しています ので初めに見つけた答えは最短経路の一つです。   1. (1)を保存 2. (1)を取出し移動可能な盤(2),(3)を保存 3. (2)を取出し移動可能な盤保存…(4)とします 4. (3)を取出し移動可能な盤保存…(5)~とします 5. (4)を取出し.... と保存しようとする盤が答えになるまで繰り返します。 ただし、今までと同じ盤面になったときは保存しない チェックを入れています。 このチェックを入れると、答えを見つけるまでの 時間が節約できる代わりに、メモリーが多く必要です。   以下のメモリーでは、メモリーが不足で途中中断 する場合が多いです 1050 PUZZN = 45000 1060 MOVEN = 15000 を増やせば最後まで検索できると思います。   NL-BASIC

N88-BASICでスライドパズル (2回目)

イメージ
2022/2/26(土) N88-BASICでスライドパズル (2回目)   Sliding puzzle(15) 1234      1234      1234 5678  →  5678 →  5678 9ABC      9AB       9ABC DEF       DEFC      DEF   スペースの場所へ 1~Fを動かしてから、 元に戻すパズルです。 上の例では 1回しか動かしていないので すぐ元に戻せますが、たくさん動かせば 元に戻すのが難しくなります。   動かしたい方向のカーソルキーで移動します。 (移動方向表示は30回またはEnterで改行) sキーで30回適当に移動します。 スペースキーで終了です。   解き方の例 (1) 1,234,59D 戻す (2) 6,78,AE 戻す (3) BCF 戻す 1234     1234      1234 5 xx  → 5678  →   5678 9xxx     9A x      9ABC Dxxx     DExx      DEF   上 1行と左1列が揃えば、3×3のパズルと同じです。   NL-BASICとblg~.zip(puzz002.bas)は 以下のリンクからダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい

N88-BASICでスライドパズル (1回目)

イメージ
2022/2/24(木) N88-BASICでスライドパズル (1回目)   Sliding puzzle(8) 123      123      123 456 →  45  →  456 78       786      78   スペースの場所へ 1~8を動かしてから、 元に戻すパズルです。 上の例では 1回しか動かしていないので すぐ元に戻せますが、たくさん動かせば 元に戻すのが難しくなります。   動かしたい方向のカーソルキーで移動します。 (移動方向表示は30回またはEnterで改行) sキーで30回適当に移動します。 スペースキーで終了です。   解き方の例 (1) 1 戻す      (2) 2,3 戻す    (3) 4,7 戻す    (4)  xx    1xx      13     123      123    123      123 1xx →  xx  →  x2x → x x  →  74x → 4 x  →  456 xxx    xxx      xxx    xxx       xx    7xx      78   NL-BASICとblg~.zip(puzz001.bas)は 以下のリンクからダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい      

N88-BASICでユークリッドの互除法

イメージ
2022/2/21(月) N88-BASICでユークリッドの互除法   最大公約数を求めて分数を約分する   ユークリッドの互除法 ( Euclidean Algorithm ) a  ∈ Z  は、aは整数という意味( Z は二重線文字) ( Z :整数 Q :有理数 R :実数 C :複素数) 最大公約数はGCD(G reatest C ommon D ivisor ) なので、ここでは、GCD(a, b)と表すことにする   a, b, n, r ∈ Z a > b > 0 a / b = n … r とすると、 GCD(a, b) = GCD(b, r) が成り立ちます   図1 正方形1辺の長さ大=b,中=r,小=g   a / b の余りはr b / r の余りはg r / g の余りは0   よって、図1を見ると、 r = 2g b = 2r + g = 4g +  g =  5g a = 2b + r = 8g + 2g = 12g となり、 gはa,bの、大きいほうから初めに見つけた 公約数になっているので、最大公約数です   図1によると、 GCD(a, b) = GCD(b, r) = GCD(r, g) = g です ↑                      ↑ a / bの余り > 0         r / gの余り = 0   よって、アルゴリズムは、 (1) a / b の余りrを求める(a > b > 0) (2) a = b, b = r (3) b > 0なら(1)へ (4) aが答え   約分は A > 0, B > 0, G = GCD(A, B)として、 A / B = (A/G) / (B/G)   負数の場合は絶対値に対して計算し 後で符号を付ければ良いと思います   NL-BASICとblg~.zip(euc001.bas)は 以下のリンクからダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい

N88-BASICでmRNA

イメージ
2022/2/16(水) N88-BASICでmRNA   mRNAの塩基配列を標準コドン表で アミノ酸配列(Amino acid sequence)にする   塩基の種類 アデニン(A)、グアニン(G) チミン(T)、シトシン(C)、ウラシル(U) (A=T,A=U,G≡C) (-は水素結合)   DNA(AGTC) → mRNA(UCAG) → tRNA+アミノ酸+(rRNA) → タンパク質(アミノ酸配列)   RNA$ = "AUGAGCUAG" 又は RNA$ = "AUG AGC UAG" のようにmRNAの塩基配列を書き RUNするとアミノ酸配列が いろいろな方法で表示されます (UAGは終止コドンです)   コドン表などに入力ミスがあるかも しれませんので お遊び程度に使用して下さい   NL-BASICとblg~.zip(mrna001.bas)は 以下のリンクからダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい