bocostfunction.cpp

来自「解决线性assignment的算法」· C++ 代码 · 共 58 行

CPP
58
字号
#include <fstream>
#include <vector>
#include <cmath>
#include <string>
#include "BOCostFunction.h"


using namespace std;

BOCostFunction::BOCostFunction(void){}

BOCostFunction::~BOCostFunction(void){}

BOMatrix<double> BOCostFunction::Run(BOMatrix<double> HistP, BOMatrix<double> HistQ){
	try{
		int sizeR = HistP.r;
		int sizeC = HistP.c;
		double sumK;
		double eps = 2.2204 * 0.0000000000000001;

		BOMatrix<double> CostF(sizeR,sizeR);
		for(int i = 0; i < sizeR; i++){
			for(int j = 0; j < sizeR; j++){
				sumK = 0;
				for(int k = 0; k < sizeC; k++){
                	sumK += ( pow(( HistP[i][k] - HistQ[j][k] ),2) / ( HistP[i][k] + HistQ[j][k] + eps ));
				}
				CostF[i][j] = 0.5 * sumK;
			}
		}
		return CostF;
	}
	catch ( const exception & r_e ){
		cout << "Error: " << r_e.what();
		cout << endl;
		BOMatrix<double> CostF(0,0);
		return CostF;
	}
}

void BOCostFunction::SaveToFile(string filename, BOMatrix<double> CostF){

	ofstream cfile (filename.c_str(),ios::out);
	if (cfile.is_open())
	{
		int sizeR = CostF.r;
		for(int i = 0; i < sizeR; i++){
			for(int j = 0; j < sizeR; j++){
				cfile << CostF[i][j] <<"\t";
			}
			cfile <<"\n";
		}
		cfile.close();
	}
	else 
		cout << "Unable to open file"; 
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?