添加熵值法c语言文件
parent
0af70a0d20
commit
4c6d1a2aba
@ -0,0 +1,117 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <iomanip>
|
||||||
|
#include <cmath>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
clock_t start, finish;
|
||||||
|
double duration;
|
||||||
|
start = clock();
|
||||||
|
double x[10][4]={{6.962645,67101,730.3979,1.3},
|
||||||
|
{5.643831,50732,170.8517,1.7},
|
||||||
|
{7.775079,39755,89.2054,1},
|
||||||
|
{6.568763,67101,294.3379,1},
|
||||||
|
{6.552100,67101,281.1741,1.9},
|
||||||
|
{6.669364,43274,41.5144,1.2},
|
||||||
|
{7.774892,39755,89.2054,1.4},
|
||||||
|
{6.511145,67101,518.4596,1.4},
|
||||||
|
{6.966898,67101,382.3772,1.7},
|
||||||
|
{5.894564,35641,374.3219,1.2}};
|
||||||
|
double max[4];
|
||||||
|
double min[4];
|
||||||
|
double sum[4];
|
||||||
|
for(int i=0;i<4;i++)
|
||||||
|
{
|
||||||
|
max[i]=x[0][i];
|
||||||
|
min[i]=x[0][i];
|
||||||
|
sum[i]=x[0][i];
|
||||||
|
for(int j=1;j<10;j++)
|
||||||
|
{
|
||||||
|
if(x[j][i]>max[i])
|
||||||
|
{
|
||||||
|
max[i]=x[j][i];
|
||||||
|
}
|
||||||
|
if(x[j][i]<min[i])
|
||||||
|
{
|
||||||
|
min[i]=x[j][i];
|
||||||
|
}
|
||||||
|
sum[i]+=x[j][i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
double x_normalize[10][4];
|
||||||
|
for(int i=0;i<10;i++)
|
||||||
|
{
|
||||||
|
for(int j=0;j<4;j++)
|
||||||
|
{
|
||||||
|
if(j==1)
|
||||||
|
{
|
||||||
|
x_normalize[i][j]=(max[j]-x[i][j])/(max[j]-min[j]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
x_normalize[i][j]=(x[i][j]-min[j])/(max[j]-min[j]);
|
||||||
|
}
|
||||||
|
cout<<setw(15)<<x_normalize[i][j]<<",";
|
||||||
|
}
|
||||||
|
cout<<endl;
|
||||||
|
}
|
||||||
|
cout<<endl;
|
||||||
|
cout<<endl;
|
||||||
|
double p[10][4];
|
||||||
|
for(int i=0;i<10;i++)
|
||||||
|
{
|
||||||
|
for(int j=0;j<4;j++)
|
||||||
|
{
|
||||||
|
p[i][j]=x_normalize[i][j]/sum[j]+0.0000001;
|
||||||
|
cout<<setw(15)<<p[i][j]<<",";
|
||||||
|
}
|
||||||
|
cout<<endl;
|
||||||
|
}
|
||||||
|
cout<<endl;
|
||||||
|
cout<<endl;
|
||||||
|
double e[4];
|
||||||
|
double sumG=0;
|
||||||
|
for(int j=0;j<4;j++)
|
||||||
|
{
|
||||||
|
double sumJ=0;
|
||||||
|
for(int i=0;i<10;i++)
|
||||||
|
{
|
||||||
|
sumJ+=p[i][j]*log(p[i][j]);
|
||||||
|
}
|
||||||
|
e[j]=(-1/log(10))*sumJ;
|
||||||
|
sumG+=(1-e[j]);
|
||||||
|
cout<<setw(15)<<e[j]<<",";
|
||||||
|
}
|
||||||
|
cout<<endl;
|
||||||
|
cout<<endl;
|
||||||
|
double a[4];
|
||||||
|
for(int i=0;i<4;i++)
|
||||||
|
{
|
||||||
|
a[i]=(1-e[i])/sumG;
|
||||||
|
cout<<setw(15)<<a[i]<<",";
|
||||||
|
}
|
||||||
|
cout<<endl;
|
||||||
|
cout<<endl;
|
||||||
|
double weights[10];
|
||||||
|
double sumW=0;
|
||||||
|
for(int i=0;i<10;i++)
|
||||||
|
{
|
||||||
|
double weight=0;
|
||||||
|
for(int j=0;j<4;j++)
|
||||||
|
{
|
||||||
|
weight+=(a[j]*p[i][j]);
|
||||||
|
}
|
||||||
|
weights[i]=weight;
|
||||||
|
sumW+=weight;
|
||||||
|
}
|
||||||
|
for(int i=0;i<10;i++)
|
||||||
|
{
|
||||||
|
cout<<weights[i]/sumW<<",";
|
||||||
|
}
|
||||||
|
cout<<endl;
|
||||||
|
finish = clock();
|
||||||
|
duration = (double)(finish - start) / CLOCKS_PER_SEC;
|
||||||
|
printf("%f seconds\n", duration);
|
||||||
|
return 0;
|
||||||
|
}
|
@ -1,25 +1,77 @@
|
|||||||
package com.peteralbus;
|
package com.peteralbus;
|
||||||
|
|
||||||
import com.peteralbus.entity.EarthquakeInfo;
|
import com.peteralbus.entity.EarthquakeInfo;
|
||||||
|
import com.peteralbus.entity.Estimate;
|
||||||
|
import com.peteralbus.service.EarthquakeInfoService;
|
||||||
|
import com.peteralbus.service.EstimateService;
|
||||||
|
import com.peteralbus.util.EstimateUtil;
|
||||||
import org.jsoup.Jsoup;
|
import org.jsoup.Jsoup;
|
||||||
import org.jsoup.nodes.Document;
|
import org.jsoup.nodes.Document;
|
||||||
import org.jsoup.nodes.Element;
|
import org.jsoup.nodes.Element;
|
||||||
import org.jsoup.select.Elements;
|
import org.jsoup.select.Elements;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
@SpringBootTest
|
@SpringBootTest
|
||||||
class EarthquickApplicationTests
|
class EarthquickApplicationTests
|
||||||
{
|
{
|
||||||
|
@Autowired
|
||||||
|
EstimateService estimateService;
|
||||||
|
@Autowired
|
||||||
|
EstimateUtil estimateUtil;
|
||||||
|
@Autowired
|
||||||
|
EarthquakeInfoService earthquakeInfoService;
|
||||||
@Test
|
@Test
|
||||||
void contextLoads()
|
void contextLoads()
|
||||||
{
|
{
|
||||||
|
// long startTime = System.currentTimeMillis();
|
||||||
|
// Map<String, Object> mapParameter = new HashMap<String, Object>();
|
||||||
|
// mapParameter.put("earthquakeId",16);
|
||||||
|
// EarthquakeInfo earthquakeInfo=earthquakeInfoService.queryInfoWithLine(mapParameter).get(0);
|
||||||
|
// double magnitude = earthquakeInfo.getMagnitude(),
|
||||||
|
// highIntensity = earthquakeInfo.getHighIntensity(),
|
||||||
|
// longitude = earthquakeInfo.getLongitude(),
|
||||||
|
// latitude = earthquakeInfo.getLatitude(),
|
||||||
|
// longRadius = earthquakeInfo.getIntensityLineList().get(2).getLongRadius(),
|
||||||
|
// shortRadius = earthquakeInfo.getIntensityLineList().get(2).getShortRadius();
|
||||||
|
// System.out.println(longRadius);
|
||||||
|
// LocalDateTime earthquakeTime = earthquakeInfo.getEarthquakeTime();
|
||||||
|
// //将角度转换为弧度。
|
||||||
|
// double radians = Math.toRadians(latitude);
|
||||||
|
// double minLongitude = longitude-shortRadius/(111-Math.cos(radians)),
|
||||||
|
// maxLongitude = longitude+shortRadius/(111-Math.cos(radians)),
|
||||||
|
// minLatitude = latitude-longRadius/111,
|
||||||
|
// maxLatitude = latitude+longRadius/111;
|
||||||
|
// int population=(int)estimateService.getPopulation(minLongitude,maxLongitude,minLatitude,maxLatitude);
|
||||||
|
// double death=estimateUtil.deathPredict(earthquakeInfo.getEarthquakeId(),population,magnitude,highIntensity,earthquakeTime,longitude,latitude);
|
||||||
|
// long endTime = System.currentTimeMillis();
|
||||||
|
// long usedTime = (endTime-startTime)/1000;
|
||||||
|
// System.out.println(death + " " + usedTime);
|
||||||
|
// getPopulation(100.7342,25.5736);
|
||||||
|
// getPopulation(99.9586,25.6753);
|
||||||
|
// getPopulation(100.1926,25.9121);
|
||||||
|
// getPopulation(100.1885,25.9252);
|
||||||
|
// getPopulation(99.7768,25.3342);
|
||||||
|
// getPopulation(99.9586,25.6752);
|
||||||
|
// getPopulation(100.3105,25.6775);
|
||||||
|
// getPopulation(100.1209,25.7921);
|
||||||
|
// getPopulation(100.4937,25.3366);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void getPopulation(double longitude,double latitude)
|
||||||
|
{
|
||||||
|
double minLongitude = longitude-0.1,
|
||||||
|
maxLongitude = longitude+0.1,
|
||||||
|
minLatitude = latitude-0.1,
|
||||||
|
maxLatitude = latitude+0.1;
|
||||||
|
System.out.println(estimateService.getPopulation(minLongitude, maxLongitude, minLatitude, maxLatitude));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue