There are many approaches to locating peaks Consider an arra

There are many approaches to locating peaks. Consider an array of data x[]. For this program, we define a peak as an element of the array that is a local maximum, greater than each of its neighbors by a factor of 2 or more. The first and last elements in an array have only one neighbor each, and by definition cannot be peaks. Hence, given this array x[] with 20 terms:

0.2000 0.5000 0.1000 0.1500 0.2000 0.1300 0.3000 0.2500 0.3000 0.3000

0.7000 0.2000 0.4500 0.1500 0.2000 0.8500 0.3000 0.6500 0.2000 0.1000

The peaks are at x[1] = 0.5, x[10] = 0.7, x[12] = 0.45, x[15] = 0.85, x[17] = 0.65.

Write a Java program that scans through an array of data, finds the peaks based on the criterion defined above, and sorts them into non-descending order. Here’s what the program should do:

Declare and initialize an array x[] of 20 floats.

float [] x = {0.2f, 0.5f, 0.1f, 0.15f, 0.2f, 0.13f, 0.3f, 0.25f, 0.3f, 0.3f,

0.7f, 0.2f, 0.45f, 0.15f, 0.2f, 0.85f, 0.3f, 0.65f, 0.2f, 0.1f};

Print the elements of x[], 10 on each line.

Then locate the peaks in x[], place them in an array peaks[]

Print the data for each peak.

A sample run:

% java FindPeaks

Data array:

0.2000 0.5000 0.1000 0.1500 0.2000 0.1300 0.3000 0.2500 0.3000 0.3000

0.7000 0.2000 0.4500 0.1500 0.2000 0.8500 0.3000 0.6500 0.2000 0.1000

5 peaks found:

0.5

0.7

0.45

0.85

0.65

After printing the elements of x[] , your program will first step through the elements of x[] , find each peak, and add each peak to the array peaks[] .

Solution


/**
* The java program FindPeaks that finds the peaks
* of the given array x and prints the peaks
* array to console
* */
//FindPeaks.java
public class FindPeaks {  
   public static void main(String[] args) {
      
       //initialize variables
       int count=0;      
       int pIndex=0;
      
       //intialize float array
       float [] x = {0.2f, 0.5f, 0.1f, 0.15f, 0.2f,
               0.13f, 0.3f, 0.25f, 0.3f, 0.3f,
               0.7f, 0.2f, 0.45f, 0.15f, 0.2f,
               0.85f, 0.3f, 0.65f, 0.2f, 0.1f};
      
       //create a float array of given size of x
       float[] peaks=new float[x.length];
       System.out.println(\"Data array:\");
       //print data to console
       for (int i = 0; i < x.length; i++)
       {
           if((i+1)%10==0)
               System.out.println();
           else
               System.out.printf(\"%-8.4f\",x[i]);          
       }
      
      
       System.out.println(\"\ \");
       //find peaks
       for (int i = 1; i < x.length-1; i++)
       {
           float val=x[i];
           //checking condition of peak element
           if(val>2*x[i-1] && val>2*x[i+1])
           {
               peaks[pIndex]=val;
               pIndex++;
               count++;
           }
       }
       //print peaks to console
       System.out.println(count+\" peaks found:\");
       for (int i = 0; i < count; i++)
       {
           System.out.println(peaks[i]);
       }      
   }

}

------------------------------------------------------------------------------------------------------------

Sample output:

Data array:
0.2000 0.5000 0.1000 0.1500 0.2000 0.1300 0.3000 0.2500 0.3000
0.7000 0.2000 0.4500 0.1500 0.2000 0.8500 0.3000 0.6500 0.2000


5 peaks found:
0.5
0.7
0.45
0.85
0.65

There are many approaches to locating peaks. Consider an array of data x[]. For this program, we define a peak as an element of the array that is a local maximu
There are many approaches to locating peaks. Consider an array of data x[]. For this program, we define a peak as an element of the array that is a local maximu

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site