2013-07-29 1 views
0

Моя конечная цель - минимизация определенной и заданной одномерной функции. Для этого я использую Apache Commons Math.Минимизировать одномерную функцию в Java

Поэтому я на самом деле есть такой класс, как:

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, я хотел бы узнать точное значение z0, которые пусть calc_sigma получить 0.

Хотя у меня было больше, чем просто взгляд на API, я до сих пор не понимаю, как действовать и получить результаты, на которые я нацелен.

+0

Я отредактировал ваш вопрос немного для вас. Как правило, вы должны сделать первые предложения своего вопроса описанием фактической проблемы, с которой вы столкнулись, вместо того, чтобы идти «Я искал дни», «Я новичок», «Я использую эту библиотеку». – millimoose

+0

И проблема в том, что ...? – Dahaka

+0

@ Дахака: я не понимаю, как действовать, вот в чем проблема! – fpe

ответ

0

Извините, что немного опоздал. Таким образом, вы пытаетесь найти нули для вашей одномерной функции. Глядя на функцию, похоже, что численный анализ необходим для поиска нулей.

В Commons Math есть класс BrentSolver, который делает это. Теперь есть несколько различных математических методов для поиска нулей, но это работает с API, который вы уже используете, и имеет описание, которое соответствует вашей ситуации.