计算方法(二)用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 ...
随机推荐
- ASP.NET中实现页面间数据传递的方法
说到页面间数据传递,很多人都会想到通过像Session这样的全局变量,但是向Session中添加的东西太多会增加服务器的压力,页面间数据传递,数据的作用范围越小越好. ASP.NET页面间数据传递 ...
- underscorejs-reduceRight学习
2.4 reduceRight 2.4.1 语法: _.reduceRight(list, iteratee, memo, [context]) 2.3.2 说明: reduceRight和reduc ...
- Mac系统下安装PIL
安装PIL依赖JPEG.Freetype.LittleCMS, 首先安装这三个环境(第一至三步): 第一步:安装JPEG http://www.ijg.org/files/jpegsrc.v8c.ta ...
- Layer 一个让你想到即可做到的web弹窗/层 解决方案
最近工作上面用到的web弹窗组件layer layer是一款口碑极佳的web弹层组件,她具备全方位的解决方案,致力于服务各个水平段的开发人员,您的页面会轻松地拥有丰富而友好的操作体验. layer官方 ...
- Swift互用性:采用Cocoa设计模式(Swift 2.0版)-b
本页包含内容: 委托(Delegation) 错误处理(Error Handling) 键值观察(Key-Value Observing) Target-Action模式(Target-Action) ...
- CSS中定位position
毋庸置疑的是,pisition是css中是最重要的属性之一. 一共有四种定位方式,static.relative.absolute.fixed. 默认的定位方式static 页面中所有的元素默认都是s ...
- Period
uvalive3026:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&pag ...
- ISO15693协议的Inventory
ISO15693的Inventory指令看起来比较让人迷糊,想明白其流程,我认为以下几点是必须了解的: 第一.ISO15693标签的几种状态,资料上有,这里罗嗦重复一下: 1.PowerOff状态 2 ...
- BAT带队烧钱圈地华为们猛追云计算
在和一位创业者交流时,他说现在创业者想从市场脱颖而出太难了,且不论创业本身的不易,更多时候是想做的事情都被BAT广撒网覆盖了. 现实也正是如此,包括影业.在线音乐.车联网等领域,BAT都已涉足.如今, ...
- perl 正则详解
用/s 来匹配任意字符 默认情况下,点号(.)无法匹配换行符,这对大多数单行匹配的情况是合适的. . 圆点用于匹配除换行符外的任何单个字符 + 意味着一个或多个相同的字符 .+ 匹配任意单个字符至少一 ...