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);
            }
        };
    }
}

したがって、コンストラクターのパラメーターと初期値が与えられた場合、 let retrievez0の正確な値を知りたいと思います。z0calc_sigma0

API を見ただけではありませんが、どのように進めて目的の結果を得るかはまだわかりません。

4

1 に答える 1

0

少し遅れてすみません。したがって、一変量関数のゼロを見つけようとしています。関数を見ると、ゼロを見つけるには数値解析が必要なようです。

Commons Math には、これを行うクラスBrentSolverがあります。現在、ゼロを見つけるためのいくつかの異なる数学的方法がありますが、これは既に使用している API で機能し、状況に一致する説明があります。

于 2013-10-01T21:31:23.570 に答える