1

さて、これは単純な数学の質問であり、プログラミングの質問のように聞こえるように書く必要があることをメタで読みました。私は自分のベストを尽くします...

そのため、ユーザーのネットワーク使用量 (バイト/秒) を示すグラフを flot で作成しました。アクティビティがある場合、データは 4 分間隔で表示されます。それ以外の場合は、使用範囲の開始時 (たとえば 1 日目) と範囲の終了時 (7 日目) に設定されます。データは、私が制御できない CGI スクリプトから取得されているため、ユーザーに提供できる内容はかなり制限されています。

私は三角関数や微積分を取ったことがないので、ほとんど頭がいっぱいです。私が望むのは、ユーザーがグラフ上の任意のポイントをクリックして、その瞬間の帯域幅の使用状況を確認できるオプションを提供することです。実際のデータ ポイント間の線は直線で描かれているため、これは、ユーザーがクリックした場所の前後のポイントを取得し、y 間隔を見つけることで実行できます。

これを説明してくれる親切な数学者を最終的に得るのに数週間かかりました. 他の誰もが、私を混乱させるだけでなく、問題に必要ではないように思われる、リーマン和のテクニックやその他のあらゆる種類の重いものを私に教えようとしてきました。

しかし、ユーザーが y 軸 (時間) 上の任意の 2 つのポイントからグラフを強調表示して、その範囲内のネットワーク使用量の合計を取得できるようにしたいと考えています。これが不正確であることはわかっていますが、しっかりとした方程式を使用して正しく不正確にする必要があります。

これは線の下の領域だと思っていましたが、もっと単純なグラフで実験すると、これは高すぎるように見えます。y2 - y1 からの距離を取り、それを x2 - x1 で乗算し、2 で割って、三角形のような線の下のグラフの領域を取得できることがわかりましたが、やはり数値が高いように見えました。(たぶん、それらはただの大きな数字であり、私はこの数学的なものをまったく理解していません).

だから私が必要としているのは、この質問があまりにも純粋な数学であるために閉鎖される前に誰かがそれを提供するのに十分素晴らしいなら、私が研究すべき概念の名前か方程式自体のどちらかです. または、正確な結果を得るには高度な数学が必要だという悪いニュースもあります。

私は数学が苦手ではありませんが、最後の注意として、私は 10 年生を超えて数学に慣れていないので、開始する場所が必要です。すべての数学サイトは、単純すぎるか、私の給与水準をはるかに超えているようです。

4

5 に答える 5

2

私が望むのは、ユーザーがグラフ上の任意のポイントをクリックして、その瞬間の帯域幅の使用状況を確認できるオプションを提供することです。実際のデータ ポイント間の線は直線で描かれているため、これは、ユーザーがクリックした場所の前後のポイントを取得し、y 間隔を見つけることで実行できます。

はい、それはその瞬間的な値を見つける良い方法です。その値を報告すると、y 軸と同じ単位になるので、バイト/秒を意味しますよね?

ポイント間のレートの変化の速さはわかりませんが、単純に最も近いポイントを選択してその値を報告すると、さらに簡単になります。精度をあまり犠牲にすることなく、問題を単純化します。

これは線の下の領域だと思っていましたが、もっと単純なグラフで実験すると、これは高すぎるように見えます. y2 - y1 からの距離を取り、それを x2 - x1 で乗算し、2 で割って線の下のグラフの領域を三角形のように取得できることがわかりましたが、やはり数値が高いように見えました。(たぶん、それらはただの大きな数字であり、私はこの数学的なものをまったく理解していません).

特定の時間間隔で合計バイト数を計算するには、開始点と終了点に最も近いインデックスを見つけ、y の値に x ポイントの間隔を掛けて、それらをすべて足し合わせる必要があります。これにより、その時間間隔中に消費されたバイトの合計数が得られますが、忘れている可能性のある問題がもう 1 つあります。

ポイントは「4分間隔」で来ると言っていましたが、y軸はバイト/秒です。単位が重要であることを忘れないでください。あなたの領域は、バイト/秒の合計に分単位の間隔を掛けたものです。単位を正しく表示するには、必要なバイトの最終値を取得するために 60 秒/分を掛ける必要があります。

