• ベストアンサー

ベクトルの一次独立に付いて

例えば、n次の a と b のベクトルがあったとき、これらの一次独立を判別する、簡単な(できればコンピュータで演算する場合に早い)方法を教えていただけないでしょうか? 現在、a と b を共に 単位ベクトルに変換して、ua + ub あるいは ua - ub の何れかが 0 になるかどうかで判別していますが、どうもすっきりしません。 -- それと、a もしくは b が zero ベクトルの場合は、一次独立(あるいは従属)は定義できるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • sunasearch
  • ベストアンサー率35% (632/1788)
回答No.2

単位ベクトルを作る時に平方根を使うと、処理が重くなりますね。 また、プログラムが簡単と、演算が速い、は必ずしも両立しません。 普通に考えると、#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と書けますから、 一次独立にはならないですね。 一次従属は、言ってもいいのではないでしょうか。

参考URL:
http://ja.wikipedia.org/wiki/%E7%B7%9A%E5%9E%8B%E7%B5%90%E5%90%88
noname#168973
質問者

お礼

ありがとうございます。 liar_adan(#1) さんのご回答でも十分だったのですが、今回頂いた内容は更に素晴らしいですね。 この方法だと、a や b ベクトルに 0 の要素があっても、特別視する必要が無いのですね。 で早速実装してみた結果、なんと 約 25% も速度が上がりました。ラッキーです ^^)

その他の回答 (2)

  • ken1tar0u
  • ベストアンサー率24% (21/86)
回答No.3

#2 さんのお答えで十分ですが、 「ゼロベクトルはすべてのベクトルと一次従属である」 ということ、どうぞ自信を持ってください。

noname#168973
質問者

お礼

心強いお言葉、ありがとうございます^^) 安心しました。 ## もしも違ってたら、今まで延々と書いてきたコードが根底から間違ってた事になり、ショックなところでした。

  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.1

二つのベクトルが一次従属ということは要するに a = kb (k≠0, 実数) ということだから、 aのx成分xaとbのx成分xbを取ってきて、 k = xa / xb として、そのkに対して k = ya / yb k = za / zb ... がすべて成り立てば一次独立。成り立たなければ従属としていいと思います。 (各要素が0の場合は特別な処理が必要になります。) ゼロベクトルに対しての一次独立・従属の定義はわかりません。

noname#168973
質問者

お礼

なるほど、仰せの方法であれば n 回 のループだけで済みますね。ただ、確かに 各要素が 0 の場合を特別視しなければならないのはちょっと悲しいですね。 要素が 0 の時は その次元においては 従属 と考える事になるのでしょうかね?? であれば、zero ベクトルは必然的に 従属になるのかな..? == ご回答ありがとうございました。