작업: 이분법 방정식의 뿌리 구하기

4438 단어
이분법 + 귀속으로 일원 고차 방정식을 풀다.이 방법은 규정된 범위 내의 한 뿌리만 구하고 원함수가 이 해부에 있는 값을 구할 수 있다.
원제 첨부:
제목 설명 Joy는 SUSTECH로 가는 것을 목표로 하는 12학년 학생입니다.One day, when he is doing math practices. He found a problem very hard. It gives a function goes like F(x) = 5x7+6x6+3x3+4x2-2xy (0 <= x <=100), y is a given real number. Can you help Joy find the minimum value of F(x) when x is in its domain?
입력의 첫 번째 줄을 입력하면 integer T (1 <= T <= 100) 가 포함되어 테스트 케이스의 수를 의미합니다.Then T lines follow, each line has only one real numbers Y (0 < Y < 1010).
출력 For each case, print the case number as well as the minimum value (accurate up to 4 decimal places) in one line, when x is in its domain.샘플 입력 3 100 200 300 샘플 출력 Case 1: -193.3774 Case 2: -448.1475 Case 3: -729.3383
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
    static double F(double x,double y) {
        return 5*Math.pow(x, 7)+6*Math.pow(x, 6)+3*Math.pow(x, 3)+4*x*x-2*x*y;
        // 
    }
    static double f(double x,double y) {
        return 35*Math.pow(x, 6)+36*Math.pow(x, 5)+9*x*x+8*x-2*y;
        // 
    }
    static double solve(double y,double left,double right) {
        double mid=(right+left)/2;
        if(f(right,y)-f(left,y)<0.0001) {
            return (right+left)/2;
        }
        else if(f(mid,y)>0) {
            right=mid;
            return solve(y, left, right);
        }
        else {
            left=mid;
            return solve(y, left, right);
        }
    }
    // 
    public static void main(String[] args) throws NumberFormatException, IOException {
        BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
        int n= Integer.parseInt(input.readLine());
        for(int i=0;idouble y=Double.parseDouble(input.readLine());
            double x=solve(y,0,100);
            System.out.println("Case "+(i+1)+":"+" "+String.format("%.4f", F(x,y)));
        }
    }
}

좋은 웹페이지 즐겨찾기