- ベストアンサー
ベクトルの一次独立に付いて
例えば、n次の a と b のベクトルがあったとき、これらの一次独立を判別する、簡単な(できればコンピュータで演算する場合に早い)方法を教えていただけないでしょうか? 現在、a と b を共に 単位ベクトルに変換して、ua + ub あるいは ua - ub の何れかが 0 になるかどうかで判別していますが、どうもすっきりしません。 -- それと、a もしくは b が zero ベクトルの場合は、一次独立(あるいは従属)は定義できるのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
単位ベクトルを作る時に平方根を使うと、処理が重くなりますね。 また、プログラムが簡単と、演算が速い、は必ずしも両立しません。 普通に考えると、#1さんのようなアルゴリズムになると思います。 判定のループを、成り立たなくなった時点で抜けると効率も良いでしょう。 for(i=0;i<n;i++) if(a[0]*b[i] != b[0]*a[i]) return 1; return 0; <返り値>1:一次独立 0:一次従属 また、bが0ベクトルだと、b=0aと書けますから、 一次独立にはならないですね。 一次従属は、言ってもいいのではないでしょうか。
その他の回答 (2)
- ken1tar0u
- ベストアンサー率24% (21/86)
#2 さんのお答えで十分ですが、 「ゼロベクトルはすべてのベクトルと一次従属である」 ということ、どうぞ自信を持ってください。
お礼
心強いお言葉、ありがとうございます^^) 安心しました。 ## もしも違ってたら、今まで延々と書いてきたコードが根底から間違ってた事になり、ショックなところでした。
- liar_adan
- ベストアンサー率48% (730/1515)
二つのベクトルが一次従属ということは要するに a = kb (k≠0, 実数) ということだから、 aのx成分xaとbのx成分xbを取ってきて、 k = xa / xb として、そのkに対して k = ya / yb k = za / zb ... がすべて成り立てば一次独立。成り立たなければ従属としていいと思います。 (各要素が0の場合は特別な処理が必要になります。) ゼロベクトルに対しての一次独立・従属の定義はわかりません。
お礼
なるほど、仰せの方法であれば n 回 のループだけで済みますね。ただ、確かに 各要素が 0 の場合を特別視しなければならないのはちょっと悲しいですね。 要素が 0 の時は その次元においては 従属 と考える事になるのでしょうかね?? であれば、zero ベクトルは必然的に 従属になるのかな..? == ご回答ありがとうございました。
お礼
ありがとうございます。 liar_adan(#1) さんのご回答でも十分だったのですが、今回頂いた内容は更に素晴らしいですね。 この方法だと、a や b ベクトルに 0 の要素があっても、特別視する必要が無いのですね。 で早速実装してみた結果、なんと 約 25% も速度が上がりました。ラッキーです ^^)