double findaroot(double x1, double x2){ //finds the root between two values
double gap = Math.abs(x1 - x2); //find the initial interval
while(gap > INTERVAL) { //check for precision
gap = gap/2; //halve the interval
double x3 = x1 + gap;
if (f(x3) == 0) { //check for symmetry
return x3;
} else if (Math.signum(f(x1)) == Math.signum(f(x3))){
x1 = x3; //redefine the interval
} else {
x2 = x3; //redefine the interval
}
findaroot(x1, x2); //call again
}
return (x1 + x2)/2; //return the mean
}
我正在嘗試在間隔(-143,0.2222222)中找到f(x)= - 21x^2 + 10x-1的解。準則規定,我應該實施一種二分法來解決這個問題。目前這種方法對於我必須通過的10個測試用例中的8個正常工作,但是它給出了上述值的「超出時間限制」錯誤。假定間隔之間的精度等級至少爲「0.000001」,則需要15秒來近似根。如何優化Java中多項式根發現的二分法?
我不知道如何在不更改方法的情況下使此效率更高。我已經執行霍納的方法來計算功能,因爲Math.pow(x1, x2)
花費的時間太長。
請問您可否告訴我們遞歸調用'findaroot(x1,x2);'是什麼意思?你沒有使用它的結果。 –
您正在評估'f(x3)'兩次。這是浪費。 – OldCurmudgeon
我是如此愚蠢,是的你是對的,非常感謝你。這是我們第一次使用遞歸,我認爲需要遞歸調用才能工作。 – user2806648