import javax.swing.JOptionPane; /* questo programma usa i metodi * showInputDialog(...) e showMessageDialog(...) * della classe JOptionPane per l'input e l'output */ public class BisezioneSempliceApplicazione { public static void main(String[] args) { double left, right, fLeft, fRight; System.out.println("ricerca di una soluzione approssimata dell'equazione\n-7 + x^3 - x^2 = 0\n"+ "e' necessario fornire due valori della x nei quali la funzione assume segni discordi"); JOptionPane.showMessageDialog(null, "ricerca di una soluzione approssimata dell'equazione\n-7 + x^3 - x^2 = 0\n"+ "e' necessario fornire due valori della x nei quali la funzione assume segni discordi"); // input degli estremi dell'intervallo di ricerca left = Double.parseDouble(JOptionPane.showInputDialog("digita estremo sinistro")); right = Double.parseDouble(JOptionPane.showInputDialog("digita estremo destro")); // soluzione numerica dell'equazione //calcolo la f(left) fLeft = -7 + Math.pow(left, 3) - Math.pow(left,2); //calcolo la f(right) fRight = -7 + Math.pow(right, 3) - Math.pow(right,2); if(fLeft * fRight >= 0) { JOptionPane.showMessageDialog(null, "Devi fornire estremi in cui la funzione\nassume segni diversi!"); System.exit(0); } int numIterazioni = 0; while(Math.abs((right-left)/right) > 1E-10) // impongo un limite all'approssimazione relativa { System.out.printf("%19.16f %19.16f diff = %19.16f\n", left, right, right - left); double middle, fMiddle; numIterazioni++; middle = (right+left)/2; // calcolo la f(middle) fMiddle = -7 + Math.pow(middle, 3) - Math.pow(middle,2); if (fMiddle * fRight >= 0) { // sposto right right = middle; fRight = fMiddle; } else { // sposto left left = middle; fLeft = fMiddle; } } System.out.println("La soluzione e' compresa tra\n" + left + "\ne\n" + right); System.out.println("ottenuta dopo " + numIterazioni + " bisezioni"); JOptionPane.showMessageDialog(null, "La soluzione e' compresa tra\n" + left + "\ne\n" + right + "\nottenuta dopo " + numIterazioni + " bisezioni"); } }