[java] Fungsi1

Viewer

  1. import java.util.Scanner;
  2. import java.util.InputMismatchException;
  3.  
  4. public class Fungsi1 {
  5.     public static void main(String[] args) {
  6.         Scanner scanner = new Scanner(System.in);
  7.  
  8.         double lowerBound, upperBound, tolerance;
  9.         int maxIterations;
  10.  
  11.         try {
  12.             System.out.println("Mencari akar persamaan Dengan Metode Bagi dua/ Biseksi");
  13.  
  14.             System.out.print("\nMasukkan batas bawah: ");
  15.             lowerBound = scanner.nextDouble();
  16.  
  17.             System.out.print("Masukkan batas atas: ");
  18.             upperBound = scanner.nextDouble();
  19.  
  20.             System.out.println("\nNilai fungsi pada batas bawah f(" + String.format("%.4f", lowerBound) + ") = " + String.format("%.4f", function(lowerBound)));
  21.             System.out.println("Nilai fungsi pada batas atas f(" + String.format("%.4f", upperBound) + ") = " + String.format("%.4f", function(upperBound)));
  22.  
  23.             System.out.print("\nMasukkan toleransi error: ");
  24.             tolerance = scanner.nextDouble();
  25.  
  26.             System.out.print("Masukkan jumlah iterasi maksimum: ");
  27.             maxIterations = scanner.nextInt();
  28.         } catch (InputMismatchException e) {
  29.             System.out.println("Input tidak valid. Masukkan angka.");
  30.             return;
  31.         }
  32.  
  33.         double root = findRoot(lowerBound, upperBound, tolerance, maxIterations);
  34.  
  35.         if (!Double.isNaN(root)) {
  36.             System.out.printf("\nAkar persamaan x + exp(x) adalah: %.4f\n", root);
  37.         } else {
  38.             System.out.println("\nTidak dapat menemukan akar dalam batas yang ditentukan.");
  39.         }
  40.     }
  41.  
  42.     private static double findRoot(double lowerBound, double upperBound, double tolerance, int maxIterations) {
  43.         double root = Double.NaN;
  44.         double error = upperBound - lowerBound;
  45.  
  46.         System.out.println("\nIterasi  xb      xc      xa      f(xb)   f(xc)   f(xa)   error");
  47.  
  48.         for (int i = 1; i <= maxIterations; i++) {
  49.             double mid = (lowerBound + upperBound) / 2.0;
  50.             double fLowerBound = function(lowerBound);
  51.             double fMid = function(mid);
  52.  
  53.             System.out.printf("%7d %.4f %.4f %.4f %.4f %.4f %.4f %.4f%n", i, lowerBound, mid, upperBound, fLowerBound, fMid, function(upperBound), error);
  54.  
  55.             if (Math.abs(fMid) < tolerance) {
  56.                 root = mid;
  57.                 break;
  58.             } else if (fLowerBound * fMid > 0) {
  59.                 lowerBound = mid;
  60.             } else {
  61.                 upperBound = mid;
  62.             }
  63.             error = upperBound - lowerBound;
  64.         }
  65.  
  66.         return root;
  67.     }
  68.  
  69.     private static double function(double x) {
  70.         return x + Math.exp(x);
  71.     }
  72. }
  73.  

Editor

You can edit this paste and save as new:


File Description
  • Fungsi1
  • Paste Code
  • 08 May-2024
  • 2.68 Kb
You can Share it: