C#梯形规则y值之和

C#梯形规则y值之和,c#,C#,我们的老师让我们用C#做一个梯形规则解; 他要我们把它分成三种方法。 以下是到目前为止的问题和我的代码: public static double EvaluateQuadraticValue(double x, double a, double b, double c) { double y = a * Math.Pow(x, 2) + b * x + c; Console.WriteLine("The y coordinate for this

我们的老师让我们用C#做一个梯形规则解; 他要我们把它分成三种方法。 以下是到目前为止的问题和我的代码:

    public static double EvaluateQuadraticValue(double x, double a, double b, double c)
    {
        double y = a * Math.Pow(x, 2) + b * x + c;
        Console.WriteLine("The y coordinate for this x is: {0}", y);
        return y;
    }

    public static double[] ComputeQuadraticValues(double startX, double increments, int numberOfIntervals, double a, double b, double c)
    {

        double[] xPoints = new double[numberOfIntervals];
        for (int index = 0; index < numberOfIntervals; index++)
        {
            xPoints[index] = startX;
            Console.WriteLine("X{0} is {1}: ",index, xPoints[index]);
            EvaluateQuadraticValue(startX, a, b, c);
            startX = startX + increments;
        }
        return xPoints;
    }

    public static void ApplyTrapeziodalRule(double startX, double endX, int numberOfIntervals, double a, double b, double c)
    {
        double increments = Convert.ToInt32(Console.ReadLine());
        double[] xPoints = ComputeQuadraticValues(startX, increments, numberOfIntervals, a, b, c);
        //double[] values = a * Math.Pow(xPoints[i], 2) + b * xPoints[i] + c;
        //double y = xPoints.Sum();
        /*for (int i = 0; i < numberOfIntervals; i++)
        {

        }*/
        //Console.WriteLine(y + " sum");
    }
数值积分是一种特别适合于计算机的技术 计算机应用。在练习中,我们将尝试实施 梯形法则。数学函数的积分是面积 在曲线和x轴之间。如果将该区域划分为小区域 梯形,则积分近似于这些梯形的面积 几何图形

您将尝试在中找到曲线y=6x^2-7x+2下的面积 从x=0.5到x=1.5的区域(注意,您的答案应为 约为1.54,但实际答案为1.5)。面积由以下公式给出: 公式

式中,y0和y1是垂直线的高度,即 功能

该问题可分解为以下三个部分:

  • 编写一个名为EvaluateQuadricValue(双x,双a,双b,双c)的方法,该方法接受四个双参数:x的值, x2项的系数,x和
    常数该方法将计算并返回y的结果值
    由表达式y=ax2+ba+c给出

  • 编写一个名为ComputeQuadraticValues(双起点,双增量,int numberofinterval,双a,双b,双c)的方法 接受六个参数:x的起始值、增量和
    区间数和二次方程的系数。
    此方法将通过调用 上一个问题。将收集方法调用的结果 并作为双数组返回

  • 编写一个名为ApplyTrapeziodalRule的方法(双开始、双结束、int numberofinterval、双a、双b、双c)。
    前一个问题中描述了参数。此方法调用
    前面的方法和处理返回到的双数组
    应用公式计算曲线下的面积

到目前为止,我的代码是:

    public static double EvaluateQuadraticValue(double x, double a, double b, double c)
    {
        double y = a * Math.Pow(x, 2) + b * x + c;
        Console.WriteLine("The y coordinate for this x is: {0}", y);
        return y;
    }

    public static double[] ComputeQuadraticValues(double startX, double increments, int numberOfIntervals, double a, double b, double c)
    {

        double[] xPoints = new double[numberOfIntervals];
        for (int index = 0; index < numberOfIntervals; index++)
        {
            xPoints[index] = startX;
            Console.WriteLine("X{0} is {1}: ",index, xPoints[index]);
            EvaluateQuadraticValue(startX, a, b, c);
            startX = startX + increments;
        }
        return xPoints;
    }

    public static void ApplyTrapeziodalRule(double startX, double endX, int numberOfIntervals, double a, double b, double c)
    {
        double increments = Convert.ToInt32(Console.ReadLine());
        double[] xPoints = ComputeQuadraticValues(startX, increments, numberOfIntervals, a, b, c);
        //double[] values = a * Math.Pow(xPoints[i], 2) + b * xPoints[i] + c;
        //double y = xPoints.Sum();
        /*for (int i = 0; i < numberOfIntervals; i++)
        {

        }*/
        //Console.WriteLine(y + " sum");
    }
公共静态双求值平方值(双x,双a,双b,双c)
{
双y=a*Math.Pow(x,2)+b*x+c;
WriteLine(“这个x的y坐标是:{0}”,y);
返回y;
}
公共静态双[]计算平方值(双起点、双增量、整数间隔、双a、双b、双c)
{
double[]xPoints=新的double[numberofinterval];
for(int index=0;index
目前我对第三种方法有困难。 由于我的双数组来自
ComputeQuadraticValues()
是x0、x1、x2等。我如何使用这个数组来获得(y0+2*y1+2*y2+…+2*yn+y(n+1))


任何提示或提示都将不胜感激

对我来说,
计算二次值的描述是令人困惑的。如果它返回y0、y1、y2等,而不是如上所述的x0、x1、x2等,则是有意义的

查看您调用的
EvaluateQuadraticValue
ComputeQuadraticValues
代码(计算给定x的y)。但是,计算的y值不会存储在任何位置。您可以将
xPoints
重命名为
yPoints
,然后将计算出的y值存储在该数组中,然后将其作为函数的结果返回


有了这个改动,你就可以编写一个工作版本的
ApplyTrapeziodalRule

我同意@MartinLiversage,并且认为练习中还有其他一些棘手的部分。我会尽力给你一个好答案。让我知道这对你是如何起作用的

这是由
6x^2-7x+2
表示的曲线,您需要用蓝色计算面积:

你所做的是一种数值方法,其背后的逻辑是,如果你能将面积分成无限多个点,你就能更准确地得到总面积。添加的点越多,结果越精确

问题是在计算机科学中,无限是不可能的,因为资源是有限的,最终你需要设定一个限制

我已经将10设置为间隔数(N),因此您将得到11个点,并且示例是可读的

现在,您的第一个方法只是帮助器,用于计算ax^2+bx+c形式的函数

public static double EvaluateQuadraticValue(double x, double a, double b, double c)
{
    double y = a*Math.Pow(x,2) + b*x + c;
    return y;
}
第二个是我认为问题所在。我会这样实现它:

public static double[] ComputeQuadraticValues(double startX, double increments, int numberOfIntervals, double a, double b, double c)
{
    //We need numberOfInterval + 1 values
    double[] yPoints = new double[numberOfIntervals+1];

    for (int index = 0; index <= numberOfIntervals; index++, startX += increments)
    {
        //evaluate the function and get the y value for this x
        yPoints[index] = EvaluateQuadraticValue(startX, a, b, c);
        //Console.WriteLine("({0}, {1})", startX, yPoints[index]);
    }

    return yPoints;
}
public static double[]计算平方值(双起点、双增量、整数间隔、双a、双b、双c)
{
//我们需要numberOfInterval+1值
double[]yPoints=新的double[NumberOfInterval+1];

对于(int index=0;index谢谢,我将尝试一下!非常感谢!我尝试了另一种同样有效的方法(仍然需要确认),使用“out”输出y数组并将其放入第三种方法。我非常感谢!