gpt4 book ai didi

java - 在 Java 中求样条函数的导数

转载 作者:行者123 更新时间:2023-11-30 06:06:53 25 4
gpt4 key购买 nike

我目前正在查找原始数据的三次样条:

    double y[] = { 0.0, 1.0, 2.0,3.0,4.0,5.0 };
double x[] = { 0.0, 1.0, 8.0, 27.0, 64, 125};
//these arrays are just an example

UnivariateInterpolator interpolator = new SplineInterpolator();
UnivariateFunction spline = interpolator.interpolate(y, x);
double interpolatedY = spline.value(5.0);

我在程序的另一部分使用 interpolatedY 变量。我还需要找到 UnivariateFuction 样条的导数,以便可以计算 y'(x),其中 x 可以是任何值。我尝试过使用以下方法:

  // function to be differentiated
UnivariateFunction basicF = new UnivariateFunction() {
public double value(double x) {
return spline.value(x);
}
};

// create a differentiator using 5 points and 0.01 step
FiniteDifferencesDifferentiator differentiator =
new FiniteDifferencesDifferentiator(51, 0.01);

UnivariateDifferentiableFunction completeF = differentiator.differentiate(basicF);

System.out.println("y'(x=2) = " + completeF.value(new DerivativeStructure(1,1,0,2).getPartialDerivative(1)));

但这看起来很啰嗦,而且没有返回正确的答案。有什么建议吗?

谢谢

最佳答案

interpolator.interpolate(y, x) 返回 PolynomialSplineFunction扩展了以下接口(interface):

  1. DifferentiableUnivariateFunction (deprecated)
  2. UnivariateDifferentiableFunction
  3. UnivariateFunction

您可以做的一件事是,不要使用 UnivariateFunctionUnivariateInterpolator ,您可以使用 UnivariateDifferentiableFunctionSplineInterpolator如下:

SplineInterpolator interpolator = new SplineInterpolator();
UnivariateDifferentiableFunction spline = interpolator.interpolate(y, x);
double interpolatedY = spline.value(5.0);

DerivativeStructure ds = spline.value(new DerivativeStructure(1, 1, 0, 2));
System.out.println(ds.getPartialDerivative(1));

输出

// Function to interpolate f(x) = x^3
// First order derivative f'(x) = 3x^2
// f'(2) = 12.0
Approximation: 12.167464114832537
Theoretical: 12.0

注释

在内部,样条插值器计算 Natural Cubic Splinexy自然三次样条enter image description here
由于您尝试计算 2.0 处的一阶导数,因此感兴趣的函数是:

f(x) = 1.1196 x^3 - 0.43062 x^2 + 0.45455 x - 0.14354  

求一阶导数:

f'(x) = 3.3588 x^2 - 0.8612 x + 0.4546

现在将 2 插入 f'(x)

f'(2) = 12.1674

这证实了我们之前获得的结果。

关于java - 在 Java 中求样条函数的导数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51107172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com