用图表查找直线区域(数学问题,但需要用于flot)

时间:2009-09-03 22:23:04

标签: math graph flot

好的,所以这是一个简单的数学问题,我读到了meta,需要编写的内容听起来像编程问题。我会尽我所能......

所以我用flot制作的图表显示了用户的网络使用情况(以字节/秒为单位)。当有活动时,数据相隔4分钟,否则设置在使用范围的开始(比如第1天)和范围的结束(第7天)。数据来自我无法控制的CGI脚本,因此我对用户提供的内容相当有限。

我从不接受过三角形或微积分,所以我几乎都在脑子里。我想要的是让用户可以选择点击图表上的任何点,并查看他们当时的带宽使用情况。由于实际数据点之间的线是直线绘制的,因此可以通过获取用户点击之前和之后的点并找到y间隔来完成。

我花了几周的时间才最终找到一位乐于助人的数学家向我解释这一点。其他人一直坚持试图教我Riemann sum技术和各种其他重要的东西,这些东西不仅让我感到困惑,而且对于这个问题似乎没有必要。

但我还希望用户能够从y轴上的两个任意点(时间)突出显示图形,以获得该范围内的总网络使用量。我知道这是不准确的,但我需要使用固体方程才是正确的不准确。

我认为这是该线下的区域,但是使用更简单的图表进行的实验使得这看起来太高了。我发现我可以从y2 - y1获取距离并将其乘以x2 - x1然后除以2以得到线下方的图形区域,如同三角形,但同样,数字似乎很高。 (也许他们只是大数字,而我根本不会得到这些数学的东西。)

所以我需要的是,如果有人在这个问题因为过于纯粹的数学问题被关闭之前提供它真的很棒,要么是我应该研究的概念的名称,要么是方程本身。或者我所做的坏消息需要高级数学才能获得准确的结果。

我不擅长数学,就像最后一点,我只是不熟悉10年级以后的数学,所以我需要一些地方开始。所有的数学网站似乎都过于简单或超过我的薪水。

5 个答案:

答案 0 :(得分:2)

  

我想要的是用户拥有   单击任何点的选项   图并查看其带宽使用情况   那一刻。自从线   在绘制实际数据点之间   直接,这可以通过获得   之前和之后的点数   用户点击并找到了   Y间隔。

是的,这是找到瞬时值的好方法。当你报告该值时,它与y轴的单位相同,所以这意味着字节/秒,对吧?

我不知道点之间的速率变化有多快,但如果您只是选择最近的点并报告其值,则更简单。您可以在不牺牲太多准确性的情况下简化问题。

  我认为这是下面的区域   行,但实验很多   更简单的图表使这看起来很正常   太高了。我发现我可以   从y2 - y1和   乘以x2 - x1然后除   两个得到图的面积   像三角形一样在线下面,但是   再次,数字似乎很高。   (也许他们只是大数字而我   根本没有得到这些数学的东西。)

要计算给定时间间隔内的总字节数,您应找到最接近起点和终点的索引,并将y的值乘以x点的间距,并将它们全部加在一起。这将为您提供在该时间间隔内消耗的总字节数,但还有一个您可能忘记的皱纹。

你说这些点是“相隔4分钟”,你的y轴是以字节/秒为单位。请记住,单位很重要。您的区域是以分钟为单位的间距的字节/秒的总和。要使单位正确,您必须乘以60秒/分钟才能获得所需的最终字节值。

如果“太高”值仍未关闭,请再次考虑单位。它是每千字节1024字节,每MB 1024 * 1024字节。检查您正在检查计算的值的单位。

更新:

难怪你有问题。您的原始问题清楚地说明字节/秒。即使这个问题也是不精确和令人困惑的。你是如何在给定的时间戳上得到“数据量”的?这些是自上次时间戳以来转移的总比特数吗?如果是,只需在所需间隔的开始和结束之间添加值,然后转换为方便的单位。

答案 1 :(得分:2)

如果我理解你的要求(这有点令人怀疑),你应该在这些链接中找到你想要的东西:
Linear interpolation (计算两者之间的点的值)
Trapezoidal rule (计算“曲线”下面的区域)


*****编辑,所以我们可以得到这个:)没有多少ado:*****

所以我用flot制作的图表显示了用户的网络使用情况(以字节/秒为单位)。当有活动时,数据相隔4分钟,否则设置在使用范围的开始(比如第1天)和范围的结束(第7天)。数据来自我无法控制的CGI脚本,因此我对用户提供的内容相当有限。

什么是“flot”?

