Mas agora eu presciso da Função Lambert`s W como um método java. Algu;ém pode me ajudar?
rogelgarcia
Cara, ques negócios cabulosos… com o que vc trabalha? ou estuda?
Parece que no próprio site do wikipedia… tem um algoritmo com essa fórmula… num serve nao?
Polimorphism
Me ofereci para criar um sistema de pontuação para um jogo online, Age of Conquest. ( Queria treinar minha lógica com alguma coisa que não prescisasse de muito conhecimento em java. Embora meio dificil, não se prescisa de conhecimentos avançados em java para se fazer. ) Primeiro criei uma variante do Sistema ELO ( Utilizado em Xadrez e em Go ), para que permita jogos com mais de duas pessoas, so que depois fiquei sabendo que a pontuação não poderia ser negativa. Daí saiu esses códigos estranhos q vc viu… :XD:
E sim, tem um código na wikipedia e nem tinha percebido. vlw Vou testar se eu tiver algum problema eu posto
E
entanglement
O código, convertido para Java:
classLambert{publicstaticdoubleestimateLambertW(doublex){if(x==0)return0;if(x==Math.E)return1;if(x<=500.0){doublelx1=Math.log1p(x);return0.665*(1+0.0195*lx1)*lx1+0.04;}doublelnx=Math.log(x);returnMath.log(x-4.0)-(1.0-1.0/lnx)*Math.log(lnx);}publicstaticdoublelambertW(doublex,doubleprec,intmaxiters){doublew=x>=0?estimateLambertW(x):0;for(inti=0;i<maxiters;++i){doubleexpW=Math.exp(w);doublewe=w*expW;doublew1e=we+expW;if(prec>Math.abs((x-we)/w1e))returnw;w-=(we-x)/(w1e-(w+2.0)*(we-x)/(2*w+2));}thrownewRuntimeException(String.format("W doesn't converge fast enough for x = %f",x));}publicstaticvoidmain(String[]args){// Expected: 0.5671432904097838729999686622// Prints: 0.5671432904097047System.out.println(lambertW(1.0,1E-12,100));// Expected: -1// Prints: -0.9999999942251854System.out.println(lambertW(-1.0/Math.E,1E-12,100));// Expected: 0.8526055020137255// Prints: 0.8526055020136265System.out.println(lambertW(2.0,1E-12,100));}}
Polimorphism
frommathimportexpdeflambertW(x,prec=1E-12,maxiters=100):w=0foriinrange(maxiters):we=w*exp(w)w1e=(w+1)*exp(w)ifprec>abs((x-we)/w1e):returnww-=(we-x)/(w1e-(w+2)*(we-x)/(2*w+2))raiseValueError("W doesn't converge fast enough for abs(z) = %f"%abs(x))
Presciso converter isso (Phyton) para java. A aproximação é facil de converter porém não é suficientemente acurada.
Edit: Muito obrigado! Vc já postou a conversão antes de eu pedir