C++ cpu temperature sensors and computational mathematics


Your task is to take the temperature readings and generate for each core:

  1. A piecewise linear interpolation.
  2. A global linear least squares approximation.
  3. (Optional) A cubic spline (or other non-linear) interpolation.

2 Program Arguments & Execution

Your program must accept an input filename as the first command line argument. Your program must NOT prompt the user for a filename.

2.1 Input Format

Data takes the form of temperatures in a txt file. All data points are whitespace delimited. For example, if I had 5 temperature readings:

Example 1: Sample Input with Labels+61.0°C +63.0°C +50.0°C +58.0°C +80.0°C +81.0°C +68.0°C +77.0°C +62.0°C +63.0°C +52.0°C +60.0°C +83.0°C +82.0°C +70.0°C +79.0°C +68.0°C +69.0°C +58.0°C +65.0°C 

Example 2: Sample Input without Labels61.0 63.0 50.0 58.0 80.0 81.0 68.0 77.0 62.0 63.0 52.0 60.0 83.0 82.0 70.0 79.0 68.0 69.0 58.0 65.0 

would be a possible input files. Each line represents temperature readings from 4 processor cores. Process each temperature column independently. Readings are taken every 30 seconds. In this example:

  • line 1 is 0 sec
  • line 2 is 30 sec,
  • line 3 is 60 sec.
  • line 4 is 90 sec.
  • line 5 is 120 sec.
  • line 6 is 150 sec.
  • line 7 is 180 sec.

Your first step should be to pre-process this data into a usable form. Conceptually, you need the data in the following format:

This table is a conceptual visualization of the data. You may select any combination data structures, e.g., ADTS (classes or structs), arrays, lists, vectors, or maps.

Time (sec)Core 0Core 1Core 2Core 3061.

2.3 Output Format

All output must be written to text files (one file pre core). Each line must take the form:

xk<=x<xk+1xk<=x<xk+1; yi=c0+c1xyi=c0+c1x ; type


  • xkxk and xk+1xk+1 are the domain in which ykyk is applicable
  • ykyk is the kthkth function
  • type is either least-squares or interpolation

You will have:

  • n−1n−1 interpolation lines for each core
  • exactly one least squares approximation line for each core

For the example data in described in Section 2.1 (Input Format) you would generate 4 output files.

  • {basename}-core-0.{txt}
  • {basename}-core-1.{txt}
  • {basename}-core-2.{txt}
  • {basename}-core-3.{txt}

3 Sample Execution & Output

3.2 Sample Output

The following is an example of piecewise linear interpolation output for a single core.


4.1 Documentation Requirements

All code must be properly and fully documented using a language appropriate comment style. All functions (including parameters and return types) must be documented.

  1. Doxygen can be used for C++, Java, or JavaScript. Consider the following Doxygen Example:
    Example 3: C++ Doxygen Documentation/**  * Retrieve the value stored in three selected Cells  *  * @param cell1Id numeric id representing the 1st desired cell  * @param cell2Id numeric id representing the 2nd desired cell  * @param cell3Id numeric id representing the 3rd desired cell  *  * @return value stored in the Cell  *  * @pre (cell1Id > 0 && cell1Id < 10) &&  *      (cell2Id > 0 && cell2Id < 10) &&  *      (cell3Id > 0 && cell3Id < 10)  */ CellTriple get3Cells(int cell1Id, int cell2Id, int cell3Id) const;