计算方法(二)用C#实现数值积分
在工程中,经常会遇到积分问题,这时原函数往往都是找不到的,因此就需要用计算方法的数值积分来求。
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#实现数值积分的更多相关文章
- MATLAB介绍
MATLAB MATLAB[1] 是美国MathWorks公司出品的商业数学软件,用于算法开发.数据可视化.数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink ...
- stock 基本操作
追涨停 量比 大于5 0%-2% 个股 2点卖 37分钟买 板块5 -8 只涨停 板块分向标 追踪短期个股的涨跌现象 明白市场大级别趋势 主 ...
- 杂项-数学软件:MATLAB
ylbtech-杂项-数学软件:MATLAB MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发.数据可视化.数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATL ...
- Image Processing and Analysis_8_Edge Detection:Finding Edges and Lines in Images by Canny——1983
此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...
- [LeetCode] Unique Binary Search Trees 独一无二的二叉搜索树
Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...
- android二维码生成
前生: 一维码:条形码 数字 缺点:不好看,占面积, 好了,请看效果图: 在准备之前我们要导一个包:core-3.2.1.jar 下载请访问: http://download.csdn.net/do ...
- C学习笔记 知识集锦(二)
1. 数组和指针 2. 字符串赋值 3. memset&memcpy 4. 机器数和真值,原码,反码和补码 5. 文件指针和文件描述符 6. 内存泄露和内存损坏 7. 什么是不可移植的程序 ...
- Spring学习总结(二)——静态代理、JDK与CGLIB动态代理、AOP+IoC
一.为什么需要代理模式 假设需实现一个计算的类Math.完成加.减.乘.除功能,如下所示: package com.zhangguo.Spring041.aop01; public class Mat ...
- 响应性web设计实战总结(二)
响应性web设计实战总结(二) 阅读目录 背景知识: Gulp-less安装及配置如下 对响应性web总结,之前总结过2篇文章:可以看如下: http://www.cnblogs.com/tugenh ...
随机推荐
- fedora20 播放aiv视频
环境:fedora20 64位 下载个教程是avi的格式,用FEDORA自带的视频播放提示少插件,搜索又没有. 到网上搜索后,参考下面的方式添加软件仓库后,再打开视频播放顺利装好插件.但视频画件一闪 ...
- HTTP协议学习-02
HTTP 协议详解之 URL 的组成 http(超文本传输协议)是一个基于请求与响应模式的.无状态的.应用层的协议,常基于 TCP 的连接方式,HTTP1.1 版本中给出一种持续连接的机制,绝大多数的 ...
- powerpoint取色器有什么用|ppt取色器使用教程
在使用powerpoint过程中常常发现一些功能我们很少用到,其实是自己不会用的原因,关于powerpoint取色器有什么用呢?接下来我们一起来学一下ppt取色器使用教程. powerpoint取色器 ...
- access数据库管理软件收集下载
access百科 Microsoft Office Access是由微软发布的关系数据库管理系统.它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点,是 Mi ...
- SQL Server分区动态生成脚本(三)(按年份划分)
--生成分区脚本DECLARE @DataBaseName NVARCHAR(50)--数据库名称DECLARE @TableName NVARCHAR(50)--表名称DECLARE @Column ...
- Linux——搭建PHP开发环境第二步:PHP
原文链接:http://www.2cto.com/os/201511/450258.html ##### PHP 编译安装 #### [root@localhost ~]# yum install l ...
- python中快速删除实例对象中的所有属性
def DeleteObjectAllProperties(objectInstance): if not objectInstance: return listPro =[key for key i ...
- some words that I always make mistake
发音相似容易混淆的词汇 alteration 英 [ɔːltə'reɪʃ(ə)n; 'ɒl-] 美 [,ɔltə'reʃən] n. 修改,改变:变更 alteration /ˌɔːltəˈre ...
- Niagara解决设备连接应用的软件框架平台技术。
Niagara 是Tridium公司所研发的设计用于解决设备连接应用的软件框架平台技术. Niagara是一种应用框架,或者说是软件框架,特别设计用于应对智能设备所带来的各种挑战,包括设备连接到企业级 ...
- CentOS安装搜狗词库
中文输入使用ibus-pinyin. 在ibus-pinyin里使用搜狗词库 # wget http://hslinuxextra.googlecode.com/files/sougou-phrase ...