アプリ版:「スタンプのみでお礼する」機能のリリースについて

風向の平均値を正確に出す方法を教えてください。

たとえば、
358°と2°という風向データの平均を取ると本当は0°なハズです。
しかしaverageを用いると180°になってしまいます。このような場合の平均をうまくとる方法を教えてください。

データ処理上大変困ってます。

A 回答 (6件)

苦手分野なので、あくまでも参考として……


おそらく、ベクトルとして足してやり、単位ベクトルから角度を求めてやれば良いのだと思います。

358度:(-0.035,0.999)
2度:(0.035,0.999)

ベクトルの足し算:(-0.035+0.035,0.999+0.999)=(0,1.998)
スカラー:SQRT(0^2+1.998^2)=1.998

合算した単位ベクトル:(0,1) ⇒ 0度

Excelでやるとすると、こんな感じでしょうか。
A列に平均したい角度が入っているとします(例:A1に358、A2に2、A3に90、……)。
B列に =SIN(RADIANS(A1)) 
C列に =COS(RADIANS(A1)) どちらも下までコピーしてやります。
これでB、C列がベクトルの成分になります。

E1に =SQRT(SUM(B:B)^2+SUM(C:C)^2) これがスカラー
F1に =SUM(B:B)/E1
G1に =SUM(C:C)/E1 F1,G1が合算した単位ベクトル。ここから角度を出します。
H1に =DEGREES(ACOS(G1)) これが平均角度
    • good
    • 12
この回答へのお礼

わかりやすい解説ありがとうございます。
Degrees⇒Radian・・・で僕の考えは終わってました。
⇒ベクトルまで持っていけばできそうですね。

ありがとうございます。

お礼日時:2008/11/08 14:59

もしかしたら、358°の表記が間違っていませんか?



風向きなら、真北を 0°とすると、東へ 2°と西へ 2°との平均は、2°と -2°との平均0°となりますが、
2°と 358°だと、急に風向きが1回転するように変化したことになり、平均は 180°となるように思います。
    • good
    • 0
この回答へのお礼

解析データの関係上、北を0度として+でしか表記をしていません。

お礼日時:2008/11/08 14:57

風向の場合は、平均よりも分布の方が良いと思われますが如何でしょう?


0°±22.5° →a[%]
45°±22.5° →b[%]
90°±22.5° →c[%]
135°±22.5° →d[%]
180°±22.5° →e[%]
・・・・・・

などです。
    • good
    • 0
この回答へのお礼

分布はとって解析しています。
CFD(数値シュミレーション)と比較したいので平均値の矢印が出せたら比較しやすいかなーと思い作りたかったので調べていました。

書き込みありがとうございました。

お礼日時:2008/11/08 14:55

補足です。


2つの風向がちょうど反対のときはエラー表示にする場合は、
=IF(ABS(A2-B2)=180,"×",MOD(AVERAGE(A2:B2)+(ABS(A2-B2)>180)*180,360))
_____A_____B_____C
1__角1__角2__劣弧の中点[平均?]
2____30____80___55
3____30___150___90
4____30___240__315
5____30___330____0
6____30___350___10
7____30___210___×

3つ以上の平均は考えなくていいですよね...?
    • good
    • 0
この回答へのお礼

3つどころか何百個の平均をしたいので。。。
ちょっとこの考えは使えませんでした。
使用方法を詳しく明記せずすみません。
書き込みありがとうございました♪

お礼日時:2008/11/08 14:53

円周上の2点を結ぶ劣弧(短いほうの弧)の真ん中


の角度を0°~359°で求めたい、ということでしょうか?

_____A_____B_____C
1__角1__角2__劣弧の中点[平均?]
2____30____80___55
3____30___150___90
4____30___240__315
5____30___330____0
6____30___350___10

C2
=MOD(AVERAGE(A2:B2)+(ABS(A2-B2)>180)*180,360)
下方向・↓
    • good
    • 0
この回答へのお礼

試してみたいと思います。
ありがとうございます。

お礼日時:2008/11/08 14:46

直感的には、算術平均をとった場合にその数値は、中間の値(正しい値)となる場合と、反対方向(ご質問の例)を示す値の場合のどちらかになるはずと思われます。



なので、角度をt1、t2とするなら
(1) (t1-t2)mod 360 と(t2-t1)mod 360の絶対値の小さい方を使って計算する。
(2) (t1+t2)/2 及びその反対方向(+180°)でt1に近い方を採用する(差が小さい方)
でよいのでは? (書き方が違うけど、1と2は同じです)

きちんとした、アプローチをするなら・・・
風向は向きを持っているので、実はベクトルなので・・・
極座標をx,y座標に変換して平均してから、角度に戻す要領で、
(3) 座標 ( (sin(t1)+sin(t2)) , (cos(t1)+cos(t2)) ) の角度を求めれば良いという考え方ができます。
この方法であれば、データの重み付けをすることや3個以上のデータを平均することも簡単ですね。

実際の計算処理では、座標点までは単純計算で求められるものの、角度に戻す時に、符合による判定などが必要になってしまうので、こちらも、処理上はほぼ1、2に近いとも言えますが、考え方に関してはこれが正確では?
    • good
    • 0
この回答へのお礼

ん~そうですね!
全てベクトル分解して平均を取ってからまた直せば平均になりますね。
ラジアンに変換してまでは考えたのですが、もっと原点に返ればいいんですね。ありがとうございます。

お礼日時:2008/11/08 14:44

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

このQ&Aを見た人はこんなQ&Aも見ています