在工程中,经常会遇到积分问题,这时原函数往往都是找不到的,因此就需要用计算方法的数值积分来求。

    public class Integral
{
/// <summary>
/// 梯形公式
/// </summary>
/// <param name="fun">被积函数</param>
/// <param name="up">积分上限</param>
/// <param name="down">积分下限</param>
/// <returns>积分值</returns> public static double TiXing(Func<double, double> fun, double up, double down)
{
return (up - down) / * (fun(up) + fun(down));
}
/// <summary>
/// 辛普森公式
/// </summary>
/// <param name="fun">被积函数</param>
/// <param name="up">积分上限</param>
/// <param name="down">积分下限</param>
/// <returns>积分值</returns>
public static double Simpson(Func<double, double> fun, double up, double down)
{
return (up - down) / * (fun(up) + fun(down) + * fun((up + down) / ));
}
/// <summary>
/// 科特克斯公式
/// </summary>
/// <param name="fun">被积函数</param>
/// <param name="up">积分上限</param>
/// <param name="down">积分下限</param>
/// <returns>积分值</returns>
public static double Cotes(Func<double, double> fun, double up, double down)
{
double C = (up - down) / * ( * fun(up) + * fun(down) + * fun((up + * down) / )
+ * fun((up + down) / ) + * fun(( * up + down) / ));
return C;
} /// <summary>
/// 复化梯形公式
/// </summary>
/// <param name="fun">被积函数</param>
/// <param name="N">区间划分快数</param>
/// <param name="up">积分上限</param>
/// <param name="down">积分下限</param>
/// <returns>积分值</returns>
public static double FuHuaTiXing(Func<double, double> fun, int N, double up, double down)
{
double h = (up - down) / N;
double result = ;
double x = down;
for (int i = ; i < N - ; i++)
{
x += h;
result += fun(x);
}
result = (fun(up) + result * + fun(down)) * h / ;
return result;
} /// <summary>
/// 复化辛浦生公式
/// </summary>
/// <param name="fun">被积函数</param>
/// <param name="N">区间划分快数</param>
/// <param name="up">积分上限</param>
/// <param name="down">积分下限</param>
/// <returns>积分值</returns>
public static double FSimpson(Func<double, double> fun, int N, double up, double down)
{
double h = (up - down) / N;
double result = ;
for (int n = ; n < N; n++)
{
result += h / * (fun(down) + * fun(down + h / ) + fun(down + h));
down += h;
}
return result;
}
/// <summary>
/// 复化科特斯公式
/// </summary>
/// <param name="fun">被积函数</param>
/// <param name="N">区间划分快数</param>
/// <param name="up">积分上限</param>
/// <param name="down">积分下限</param>
/// <returns>积分值</returns>
public static double FCotes(Func<double, double> fun, int N, double up, double down)
{
double h = (up - down) / N;
double result = ;
for (int n = ; n < N; n++)
{
result += h / * ( * fun(down) + * fun(down + h / ) + * fun(down + h / ) +
* fun(down + * h / ) + * fun(down + h));
down += h;
}
return result;
}
/// <summary>
/// 龙贝格算法
/// </summary>
/// <param name="fun">被积函数</param>
/// <param name="e">结果精度</param>
/// <param name="up">积分上限</param>
/// <param name="down">积分下限</param>
/// <returns>积分值</returns>
public static double Romberg(Func<double, double> fun, double e, double up, double down)
{
double R1 = , R2 = ;
int k = ; //2的k次方即为N(划分的子区间数)
R1 = ( * C(fun, * (int)Math.Pow(, k), up, down) - C(fun, (int)Math.Pow(, k++), up, down)) / ;
R2 = ( * C(fun, * (int)Math.Pow(, k), up, down) - C(fun, (int)Math.Pow(, k++), up, down)) / ;
while (Math.Abs(R2 - R1) > e)
{
R1 = R2;
R2 = ( * C(fun, * (int)Math.Pow(, k), up, down) - C(fun, (int)Math.Pow(, k++), up, down)) / ;
}
return R2;
}
private static double S(Func<double, double> fun, int N, double up, double down)
{
return ( * FuHuaTiXing(fun, * N, up, down) - FuHuaTiXing(fun, N, up, down)) / ;
}
private static double C(Func<double, double> fun, int N, double up, double down)
{
return ( * S(fun, * N, up, down) - S(fun, N, up, down)) / ;
}
}

