C# 更改特定元素时更新数组的值

C# 更改特定元素时更新数组的值,c#,arrays,algorithm,newtons-method,linear-interpolation,C#,Arrays,Algorithm,Newtons Method,Linear Interpolation,假设我已经定义了一个名为computeValue(double x)的函数: 其输入是双精度值 它返回一个值,该值是通过使用数组元素执行一组特定操作获得的,如下所述 此外,我们还有上面提到的数组 是某个班级的成员吗 只包含4个位置 第一个位置包含某个值,第四个位置包含另一个值,该值将作为我们函数的输入 (这里是棘手的一点),数组的第二和第三个值应该是数组位置1和4之间线性插值的结果。也就是说,如果我们修改数组的位置1或4,那么位置2和3应该根据插值方法自动更改其值 我的目标是调用根查找算法(如N

假设我已经定义了一个名为
computeValue(double x)
的函数:

  • 其输入是双精度值
  • 它返回一个值,该值是通过使用数组元素执行一组特定操作获得的,如下所述
  • 此外,我们还有上面提到的数组

  • 是某个班级的成员吗
  • 只包含4个位置
  • 第一个位置包含某个值,第四个位置包含另一个值,该值将作为我们函数的输入
  • (这里是棘手的一点),数组的第二和第三个值应该是数组位置1和4之间线性插值的结果。也就是说,如果我们修改数组的位置1或4,那么位置2和3应该根据插值方法自动更改其值
  • 我的目标是调用根查找算法(如Newton Raphson、割线法等),以最小化以下表达式:

    f = CONSTANT - computeValue(array[4])
    
    正如您可能已经观察到的,问题在于每次我的寻根例程修改数组的第4个元素以获得新的解时,数组的位置2和3都应该相应地修改,因为它们是插值的结果(如上文第4点所述),从而更改
    computeValue
    的结果


    当根查找算法朝着根方向运行时,使数组值动态变化的可能方法是什么?可能与存储定义插值的lambda表达式的数组有关?

    经典数组无法完成此操作,但您可以实现自己的类型来解决此问题。这种类型在内部使用一个长度为4的数组,并通过

    public int this[int index]    
    {
        // get and set accessors
    }
    

    在这里,您可以编写自己的getter和setter,以便在更改其他getter和setter后立即重新计算值

    现在似乎是创建自己的对象的最佳时机,而不是让自己与数组索引混淆。您可以使用并手动创建或扩充数组类。但我建议完全创建一个新对象。可以使插值点仅获取返回正确插值的特性。您的对象可能如下所示:

    public class Interpolator
    {
        public double Constant {get; set;} //same as your array[0]
        public double Value {get; set;}    //same as your array[3]
    
        public double Interpolation1 { get { return CalculateInterpolation1(); } }
        public double Interpolation2 { get { return CalculateInterpolation2(); } }
    
        private double CalculateInterpolation1()
        {
            //define your interpolation here
        }
    
        private double CalculateInterpolation2()
        {
            //define your interpolation here
        }       
    }
    
    简介