その「高すぎる」値がまだオフの場合は、単位をもう一度検討してください。キロバイトあたり 1024 バイト、MB あたり 1024*1024 バイトです。計算をチェックしている値の単位を確認してください。

アップデート:

あなたが問題を抱えているのも不思議ではありません。元の質問は、バイト/秒を明確に述べています。この質問でさえ不正確で紛らわしいです。特定のタイムスタンプでの「データ量」はどのようにして得られましたか? それらは最後のタイムスタンプ以降に転送されたビットの合計ですか? はいの場合は、必要な間隔の開始と終了の間に値を追加し、都合のよい単位に変換します。

于 2009-09-03T22:38:37.497 に答える
2

あなたが求めていることを正しく理解していれば (そして、それは少し疑わしいです)、次のリンクで探しているものを見つける必要あり
ます : )


*****編集して、これを乗り越えることができます:)あまり面倒なことはありません:*****

そのため、ユーザーのネットワーク使用量 (バイト/秒) を示すグラフを flot で作成しました。アクティビティがある場合、データは 4 分間隔で表示されます。それ以外の場合は、使用範囲の開始時 (たとえば 1 日目) と範囲の終了時 (7 日目) に設定されます。データは、私が制御できない CGI スクリプトから取得されているため、ユーザーに提供できる内容はかなり限られています。

「フロット」とは?

y 軸の速度は [バイト/秒] です。x軸の時間は[秒]ですよね?つまり、ある特定の時点で補間して、時間の経過に伴う速度を線形セグメントでフロッティングしている場合 (私は退屈です、はい:)、その特定の時点での速度が得られます。使用した帯域幅を計算するには、その曲線の下の領域を特定する必要があります。ポイント「a」からポイント「b」までの領域は、その期間に消費された帯域幅を [バイト] 単位で決定します。

これを説明してくれる親切な数学者を最終的に得るのに数週間かかりました. 他の誰もが、私を混乱させるだけでなく、問題に必要ではないように思われる、リーマン和のテクニックやその他のあらゆる種類の重いものを私に教えようとしてきました。

スヌーピーの不朽の名言「グリーフ!」

しかし、ユーザーが y 軸 (時間) 上の任意の 2 つのポイントからグラフを強調表示して、その範囲内のネットワーク使用量の合計を取得できるようにしたいと考えています。これが不正確であることはわかっていますが、しっかりとした方程式を使用して正しく不正確にする必要があります。

それは不正確ではありません。線形セグメントで線形補間を使用しているため、実際には完全に正確です(バイト単位の丸め誤差は別として:)。

これは線の下の領域だと思っていましたが、もっと単純なグラフで実験すると、これは高すぎるように見えます. y2 - y1 からの距離を取り、それを x2 - x1 で乗算し、2 で割って線の下のグラフの領域を三角形のように取得できることがわかりましたが、やはり数値が高いように見えました。(たぶん、それらはただの大きな数字であり、私はこの数学的なものをまったく理解していません).

「三角形のように」 --> 「台形のように」あるべき

deltax*(y2-y1)/2 を実行すると、面積が得られます。はい (これは線形セグメントに対してのみ機能します)。これが台形則の基本原理です。


何を計算しているのか不明な場合は、ディメンション分析を使用します。速度はバイト/秒、時間は秒、帯域幅はバイト単位です。速度 * 時間 = 帯域幅などを乗算します。

于 2009-09-03T23:08:34.650 に答える
0

ネットワーク使用量の合計は、1あたりのバイト数(キロ、メガなど)ではありません。ストレートバイト(またはキロ、または何でも)になります。

たとえば、10秒間隔で1秒あたり2メガバイトは、合計で20メガバイトになります。1秒あたり20メガバイトにはなりません。

それとも、ある間隔での1秒あたりの平均バイト数が必要ですか?

于 2009-09-04T04:47:11.703 に答える
-1

簡潔または正確に表現するのに苦労している概念の確立された用語があり、これらの数学用語があなたよりはるかに長いことを受け入れれば、これははるかに簡単です。概念を理解するための問題のほとんどを明確に経験したので、分解して固有名でそれらを呼び出し始めた方がよいでしょう。

