我有一段未記錄的代碼,我必須了解這些代碼才能修復錯誤。下面的方法被調用optimization,它應該找到一個非常復雜的函數的最大值f。不幸的是,它在某些情況下會失敗(即達到“達到最大迭代次數”行)。我已經嘗試編寫一些單元測試,但這并沒有多大幫助。所以我想了解這個方法是如何真正工作的,以及它是否實現了一個特定的、眾所周知的優化算法。也許我可以理解,如果它適合解決所需的方程。public static double optimization(double x1, double x2, double x3, Function<Double, Double> f, double epsilon) { double y1 = f.apply(x1); double y2 = f.apply(x2); double y3 = f.apply(x3); double a = ( x1*(y2-y3)+ x2*(y3-y1)+ x3*(y1-y2)) / ((x1-x2)*(x1-x3)*(x3-x2)); double b = (x1*x1*(y2-y3)+x2*x2*(y3-y1)+x3*x3*(y1-y2)) / ((x1-x2)*(x1-x3)*(x2-x3)); int i=0; do { i=i+1; x3=x2; x2=x1; x1=-1.*b/(2*a); y1=f.apply(x1); y2=f.apply(x2); y3=f.apply(x3); a = ( x1*(y2-y3)+ x2*(y3-y1)+ x3*(y1-y2))/((x1-x2)*(x1-x3)*(x3-x2)); b = (x1*x1*(y2-y3)+x2*x2*(y3-y1)+x3*x3*(y1-y2))/((x1-x2)*(x1-x3)*(x2-x3)); } while((Math.abs(x1 - x2) > epsilon) && (i<1000)); if (i==1000){ Log.debug("Max iteration reached"); } return x1;}
添加回答
舉報
0/150
提交
取消
