`
chm2920
  • 浏览: 45984 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一些数值计算

 
阅读更多
 // 升序
 d3.ascending = function (a, b) {
     return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
 };

 // 降序
 d3.descending = function (a, b) {
     return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
 };

 // 最小值
 d3.min = function (array, f) {
     var i = -1,
         n = array.length,
         a, b;
     if (arguments.length === 1) {
         while (++i < n && ((a = array[i]) == null || a != a)) a = undefined;
         while (++i < n)
             if ((b = array[i]) != null && a > b) a = b;
     } else {
         while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined;
         while (++i < n)
             if ((b = f.call(array, array[i], i)) != null && a > b) a = b;
     }
     return a;
 };

 // 最大值
 d3.max = function (array, f) {
     var i = -1,
         n = array.length,
         a, b;
     if (arguments.length === 1) {
         while (++i < n && ((a = array[i]) == null || a != a)) a = undefined;
         while (++i < n)
             if ((b = array[i]) != null && b > a) a = b;
     } else {
         while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined;
         while (++i < n)
             if ((b = f.call(array, array[i], i)) != null && b > a) a = b;
     }
     return a;
 };

 // 范围
 d3.extent = function (array, f) {
     var i = -1,
         n = array.length,
         a, b, c;
     if (arguments.length === 1) {
         while (++i < n && ((a = c = array[i]) == null || a != a)) a = c = undefined;
         while (++i < n)
             if ((b = array[i]) != null) {
                 if (a > b) a = b;
                 if (c < b) c = b;
             }
     } else {
         while (++i < n && ((a = c = f.call(array, array[i], i)) == null || a != a)) a = undefined;
         while (++i < n)
             if ((b = f.call(array, array[i], i)) != null) {
                 if (a > b) a = b;
                 if (c < b) c = b;
             }
     }
     return [a, c];
 };

 // 和
 d3.sum = function (array, f) {
     var s = 0,
         n = array.length,
         a, i = -1;
     if (arguments.length === 1) {
         while (++i < n)
             if (!isNaN(a = +array[i])) s += a;
     } else {
         while (++i < n)
             if (!isNaN(a = +f.call(array, array[i], i))) s += a;
     }
     return s;
 };


 function d3_number(x) {
     return x != null && !isNaN(x);
 }

 // 平均值
 d3.mean = function (array, f) {
     var n = array.length,
         a, m = 0,
         i = -1,
         j = 0;
     if (arguments.length === 1) {
         while (++i < n)
             if (d3_number(a = array[i])) m += (a - m) / ++j;
     } else {
         while (++i < n)
             if (d3_number(a = f.call(array, array[i], i))) m += (a - m) / ++j;
     }
     return j ? m : undefined;
 };

 // 分位数
 d3.quantile = function (values, p) {
     var H = (values.length - 1) * p + 1,
         h = Math.floor(H),
         v = +values[h - 1],
         e = H - h;
     return e ? v + e * (values[h] - v) : v;
 };

 // 中位数
 d3.median = function (array, f) {
     if (arguments.length > 1) array = array.map(f);
     array = array.filter(d3_number);
     return array.length ? d3.quantile(array.sort(d3.ascending), .5) : undefined;
 };

 // 二等分线
 d3.bisector = function (f) {
     return {
         left: function (a, x, lo, hi) {
             if (arguments.length < 3) lo = 0;
             if (arguments.length < 4) hi = a.length;
             while (lo < hi) {
                 var mid = lo + hi >>> 1;
                 if (f.call(a, a[mid], mid) < x) lo = mid + 1;
                 else hi = mid;
             }
             return lo;
         },
         right: function (a, x, lo, hi) {
             if (arguments.length < 3) lo = 0;
             if (arguments.length < 4) hi = a.length;
             while (lo < hi) {
                 var mid = lo + hi >>> 1;
                 if (x < f.call(a, a[mid], mid)) hi = mid;
                 else lo = mid + 1;
             }
             return lo;
         }
     };
 };
 var d3_bisector = d3.bisector(function (d) {
     return d;
 });

 d3.bisectLeft = d3_bisector.left;
 d3.bisect = d3.bisectRight = d3_bisector.right;

 // 混序
 d3.shuffle = function (array) {
     var m = array.length,
         t, i;
     while (m) {
         i = Math.random() * m-- | 0;
         t = array[m], array[m] = array[i], array[i] = t;
     }
     return array;
 };

 // 序列改变
 d3.permute = function (array, indexes) {
     var permutes = [],
         i = -1,
         n = indexes.length;
     while (++i < n) permutes[i] = array[indexes[i]];
     return permutes;
 };


 d3.zip = function () {
     if (!(n = arguments.length)) return [];
     for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m;) {
         for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n;) {
             zip[j] = arguments[j][i];
         }
     }
     return zips;
 };

 function d3_zipLength(d) {
     return d.length;
 }

 // 转置
 d3.transpose = function (matrix) {
     return d3.zip.apply(d3, matrix);
 };

 

分享到:
评论

相关推荐

    一些数值计算方法的C语言实现

    这个主题"一些数值计算方法的C语言实现"涵盖了如何用C语言来编写数值计算程序的基本概念和技术。 首先,我们要了解数值计算的核心是解决数学问题,包括但不限于微积分、线性代数、概率统计等领域的计算。C语言可以...

    白峰杉数值计算m文件

    下面我们将详细探讨这些m文件可能涵盖的一些数值计算知识点。 1. **线性代数运算**:MATLAB是处理矩阵和向量运算的利器,因此这些m文件很可能包含矩阵的求逆、特征值和特征向量计算、LU分解、QR分解、SVD(奇异值...

    工程电磁场数值计算 有限元

    书中提到了一些数值计算的基础方法,比如高斯消去法、列主元消去法、改进的平方根法、自适应的SOR迭代法、共轭梯度法等,这些都是求解线性方程组的有效手段,尤其适用于稀疏矩阵的大规模问题。对于电磁场这类复杂...

    收集一些开源数值计算项目并复制它们.zip

    收集一些开源数值计算项目并复制它们.zip收集一些开源数值计算项目并复制它们.zip收集一些开源数值计算项目并复制它们.zip收集一些开源数值计算项目并复制它们.zip收集一些开源数值计算项目并复制它们.zip收集一些...

    数值计算大作业报告_数值计算报告_

    6. 应用实例:报告通常会包含一些实际案例,展示如何运用数值计算方法解决特定的工程或科学问题,这有助于理解数值计算的实际价值。 7. 结果验证与比较:为了证明所使用的数值方法的有效性,报告可能会与其他已知解...

    《数值计算方法》课后习题答案.pdf

    但是,考虑到您的需求,我将尝试为您提供关于《数值计算方法》课程中可能会涉及到的一些常见知识点。数值计算方法是数学的一个分支,它使用近似算法来解决数学问题,这些数学问题在精确解不存在或难以求得时尤为重要...

    乐享matlab项目,以matlab为编程语言,提供一些数值计算、数学建模等服务.zip

    MATLAB支持矩阵计算、科学数据可视化以及非线性动态系统的建模,提供了一个易于使用的窗口环境,使得科学研究、工程设计以及需要进行有效数值计算的科学领域能够得到全面的解决方案 此外,MATLAB还具有以下特点: ...

    matlab数值计算.pdf

    MATLAB 数值计算 MATLAB 是一款功能强大的数值计算软件,广泛应用于科学研究、工程设计、数据分析等领域。本章将详细介绍 MATLAB 在数值计算方面的应用,包括线性分析、一元和多元函数分析、微积分、数据分析、常...

    数值计算A课件.rar

    下面将详细介绍一些数值计算的基础知识点: 1. **误差分析**:数值计算中不可避免地会出现误差,这包括舍入误差和截断误差。舍入误差源于计算机存储浮点数时的有限精度,而截断误差则发生在用有限项近似无限级数或...

    数值计算 求一元二次方程

    然而,在实际编程中,我们需要考虑一些数值计算中的问题,例如抵消(cancelling)、上溢(overflow)和下溢(underflow)。抵消是指在计算过程中,大数字与接近零的小数字相除导致精度损失。上溢和下溢分别指数值过...

    java数值计算算法示例程序

    在Java编程领域,数值计算算法是至关重要的一个部分,它涉及到数学、物理学、工程学等多个领域的实际应用。这个“java数值计算算法示例程序”压缩包提供了丰富的代码示例,帮助开发者深入理解并掌握如何在Java中实现...

    c#常用数值计算算法与程序源码

    以上就是C#中常用的一些数值计算算法,通过这些源代码,开发者可以深入理解算法的工作原理,并在实际项目中灵活运用。同时,了解并掌握这些算法也有助于提升C#编程能力,解决更为复杂的问题。在实践中,不断学习和...

    数值分析数值计算讲义超详细

    在数值计算中,我们经常会遇到一些基本概念,如underflow和overflow,这两个概念都是在数值计算中非常重要的。Underflow指的是在计算过程中,小于一定阈值的数值被归零的现象,而Overflow指的是在计算过程中,大于...

    《数值计算方法》课后题答案(湖南大学-曾金平).pdf

    根据提供的文件信息,内容似乎是一本题名为《数值计算方法》的书的课后习题答案,这本书是由湖南大学的曾金平编写的。书中内容涉及各种数值计算方法,包括但不限于插值、积分、微分、方程求解等。 首先,数值计算...

    sun_数值计算指南

    这份文档不仅对IEEE 754标准和double类型的数据进行了深入解析,还提供了数学库的使用说明、异常处理机制以及一些相关的示例,特别是在数值计算领域广泛应用的IEEE算法和相关数学函数库的详细信息。Sun Microsystems...

    数值计算程序集

    《数值计算程序集》是一本深入探讨数值计算方法的C语言实现的经典著作。该书针对物理、数学和计算机科学的学习者,提供了丰富的理论基础和实践经验,帮助读者理解并掌握数值计算的核心概念。书中包含了各种常用的...

    大学数值计算方法课件

    《大学数值计算方法课件》是一份针对高等教育阶段学生深入学习数值计算方法的重要资源,它以PPT的形式呈现,旨在帮助学生理解和掌握数值计算的基本概念、理论与应用。数值计算方法是计算机科学、工程学、物理学等多...

    数值计算方法的一些课件

    数值计算方法是计算机科学与工程领域中的重要分支,它主要研究如何用计算机处理涉及实数或复数的数学问题。这些方法通常涉及到近似计算,因为计算机无法精确表示所有实数,因此必须采用一系列策略来逼近真实解。本...

    数值积分的中点法:MIDPOINT 法。 数值积分的一些数值计算和分析练习。-matlab开发

    用于比较分析的数值积分的一些数值计算和分析练习。 f 函数以符号变量 x 和内联函数的形式给出。 例如,f=inline('x^2+2*x-2')。 此外,如果函数 f 是三角函数,则可以将第 4 个参数输入为“trigonom”或仅输入...

    Java数值计算算法编程

    在编程领域,Java语言因其强大的功能和广泛的应用而备受青睐,特别是在数值计算方面。数值计算是计算机科学的一个重要分支,涉及各种数学运算和算法,如数值积分、微分方程求解、线性代数、统计分析等。本文将深入...

Global site tag (gtag.js) - Google Analytics