如何在java中实现中点规则(集成)?

如何在java中实现中点规则(集成)?,java,integration,Java,Integration,取自实验室: 本练习的目的是实现函数数值积分的中点规则(也称为矩形方法) 声明一个通用接口函数,如下所示: 公共接口函数{B apply(A arg);} 然后编写一个数学类,使用方法integrate实现>函数f的中点规则,该函数将在下界和上界之间以n个等距>步骤进行积分: 公共静态双积分(功能f, 双下限,双上限,整数n) 通过对0和1之间的平方函数进行数值积分来测试代码(结果应大约为1.0/3.0) 0和PI/2之间的窦房结函数(参见java.lang.Math类,结果应该>大约1.0)在

取自实验室:

本练习的目的是实现函数数值积分的中点规则(也称为矩形方法)

声明一个通用接口函数,如下所示:

公共接口函数{B apply(A arg);}

然后编写一个数学类,使用方法integrate实现>函数f的中点规则,该函数将在下界和上界之间以n个等距>步骤进行积分:

公共静态双积分(功能f, 双下限,双上限,整数n)

通过对0和1之间的平方函数进行数值积分来测试代码(结果应大约为1.0/3.0)

0和PI/2之间的窦房结函数(参见java.lang.Math类,结果应该>大约1.0)在本练习中使用命名的局部类(比如“窦房结”和“平方”)似乎很自然,但如果愿意,也可以使用匿名局部类。 我查看了维基百科页面,但我无法真正理解整个概念(尤其是上界和下界)。好吧,这只是一种得到直线下面积的方法,给定N个矩形,用来得到直线上每个切点的面积。我不知道如何将它与上面的函数联系起来——可能是递归?我也从未见过这样的事情:

B应用(A参数)

--

到目前为止,我取得了以下进展:

public class MidPointRule {
    public MidPointRule() {
    }
    public static double integrate(Function<Double,Double> f, double lowerBound,double upperBound, int n){
        double width = upperBound-lowerBound/n; // width is current width-nextwidth/n?
        return integrate(f,lowerBound,upperBound,n);
    }
    public static void main(String[] args) {
        // sq function between 0 and 1, sinus function between 0 and PI/2.

    }
}
公共类中点规则{
公共中点规则(){
}
公共静态双积分(函数f,双下界,双上界,int n){
double width=上限下限/n;//宽度是当前宽度的第二个/n?
返回积分(f,下界,上界,n);
}
公共静态void main(字符串[]args){
//sq函数介于0和1之间,窦函数介于0和PI/2之间。
}
}

看起来您需要首先为函数创建一个接口。您的函数将A类型的内容作为参数,并返回B类型的内容。它可能如下所示:

// here I am using Float for both A and B
Function<Float, Float> myFunc = new SineFunction();
float result = myFunc.apply(1.0f);
//这里我对A和B都使用Float
函数myFunc=新函数();
浮动结果=myFunc.apply(1.0f);
完成此操作后,将要求您编写一个函数来集成任何其他函数。假设我想把sin(x)积分在x=0和x=pi/2之间。这就是所谓的上下限(0表示下限,pi/2表示上限)。因此,您的积分函数应该使用一些
n
步数作用于某些范围内的函数,如0到pi/2


这就是我不给你任何答案就要说的。祝你好运

有一些问题应该先问同学或负责任的教授,然后再在课堂上提问。对于有关StackOverflow的问题,我们希望您展示一些理解问题的进展,并展示您所做的尝试。。。也就是说,我不认为这是一个如此相关的问题…@MateuszDymczyk这就是为什么他们有一个接口,而不是让你从一个字符串解释它。您用java代码编写函数,似乎不知道java接口是什么@西蒙南德·福斯伯格(SimonAndréForsberg)甚至可能是一个官方的亲密原因——与“没有采取任何行动来解决它”无关。元?