プロが教える店舗&オフィスのセキュリティ対策術

例えば、n次の a と b のベクトルがあったとき、これらの一次独立を判別する、簡単な(できればコンピュータで演算する場合に早い)方法を教えていただけないでしょうか?

現在、a と b を共に 単位ベクトルに変換して、ua + ub あるいは ua - ub の何れかが 0 になるかどうかで判別していますが、どうもすっきりしません。

--
それと、a もしくは b が zero ベクトルの場合は、一次独立(あるいは従属)は定義できるのでしょうか?

A 回答 (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と書けますから、
一次独立にはならないですね。

一次従属は、言ってもいいのではないでしょうか。

参考URL:http://ja.wikipedia.org/wiki/%E7%B7%9A%E5%9E%8B% …
    • good
    • 0
この回答へのお礼

ありがとうございます。
liar_adan(#1) さんのご回答でも十分だったのですが、今回頂いた内容は更に素晴らしいですね。
この方法だと、a や b ベクトルに 0 の要素があっても、特別視する必要が無いのですね。

で早速実装してみた結果、なんと 約 25% も速度が上がりました。ラッキーです ^^)

お礼日時:2005/05/30 16:56

#2 さんのお答えで十分ですが、


「ゼロベクトルはすべてのベクトルと一次従属である」
ということ、どうぞ自信を持ってください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/05/30 18:59

二つのベクトルが一次従属ということは要するに



a = kb (k≠0, 実数)

ということだから、
aのx成分xaとbのx成分xbを取ってきて、

k = xa / xb

として、そのkに対して

k = ya / yb
k = za / zb
...
がすべて成り立てば一次独立。成り立たなければ従属としていいと思います。
(各要素が0の場合は特別な処理が必要になります。)

ゼロベクトルに対しての一次独立・従属の定義はわかりません。
    • good
    • 0
この回答へのお礼

なるほど、仰せの方法であれば n 回 のループだけで済みますね。ただ、確かに 各要素が 0 の場合を特別視しなければならないのはちょっと悲しいですね。

要素が 0 の時は その次元においては 従属 と考える事になるのでしょうかね??

であれば、zero ベクトルは必然的に 従属になるのかな..?
==
ご回答ありがとうございました。

お礼日時:2005/05/30 16:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!