c#使用委托实现辛普森法求多个函数的定积分

来源:互联网 发布:胡歌顶级时尚资源知乎 编辑:程序博客网 时间:2024/06/09 15:00
用辛普生法对几个不同的被积函数求指定区间的定积分。被积函数为f(x),积分区间[a,b]被等分为n=2k份,每份步长为h=(b-a)/n,则积分值为:S≈h((f(a)+f(b))/2 +f(a+h)+…+f(a+(n-1)h))。

运行结果:
这里写图片描述
这里写图片描述

//辛普森法求积分copyright vivi_and_qiao 李伟using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 辛普森法求积分{    delegate double MyDelegate(double x);    class Function    {        public double f1(double x)        {            return x * x;        }        public string getf1()        {           return "y= x* x";        }        public double f2(double x)        {            return 2 * x + 1;        }        public string getf2()        {            return "y=2 * x + 1";        }        public double f3(double x)        {            return Math.Atan(x);        }        public string getf3()        {            return "y= Math.Atan(x)";        }        public double f4(double x)        {            return Math.Exp(Math.Exp(x));        }        public string getf4()        {            return "y=Math.Exp(Math.Exp(x))";        }    }    class Program    {        public static double jifen(double a,double b,int n ,MyDelegate my)        {            double h = (b - a)/n;            double value=0;            for (int i = 1; i <= n; i++)                value += h * (my(a + (i - 1) * h));            return value;        }        static void Main(string[] args)        {            int n;            double a, b;            Console.WriteLine("请输入精度!");            n = int.Parse(Console.ReadLine());            Console.WriteLine("请输入积分上限");            a = int.Parse(Console.ReadLine());            Console.WriteLine("请输入积分下限!");            b = int.Parse(Console.ReadLine());            Function f=new Function();            MyDelegate my=f.f1;            Console.WriteLine("函数:"+f.getf1()+"在积分区间:"+"["+a+","+b+"]"+"的积分值为:"+jifen(a,b,n,my));            my = f.f2;            Console.WriteLine("函数:" + f.getf2() + "在积分区间:" + "[" + a + "," +b+ "]" + "的积分值为:" + jifen(a, b, n, my));             my = f.f3;            Console.WriteLine("函数:" + f.getf3() + "在积分区间:" + "[" + a + "," +b+ "]" + "的积分值为:" + jifen(a, b, n, my));            my = f.f4;            Console.WriteLine("函数:" + f.getf4() + "在积分区间:" + "[" + a + "," +b+ "]" + "的积分值为:" + jifen(a, b, n, my));            Console.ReadKey();        }    }}
1 0