博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一段C#学习代码(实现通过积分的几何意义计算积分)
阅读量:6576 次
发布时间:2019-06-24

本文共 2601 字,大约阅读时间需要 8 分钟。

hot3.png

1.本段程序实现的功能

1)通过积分的几何意义计算积分:计算函数曲线与坐标轴围成部分的面积,方法为将面积分为小块的矩形,依次计算矩形的面积并相加

2)程序通过Integration函数计算积分,该函数有三个参数:attr、left、right,分别代表:选用哪个函数进行计算、积分下界和积分上界。写一个函数,参数和返回值都是double类型,只要在其上加上[RemarkAttribute("函数标识")],并将“函数标识”字符串传入到attr参数中,Integration函数就可以自动选择这个函数进行积分计算了

2.函数实现

/// /// 示例函数1:f(x)=x*2/// /// 
自变量x/// 
因变量f(x)
[RemarkAttribute("Double")]public static double Function1(double x){    return x * 2;}/// 
/// 示例函数2:f(x)=x^2/// /// 
自变量x/// 
因变量f(x)
[RemarkAttribute("Square")]public static double Function2(double x){    return x * x;}/// 
/// 示例函数3:(x-1)^2+y^2=1 (y>=0)/// /// 
自变量x/// 
因变量f(x)
[RemarkAttribute("HalfCircle")]public static double Function3(double x){    double result = 1 - (x - 1) * (x - 1);    return Math.Sqrt(result >= 0 ? result : 0);}/// 
/// 特性 RemarkAttribute,用在函数上,其 Remark 属性决定了/// 积分函数 Integration 应该选择程序中的哪个函数进行计算/// [AttributeUsage(AttributeTargets.Method)]public class RemarkAttribute : Attribute{    string remark;    public string Remark     {        get { return remark; }    }    //构造函数    public RemarkAttribute(string comment)     {        remark = comment;    }}/// 
/// 计算积分/// /// 
原函数RemarkAttribute特性名/// 
积分下界/// 
积分上界/// 
public static double Integration(string attr, double left, double right){    //1.找到 RemarkAttribute 特性为 attr 的方法(需要 using System.Reflection;)    MethodInfo[] mi = typeof(Program).GetMethods();    MethodInfo mthd = null;    foreach (MethodInfo m in mi)    {        Type t2 = typeof(RemarkAttribute);        RemarkAttribute ra = (RemarkAttribute)Attribute.GetCustomAttribute(m, t2);        if (ra != null && ra.Remark == attr)        {            mthd = m;            break;        }    }    //2.如果没有找到 RemarkAttribute 特性为 attr 的方法则报出异常    if (mthd == null)    {        throw new Exception("没有特性为 " + attr + " 的方法");    }    //3.调用找到的方法,通过积分的几何意义求解面积    double result = 0;    for (double i = left; i < right; i += 1E-6)    {        result += (double)mthd.Invoke(null, new object[] { i + 5E-7 }) * 1E-6;    }    return result;}

3.Main函数调用

static void Main(string[] args){    Console.WriteLine("f(x)=x*2 在 [0,2] 的积分:");    Console.WriteLine(Integration("Double", 0, 2).ToString("#0.000"));    Console.WriteLine("f(x)=x^2 在 [0,2] 的积分:");    Console.WriteLine(Integration("Square", 0, 2).ToString("#0.000"));    Console.WriteLine("(x-1)^2+y^2=1 (y>=0) 在 [0,2] 的积分:");    //即函数 f(x)=1-(x - 1)*(x-1) (0<=x<=2) 在 [0,2] 的积分    Console.WriteLine(Integration("HalfCircle", 0, 2).ToString("#0.000"));    Console.ReadLine();}

4.运行示例

140839_fY9n_1425762.png

转载于:https://my.oschina.net/Tsybius2014/blog/264190

你可能感兴趣的文章
LAMP,安装脚本
查看>>
电脑上怎样压缩图片大小
查看>>
lnmp安装
查看>>
FTP工作方式
查看>>
Ubuntu16.04 ssh安及root登录
查看>>
C语言dos程序源代码分享(进制转换器)
查看>>
php项目中常用的log日志记录方法
查看>>
LogParser 导入MSSQL
查看>>
linux安装go环境并编写第一个go程序
查看>>
【在线研讨-现场文字】《敏捷开发用户故事分类与组织结构(二期-3)》2012-07-03...
查看>>
易语言 --什么情况下 用许可证
查看>>
项目总结:凡事预则立,不预则废!
查看>>
建属于自己的网站
查看>>
[linux] ubuntu 切换默认的/bin/sh
查看>>
boost库之智能指针
查看>>
我的友情链接
查看>>
自定义View Client 登录方式(一)
查看>>
cenOS+nginx+php+mysql (非一键包安装)
查看>>
我的友情链接
查看>>
我来自CSDN
查看>>