Okey,所以你在y轴上有速度[以字节/秒为单位];和时间在x轴上[秒],对吧? 这意味着,如果你随着时间的推移(我很无聊,是的:)速度,在线性段中,在某个特定时间点插值,你将在那个特定时间点获得速度。 如果您希望计算已花费的带宽,则需要确定该曲线下方的区域。从“a”点到“b”点的区域将确定该时间段内[字节]的扩展带宽。

我花了几周的时间才最终找到一位乐于助人的数学家向我解释这一点。其他人一直坚持试图教我Riemann sum技术和各种其他重要的东西,这些东西不仅让我感到困惑,而且对于这个问题似乎没有必要。

在史努比不朽的话语中:“好悲伤!”

但我还希望用户能够从y轴上的两个任意点(时间)突出显示图表,以获得该范围内的网络使用总量。我知道这是不准确的,但是我需要使用一个实体方程,这是正确的不准确。

这不会是不准确的。 它实际上是完全准确的(除了以字节为单位的舍入误差:),因为你在线性段上使用线性插值。

我认为这是该行下的区域,但是使用更简单的图表进行的实验使得这看起来太高了。我发现我可以从y2 - y1获取距离并将其乘以x2 - x1然后除以2以得到线下方的图形区域,如同三角形,但同样,数字似乎很高。 (也许他们只是大数字,而我根本不会得到这些数学内容。)

“像三角形” - >应该“像一个梯形”

如果你做deltax *(y2-y1)/ 2,你将获得该区域,是(这仅适用于线性段)。这是梯形规则的基本原则。


如果您不确定计算使用维度分析的内容:速度以字节/秒为单位,时间以秒为单位,带宽以字节为单位。乘以速度*时间=带宽,依此类推。

答案 2 :(得分:0)

,网络使用总量为,以字节为单位(千克,万亿等)。它只是直接字节(或千位,或其他)。

例如,在10秒的间隔内每秒2兆字节将是20兆字节<强>总。它不会是每秒20兆字节。

或者您是否希望在一段时间内每秒平均字节数?

答案 3 :(得分:-1)

如果您接受对于您难以简明或准确地表达的概念有完善的术语,并且这些数学术语比您长得多,那么这对您来说会容易得多。既然你已经清楚地理解了理解这些概念的大部分麻烦,你也可以分解并开始用它们的名字来调用它们。

那说:

有两种明显的方法来绘制带宽,以及两种从服务器获取带宽数据的方法。首先,有累积使用函数,它在任何时候都只是自测量开始以来传输的数据总量。如果您绘制此函数,则会得到一个永不减少的图形(因为您无法取消下载某些内容)。此函数的值的单位将是字节或kB或类似的东西。

用户通常感兴趣的是瞬时使用功能,该功能指示您现在使用的带宽。这是用户通常希望看到的内容。在数学术语中,这是累积函数的导数。此衍生产品可以采用从0(您没有下载)到网络链接的额定速度的任何值(表示您通过连接推送尽可能多的数据)。此函数的单位是每秒字节数,或类似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

如果服务器为您提供“自上次报告后传输的字节数”形式的报告,则可以直接向用户报告,并根据时间绘制该数据。另一方面,如果用户(或您)担心每天传输的总字节数的配额,则需要将(近似)瞬时数据转换为累积数据。这个过程称为计算积分,与计算导数相反,在某些方面在概念上更简单。如果您跟踪服务器中的每个报告和时间戳,那么每次绘制的值都是在此之前进入的所有报告的总和。如果您是实时执行此操作,则每次获得新报表时,图表都会跳过该报表中的金额。

答案 4 :(得分:-1)

  

我不擅长数学,...我对10年级以后的数学不熟悉

这就像是说“我在编程上并不擅长,我对if和循环没有任何问题,但我从来没有编写过多个函数。”

我建议你报名参加某种数学课程。对矩阵和微积分基础知识的理解使您对许多事物有所了解,并且可以在各种领域中发挥作用。您将能够理解更多维基百科文章和SO答案 - 以及问题!

如果你负担不起,试着找一些讲座视频或其他什么。

  

其他人一直坚持试图教我Riemann sum技术

我不明白为什么。你不需要它们 - 虽然如果你已经学习了它们,我希望你会发现它更容易提出解决方案。你看,黎曼总结试图给你一个“熟悉的”区域概念。几年前你(希望)学到的那种区域。

在两点之间获取使用图表下方的区域将告诉您(大约)在此期间使用了多少。

您如何找到平面图的区域?您将其分解为矩形和三角形,找到每个区域,并将它们添加到一起。基本上,您可以对图表执行相同的操作。有人制定了一种简单的方法,称为梯形法则。这只是选择如何将图形划分为条带的问题,在您的情况下,这很容易:只使用数据点本身作为分隔符。 (您还需要使用线性插值计算用户选择的区域左右两端的图形值。)

如果有什么我说过的话你不清楚(可能会有),请发表评论。