0

我的最终目标是最小化某个给定的单变量函数。为此,我使用Apache Commons Math

因此,我实际上有一个类,如下所示:

import org.apache.commons.math3.analysis.UnivariateFunction;
import com.imsl.math.JMath;


public class FindRoughness implements UnivariateFunction {

    final private double hubWindSpeed;
    final private double hubHeight;
    final private double latitude;
    final private double sigma_target;
    final private double OMEGA = 72.9E-06;  

    FindRoughness(double v, double z, double lat, double ti ){
        this.hubWindSpeed = v;
        this.hubHeight = z;
        this.latitude = lat*(JMath.PI/180);
        this.sigma_target = ti*this.hubWindSpeed/100;
    }

    private double calc_sigma( double z0){
        final double F = 2*OMEGA*JMath.sin(this.latitude);
        double ustar = ( .4*this.hubWindSpeed - 34.5*F*this.hubHeight )/JMath.log(this.hubHeight/z0);
        double mu = 1 - ( (6*F*this.hubHeight)/(ustar) );
        double p = JMath.pow(mu, 16);
        return ( sigma_target  - ((7.5*mu*ustar*JMath.pow((.538 + .09*JMath.log(this.hubHeight/z0)), p))/(1.0 + .156*JMath.log(ustar/(F*z0))))  );      

    }

    public double value(double z0){
        return calc_sigma(z0);
    }

    public UnivariateFunction find_z0(){
        return new UnivariateFunction(){
            public double value(double z0){
                return calc_sigma(z0);
            }
        };
    }
}

因此,给定构造函数的参数和初始值z0,我想找出z0let calc_sigmaretrieve的确切值0

尽管我不仅仅查看了他的 API,但我仍然不明白如何进行并获得我想要的结果。

4

1 回答 1

0

抱歉有点晚了。所以你正试图为你的单变量函数找到零点。查看函数,看起来需要进行数值分析才能找到零点。

在 Commons Math 中,有一个BrentSolver类可以执行此操作。现在有几种不同的数学方法可以找到零,但这适用于您已经在使用的 API,并且具有与您的情况相匹配的描述。

于 2013-10-01T21:31:23.570 回答