1

我通常在MATLAB中编写代码,但由于某些原因,我决定切换到JAVA方法。Levenberg-Marquardt Java中的最小化

的问题是很简单:我想了解如何以下MATLAB代码转换成工作JAVA的一个。

在MATLAB我有一个目标函数调用findZ0

function F = findZ0(V, Z, Latitude, TI, x) 
%%% Inputs 
% V = Average Wind Speed at Hub Height 
% Z = Hub Height; 
% Latitude = Specific Site Latitude (default value equal to 50 deg); 
% x = Tryout Roughness length; 
% TI = Target Turbulent Intensity; 
%%% Outputs 
% F = Roughness Length tuned to match Target Turbulent Intensity 

Latitude = deg2rad(Latitude); 
omega = 72.9E-06; 
f = 2*omega*sin(Latitude); 
ustar = (0.4*V - 34.5*f*Z)/log(Z/x); 
mu = 1 - ((6*f*Z)/(ustar)); 
p = mu^(16); 
sigmaTarget = (V*TI)/100; 

F = sigmaTarget - ((7.5*mu*ustar*((0.538 + .09*log(Z/x))^p))/(1 + .156*log(ustar/(f*x)))); 
end 

我当时叫这个行:

Uhub = 8; 
HubHt = 90; 
Latitude = 50; 
x_trial = 0.01; 
TI_target = 24; 

find_z0 = @(x) findZ0(Uhub,HubHt,Latitude,TI_target, x); 
z0 = fsolve(find_z0,x_trial,{'fsolve','Jacobian','on','levenberg-marquardt',.005,'MaxIter',15000,'TolX',1e-07,'TolFun',1E-07,'Display','off'}); 

我知道Fortran包已经在Java中被导入,但我不”我真的不知道如何通过应用上述工具来实现我的目标。因此,我欢迎任何有关如何解决这个问题的建议。

回答

4

我建议使用现有的解决方案就像Apache Commons - 它含有大量的工具,强大的库可能对您有用。

的LM优化方法的实现by this class - 你可以直接使用它,或者只是看它的灵感。

+0

我只有现在的时间来检查你什么建议,并且该类不幸弃用。 – fpe

+0

你说得对 - 他们正在重新设计优化软件包。我已经更新了我的答案中的链接,指向正确的课程。 – dratewka

1

MATLAB有一个java接口。它可以调用Java函数。有一种方法可以从java调用MATLAB:http://m2matlabdb.ma.tum.de/download.jsp?MC_ID=9&MP_ID=163。其实我找不到这样做的理由。 Java并不比MATLAB快,而且用户友好程度更低。 Java的需要更多的学习比MATLAB,和上面的代码的转换(实际上是多个翻译,假定你是不是从MATLAB调用fsolve直接),是纯粹的工作。我不认为有人会免费做这件事。