importjava.io.BufferedReader;importjava.io.File;importjava.io.FileReader;importjava.text.SimpleDateFormat;importjava.util.Date;importorg.apache.commons.math3.fitting.PolynomialCurveFitter;importorg.apache.commons.math3.fitting.WeightedObservedPoints;public classpredict_temperature
{private static String[] observed_data(double flag, BufferedReader reader) throwsException
{
String line= null;
String[] i_want= new String[4];if(flag > 0)
{double tmp = 1000;
System.out.println(flag);while((line=reader.readLine())!=null)
{
String item[]= line.split(",");double value = Double.parseDouble(item[2]);if(value <=tmp)
tmp=value;else{
i_want[0] = item[0];
i_want[1] = item[4].replace("\"", "");break;
}
}while((line=reader.readLine())!=null)
{
String item[]= line.split(",");double value = Double.parseDouble(item[2]);if(value >=tmp)
tmp=value;else
break;
}while((line=reader.readLine())!=null)
{
String item[]= line.split(",");double value = Double.parseDouble(item[2]);if(value <=tmp)
tmp=value;else{
i_want[2] = item[0];
i_want[3] = item[4].replace("\"", "");break;
}
}
}else{double tmp = -1000;while((line=reader.readLine())!=null)
{
String item[]= line.split(",");double value = Double.parseDouble(item[2]);if(value >=tmp)
tmp=value;else{
i_want[0] = item[0];
i_want[1] = item[4].replace("\"", "");break;
}
}while((line=reader.readLine())!=null)
{
String item[]= line.split(",");double value = Double.parseDouble(item[2]);if(value <=tmp)
tmp=value;else
break;
}while((line=reader.readLine())!=null)
{
String item[]= line.split(",");double value = Double.parseDouble(item[2]);if(value >=tmp)
tmp=value;else{
i_want[2] = item[0];
i_want[3] = item[4].replace("\"", "");break;
}
}
}returni_want;
}public static void main(String[] args) throwsException
{
WeightedObservedPoints points= newWeightedObservedPoints();
String input_time= args[1] + " " + args[2];
File file= new File(args[0]);double time_diff = 0;
BufferedReader reader= new BufferedReader(newFileReader(file));
reader.readLine();
reader.mark((int)file.length());/*计算周期*/
double compare_item1 = Double.parseDouble(reader.readLine().split(",")[2]);double compare_item2 = Double.parseDouble(reader.readLine().split(",")[2]);
String[] cycle_result= new String[4];
cycle_result= observed_data(compare_item1 -compare_item2, reader);int start_num = Integer.parseInt(cycle_result[0]);int end_num = Integer.parseInt(cycle_result[2]);
SimpleDateFormat tmp_day= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date start_now= tmp_day.parse(cycle_result[1]);
Date end_now= tmp_day.parse(cycle_result[3]);/*计算周期*/
int cycle = end_num -start_num;
reader.reset();
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat input_time_format= new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date input_time_=input_time_format.parse(input_time);
Date start_time= null;int i = 0;
String line= null;
String time= null;while((line=reader.readLine())!=null)
{
String item[]= line.split(",");
time= item[4];double value = Double.parseDouble(item[2]);
time= time.replace("\"", "");
Date now=sdf.parse(time);if(i == 0)
start_time=now;double offset = (now.getTime() -start_time.getTime());
points.add(offset, value);
time_diff= (input_time_.getTime() - start_time.getTime()) % (end_now.getTime() -start_now.getTime());if(i++ >cycle)break;
}
PolynomialCurveFitter fitter= PolynomialCurveFitter.create(2);double[] result =fitter.fit(points.toList());double result_time = result[2] * time_diff * time_diff + result[1]* time_diff + result[0];
System.out.println(result_time);
reader.close();
}
}