您现在的位置:新闻首页>积分

【原创】开源Math.NET基础数学类库使用(08)C#进行数

2018-08-08 11:50编辑:igtpro.com人气:


  在数值计算的需求中,数值积分也是比较常见的一个。我们也知道像Matlab,Mathematics等软件的积分求解功能非常高大上,不仅能求解定积分,还能求解不定积分,甚至多重积分等等。而Math.NET这个组件没有如此高级的功能,目前也只提供了比较件的闭区间上的定积分求解功能。今天就一起来看看,因为不定积分涉及到符号计算,因此其背后的原理和实现要复杂得多。就连Matlab这种软件暂时也不支持混编编程求解符号计算相关的功能。

  如果本文资源或者显示有问题,请参考 本文原文地址: 

1.定积分

  很多人可能已经淡忘了定积分的概念,当然需要用到的朋友看到这里,也基本不用看本段的内容,比较简单,高等数学已经是10多年前学过的东西了,虽然以前很精通,现在也只能凭印象理解和网络来对这个概念稍微进行整理,可能有些不完整或小错误,还请谅解。

  数学定义:如果函数f(x)在区间[a,b]上连续,用分点xi将区间[a,b]分为n 个小区间,在每个小区间[xi-1,xi]上任取一点ri(i=1,2,3„,n) ,作和式f(r1)+...+f(rn) ,当n趋于无穷大时,上述和式无限趋近于某个常数A,这个常数叫做y=f(x) 在区间上的定积分. 记作/ab f(x) dx 即 /ab f(x) dx =limn>00 [f(r1)+...+f(rn)], 这里,pk10,a 与 b叫做积分下限与积分上限, pk10,区间[a,b] 叫做积分区间,函数f(x) 叫做被积函数,x 叫做积分变量,f(x)dx 叫做被积式。

  几何定义:可以理解为在 Oxy坐标平面上,由曲线y=f(x)与直线x=a,x=b以及x轴围成的曲边梯形的面积值(一种确定的实数值)。

详细的可以参考以下链接:

定积分的计算公式和性质:

2.Math.NET关于定积分的实现

  Math.NET中对定积分的实现都在MathNet.Numerics.Integration命名空间以及Integrate.cs中,Integrate静态类其实是对Integration命名空间下几个近似积分方法的实现。Math.NET定积分的近似求解主要是用到了“梯形法则”,详细的内容可以参考以下:链接,其原理非常简单。这里我们只介绍经常用到的Integrate静态类的实现,很简单,其他内部实现过程可以查源码:

1 using System; 2 using MathNet.Numerics.Integration; 3 4 namespace MathNet.Numerics 5 { 6 /// <summary> 7 /// 数值积分类 8 /// </summary> 9 public static class Integrate 10 { 11 /// <summary> 12 /// 近似解析光滑函数在闭区间上的定积分 13 /// </summary> 14 /// <param>The analytic smooth function to integrate.</param> 15 /// <param>Where the interval starts, inclusive and finite.</param> 16 /// <param>Where the interval stops, inclusive and finite.</param> 17 /// <param>The expected relative accuracy of the approximation.</param> 18 /// <returns>Approximation of the finite integral in the given interval.</returns> 19 public static double OnClosedInterval(Func<double, double> f, double intervalBegin, double intervalEnd, double targetAbsoluteError) 20 { 21 return DoubleExponentialTransformation.Integrate(f, intervalBegin, intervalEnd, targetAbsoluteError); 22 } 23 24 /// <summary> 25 /// 近似解析光滑函数在闭区间上的定积分 26 /// </summary> 27 /// <param>The analytic smooth function to integrate.</param> 28 /// <param>Where the interval starts, inclusive and finite.</param> 29 /// <param>Where the interval stops, inclusive and finite.</param> 30 /// <returns>Approximation of the finite integral in the given interval.</returns> 31 public static double OnClosedInterval(Func<double, double> f, double intervalBegin, double intervalEnd) 32 { 33 return DoubleExponentialTransformation.Integrate(f, intervalBegin, intervalEnd, 1e-8); 34 } 35 } 36 }

  下面的例子就是直接调用该类进行的。  

3.C#使用Math.NET求解定积分的例子

  使用比较简单,直接看源码:

(来源:新浪体育网)

织梦二维码生成器
已推荐
0
  • 凡本网注明"来源:的所有作品,版权均属于中,转载请必须注明中,http://www.igtpro.com。违反者本网将追究相关法律责任。
  • 本网转载并注明自其它来源的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品来源,并自负版权等法律责任。
  • 如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。






图说新闻

更多>>