计算方法(二)用C#实现数值积分的更多相关文章

  1. MATLAB介绍

    MATLAB MATLAB[1]  是美国MathWorks公司出品的商业数学软件,用于算法开发.数据可视化.数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink ...

  2. stock 基本操作

    追涨停   量比 大于5      0%-2%   个股    2点卖     37分钟买   板块5 -8 只涨停    板块分向标   追踪短期个股的涨跌现象    明白市场大级别趋势     主 ...

  3. 杂项-数学软件:MATLAB

    ylbtech-杂项-数学软件:MATLAB MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发.数据可视化.数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATL ...

  4. Image Processing and Analysis_8_Edge Detection:Finding Edges and Lines in Images by Canny——1983

    此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...

  5. [LeetCode] Unique Binary Search Trees 独一无二的二叉搜索树

    Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...

  6. android二维码生成

    前生: 一维码:条形码  数字 缺点:不好看,占面积, 好了,请看效果图: 在准备之前我们要导一个包:core-3.2.1.jar 下载请访问: http://download.csdn.net/do ...

  7. C学习笔记 知识集锦(二)

     1. 数组和指针 2. 字符串赋值 3. memset&memcpy 4. 机器数和真值,原码,反码和补码 5. 文件指针和文件描述符 6. 内存泄露和内存损坏 7. 什么是不可移植的程序 ...

  8. Spring学习总结(二)——静态代理、JDK与CGLIB动态代理、AOP+IoC

    一.为什么需要代理模式 假设需实现一个计算的类Math.完成加.减.乘.除功能,如下所示: package com.zhangguo.Spring041.aop01; public class Mat ...

  9. 响应性web设计实战总结(二)

    响应性web设计实战总结(二) 阅读目录 背景知识: Gulp-less安装及配置如下 对响应性web总结,之前总结过2篇文章:可以看如下: http://www.cnblogs.com/tugenh ...

随机推荐

  1. 【BZOJ1901】Dynamic Rankings

    Description 给定一个含有n个数的序列a[1],a[2],a[3]……a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+2]……a[j]中第k小的数是 ...

  2. 3 Longest Substring Without Repeating Characters(最长不重复连续子串Medium)

    题目意思:求字符串中,最长不重复连续子串 思路:使用hashmap,发现unordered_map会比map快,设置一个起始位置,计算长度时,去减起始位置的值 eg:a,b,c,d,e,c,b,a,e ...

  3. angularJS内置指令一览

    基础ng指令 ng-href ng-src ng-disabled ng-readonly ng-checked ng-selected ng-class ng-style ng-show ng-hi ...

  4. mysql的sql优化案例

    前言 mysql的sql优化器比较弱,选择执行计划貌似很随机. 案例 一.表结构说明mysql> show create table table_order\G***************** ...

  5. js 实现 C# 的 format 方法

    2014-11-08 12:18:51 更新,修复原形链方法被当作关键词的bug,其实之前是想用全局关键词的,不过还是算了,array里有太多单词了.                          ...

  6. python执行shell获取硬件参数写入mysql

    最近要获取服务器各种参数,包括cpu.内存.磁盘.型号等信息.试用了Hyperic HQ.Nagios和Snmp,它们功能都挺强大的,但是于需求不是太符,亦或者太heavy. 于是乎想到用python ...

  7. 基于memcached中命令分析函数tokenize_command改造的split函数

    今天使用C重构php代码,需要手写一个split函数,于是就模仿memcached中获取用户命令的函数 static size_t tokenize_command(char *command, to ...

  8. C# windows窗体程序打包安装及卸载

    一.新建安装部署项目

  9. Caffe Python特征抽取

    Caffe Python特征抽取 转载 http://www.cnblogs.com/louyihang-loves-baiyan/ Caffe大家一般用到的深度学习平台都是这个,关于Caffe的训练 ...

  10. Es kibana

    http://kibana.logstash.es/content/kibana/v4/setup/production.html