更改特定元素时更新数组的值
Update values of array when a specific element is changed
让我们假设我已经定义了一个名为 computeValue (double x)
:
的函数
- 其输入是双精度值
- 即returns通过使用数组元素执行一组特定操作获得的值,将在下面描述。
此外,我们有上面提到的数组,
- 是某个class的成员
- 仅包含 4 个位置。
- 第一个位置包含某个值,第四个包含另一个值,它将作为我们函数的输入
- (棘手的地方来了),数组的第2和第3个值应该是数组位置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,以便您可以在其他值更改后立即重新计算值。
不要将自己与数组索引混淆,这似乎是创建您自己的对象的绝佳时机。您可以使用 并手动创建或扩充数组 class。但我建议完全创建一个新对象。您可以使插值点仅获得 return 正确插值的属性。您的对象可能如下所示:
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
}
}
一个简短的.Net Fiddle demo
让我们假设我已经定义了一个名为 computeValue (double x)
:
- 其输入是双精度值
- 即returns通过使用数组元素执行一组特定操作获得的值,将在下面描述。
此外,我们有上面提到的数组,
- 是某个class的成员
- 仅包含 4 个位置。
- 第一个位置包含某个值,第四个包含另一个值,它将作为我们函数的输入
- (棘手的地方来了),数组的第2和第3个值应该是数组位置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,以便您可以在其他值更改后立即重新计算值。
不要将自己与数组索引混淆,这似乎是创建您自己的对象的绝佳时机。您可以使用
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
}
}
一个简短的.Net Fiddle demo