lbfgs的原理见: http://blog.csdn.net/itplus/article/details/21897715
代码未经测试,有空充完整的代码优化.
#include <malloc.h>
#include <vector>
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string>
#include <algorithm>
using namespace std;
struct matrix{
int n,m;
double *val;
matrix(){val = NULL;}
matrix(int a,int b):n(a),m(b){
val = (double *)malloc(n * m * sizeof(double));
for(int i = 0;i < n * m; ++i) val[i] = 0;
}
matrix(const matrix &a){
n = a.n;
m = a.m;
val = (double *) malloc(n * m * sizeof(double));
memcpy(val,a.val,n * m * sizeof(double));
}
~matrix(){
if(val != NULL)
free(val);
val = NULL;
}
matrix operator+ (const matrix &a)const{
if(a.n != n || a.m != m){
printf("dim dit not agree in matrix operator +\n");
}
matrix new_matrix(n,m);
for(int i = 0;i < n; ++i)
for(int j = 0;j < m; ++j){
new_matrix[i * m + j] = a[i * m + j] + val[i * m + j];
}
return new_matrix;
}
const