それは言った:

帯域幅をグラフ化する2つの明白な方法と、サーバーから帯域幅データを取得する2つの方法があります。まず、累積使用量関数があります。これは、いつでも、測定開始以降に転送されたデータの合計量です。この関数をプロットすると、(何かをダウンロード解除できないため)決して減少しないグラフが得られます。この関数の値の単位は、バイトまたはkBなどになります。

ユーザーが通常関心を持っているのは、現在使用している帯域幅の指標である瞬時使用機能です。これは、ユーザーが通常見たいものです。数学的には、これは累積関数の導関数です。この導関数は、0(ダウンロードしていない)からネットワークリンクの定格速度(接続を介して可能な限り多くのデータをプッシュしていることを示す)までの任意の値を取ることができます。この関数の単位は、1秒あたりのバイト数、またはMbps(メガビット/秒)などの関連するものです。

過去数秒間の平均データ使用量で瞬時帯域幅を概算できます。これは次のように計算されます

 (number of bytes transferred) 
-----------------------------------------------------------------
 (number of seconds that elapsed while transferring those bytes)

一般的に、時間間隔が小さいほど、近似はより正確になります。簡単にするために、通常、これを「最後のレポートから転送されたバイト数」を「最後のレポートからの秒数」で割ったものとして計算する必要があります。

たとえば、サーバーが「今日転送された合計バイト数」の4分ごとにレポートを提供している場合、累積関数が提供されているため、導関数を概算する必要があります。ユーザーに報告できる瞬間的な帯域幅使用率は次のとおりです。

(total transferred as of now) - (total as of 4 minutes ago) bytes
-----------------------------------------------------------
  4*60 seconds

サーバーが「前回のレポート以降に転送されたバイト数」の形式のレポートを提供している場合は、これをユーザーに直接レポートし、そのデータを時間に対してプロットできます。一方、ユーザー(またはあなた)が1日あたりに転送される合計バイト数の割り当てについて懸念している場合は、(ほぼ)瞬時のデータを累積データに変換する必要があります。このプロセスは、積分の計算として知られていますは、導関数の計算の反対であり、いくつかの点で概念的に単純です。サーバーからの各レポートとタイムスタンプを追跡している場合、毎回、プロットする値は、その時間より前に受信したすべてのレポートの合計になります。これをリアルタイムで実行している場合、新しいレポートを取得するたびに、グラフはそのレポートの量だけジャンプします。

于 2009-09-03T23:04:12.053 に答える
-1

私は数学が苦手ではありません... 私は 10 年生以上の数学に慣れていません

これは、「私はプログラミングが下手ではありません。sifとループには問題がありませんが、複数の関数を作成することはできませんでした」と言っているようなものです。

何らかの数学のクラスに登録することをお勧めします。行列と微積分の基礎を理解すると、多くのことを理解でき、あらゆる分野で役立ちます。ウィキペディアの記事と SO の回答、そして質問をさらに理解できるようになります。

余裕がない場合は、講義ビデオなどを探してみてください。

他の誰もが私にリーマン和のテクニックを教えようとしてきた

理由がわかりません。これにはそれらは必要ありませんが、それらを学んでいれば、解決策を考え出すのがより簡単になると思います. おわかりのように、リーマン和は、「おなじみの」面積の概念を提供しようとします。あなたが(うまくいけば)何年も前に学んだ種類の分野。

使用グラフの下の 2 つのポイント間の領域を取得すると、その期間に使用された量が (概算で) わかります。

間取り図の面積はどうやって求めるの?それを四角形と三角形に分割し、それぞれの面積を求めて足し合わせます。基本的に、グラフでも同じことができます。台形則と呼ばれる、これを行う簡単な方法を考案した人がいます。グラフをストリップに分割する方法を選択するだけの問題です。あなたの場合、これは簡単です。データポイント自体を分割線として使用するだけです。(線形補間を使用して、ユーザーが選択した領域の左端と右端のグラフの値を計算する必要もあります。)

私があなたに明確でないことを言った場合は(おそらくあるかもしれませんが)、コメントを残してください.

于 2009-09-03T23:45:33.110 に答える