|
|
¡¾ÇóÖú¡¿VS2005ÊýÖµ¼ÆËã³ÌÐòµ÷ÊÔ±¨´í
¡ï Сľ³æ(½ð±Ò+0.5):¸ø¸öºì°ü£¬Ð»Ð»»ØÌû½»Á÷
Êý¾ÝÄâºÏ³ÌÐò£¬ÔËÓÃÏֳɵĶ¯Ì¬Á´½Ó¿âLBFGS·¨£¨´øÔ¼ÊøµÄ£©£¬²Ù×÷ƽ̨ÊÇVS2005£¬½«ÆäÒýÈëMFCµ¥Îĵµ´íÎóµü³ö¡ª¡ª²»ÊÇÈÃÂ¥Ö÷´¦ÀíÊýÖµ¼ÆËã¹þ£¡£¡£¡£¡
ÎÒ½«Ëã·¨³ÌÐò±àÈëÁËCLoginDlg.CPPÖУ¬µã»÷button1£¬³ÌÐò¹Ø±Õ¶Ô»°¿òµ¯³öµ¥Îĵµ½çÃæ£¬ºǫ́ͬʱÍê³ÉÔËËã¡£
void CLoginDlg::OnBnClickedButton1()
{
// TODO: ÔÚ´ËÌí¼Ó¿Ø¼þ֪ͨ´¦Àí³ÌÐò´úÂë
_tmain();
CDialog::OnOK();
}
ÒÔÉÏÊÇCbuttonµÄ´úÂ룬±àÒëÊ×Ïȱ¨´íµÄÊÇ_tmain()λÖã¬ËµµÄÊDz»½ÓÊÜ0¸ö²ÎÊý£¬Õâ¸ö¹«¹²º¯ÊýµÄÔÐÍΪ
int _tmain(int argc, _TCHAR* argv[])
{
.........
.........
return 0;
}
ÎҸɴàÖ±½Ó¶ÔÔº¯Êý×öÁ˸͝£¬ÈçÏ£º
int _tmain()
{
.........
.........
return 0;
}
ÔÚ½â¾ö·½°¸ÖÐÓÖÌí¼ÓÁËlbfgsb.libÎļþ£¬ÓÚÊDZàÒë¡¢Á´½Ó¶¼¿Éͨ¹ý£¬ÉõÖÁ¿ÉÒÔÔËÐУ¬µ«µã»÷button1£¬³ÌÐò¾Í»á±¨´í£¬µ¯³öÈç϶Ի°¿ò£º

Ëã·¨µÄ×î³õ³ÌÐòÊÇÕýÈ·µÄ£¬¿É±àÒë¿ÉÁ´½Ó¿ÉÔËÐУ¬½á¹ûÕýÈ·£»ÎÒ¿ÉÒÔн¨Ò»¸öWIN32¿ØÖÆÌ¨Ó¦ÓóÌÐòÖØÏÖËã·¨³ÌÐòµÄЧ¹û¡£Ö¤Ã÷Ëã·¨³ÌÐò±¾ÉíÎÞÎó£¬Ó¦¸ÃÊǶ¯Ì¬Á´½Ó¿âÔÚ¼ÓÔØµ½MFC³ÌÐòʱ³öÏÖÁË´íÎó¡£
Ï£ÍûÓиßÊÖÄÜÖ¸µãÒ»ÏÂ~~²»Ê¤¸Ð¼¤
ÒÔÏÂÊÇÎÒµÄMFC³ÌÐò¹ØÓÚÒýÈëËã·¨¶¯Ì¬Á´½Ó¿âºÍÖ´ÐÐÔËËãµÄƬ¶Î£¬×îºó¸½ÉÏÁËWIN32Ëã·¨³ÌÐòºÍÎÒ×Ô¼ºµÄMFC³ÌÐò£º
// LoginDlg.cpp : ʵÏÖÎļþ
//
#include "stdafx.h"
#include "xxl_try2.h"
#include "LoginDlg.h"
//#include "stdafx.h"
#include "iostream"
#include "memory.h"
#include "malloc.h"
#include "windows.h"
#include "math.h"
using namespace std;
// CLoginDlg ¶Ô»°¿ò
IMPLEMENT_DYNAMIC(CLoginDlg, CDialog)
CLoginDlg::CLoginDlg(CWnd* pParent /*=NULL*/)
: CDialog(CLoginDlg::IDD, pParent)
{
}
CLoginDlg::~CLoginDlg()
{
}
void CLoginDlg DataExchange(CDataExchange* pDX)
{
CDialog DataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CLoginDlg, CDialog)
ON_BN_CLICKED(IDC_BUTTON1, &CLoginDlg::OnBnClickedButton1)
END_MESSAGE_MAP()
// CLoginDlg ÏûÏ¢´¦Àí³ÌÐò
// LBFGS.cpp : ¶¨Òå¿ØÖÆÌ¨Ó¦ÓóÌÐòµÄÈë¿Úµã¡£
//¼ÆËãÌݶȱ£´æÔÚgÖУ¬¼ÆËãÄ¿±êº¯ÊýÖµ±£´æÔÚfÖÐ
//nÊDzÎÊý¸öÊý£¬xÊDzÎÊýÏòÁ¿
void fcn2(int n,double *x, double*t, double *y,double &f, double *g ){
f=0;
g[0]=0;
g[1]=0;
g[2]=0;
g[3]=0;
g[4]=0;
g[5]=0;
for(int k=0;k
{
double tmp=y[k]-(x[0]*t[k]*exp(x[1]*t[k])+x[2]*t[k]*exp(x[3]*t[k])+x[4]*t[k]*exp(x[5]*t[k]));
f+=tmp*tmp;
g[0]+=-2*tmp*t[k]*exp(x[1]*t[k]);
g[1]+=-2*tmp*t[k]*x[0]*exp(x[1]*t[k])*t[k];
g[2]+=-2*tmp*t[k]*exp(x[3]*t[k]);
g[3]+=-2*tmp*t[k]*x[2]*exp(x[3]*t[k])*t[k];
g[4]+=-2*tmp*t[k]*exp(x[5]*t[k]);
g[5]+=-2*tmp*t[k]*x[4]*exp(x[5]*t[k])*t[k];
}
return;
}
extern "C" void __declspec(dllimport) __stdcall lbfgsb(int n,int m,double *x, double *l, double *u, int *nbd, double f, double *g, double factr, double pgtol, double *wa, int *iwa,char *task, int iprint,char *csave,bool *lsave,int *isave, double *dsave);
int main()//int argc, _TCHAR* argv[])
{
const char dllPath[] = "lbfgsb.dll";
//¼ÓÔØ¶¯Ì¬¿âÎļþ
HINSTANCE hLibrary = LoadLibraryA(dllPath);
if(hLibrary == NULL){
int error =GetLastError ();
cout<<"Error of LoadLibrary = "<
cout<<"Can't find the dll file."<
FreeLibrary(hLibrary);
return -1;
}
/* £¨Èç¹û»ñµÃÕâ¸ö³ÌÐòµÄ¾ä±ú£©»ñµÃÕýÔÚÔËÐгÌÐòµÄ·¾¶ºÍÎļþÃû*/
bool exePathOut=true;
if(exePathOut){
char exePath[1000] = "\0";
GetModuleFileNameA(hLibrary,exePath,sizeof(exePath));
cout<
}
bool *lsave;
char *task,*csave,*str;
int n, m,iprint,*nbd,*iwa, *isave;
double f, factr, pgtol,*x,*l,*u,*g,*wa,*dsave;
double t[7]={1,1.5,2,2.5,3,3.5,5};
double y[7]={10.78,80.35,58.81,43.04,23.05,12.35,6.61};
iprint = 1;
factr=1.0E+7;
pgtol=1.0E-5;
f=0.0;
n=6;
m=10;
nbd=new int[n];
iwa=new int[3*n];
x=new double[n];
l=new double[n];//ÉèÖñäÁ¿ÏÂÏÞ
u=new double[n];//ÉèÖñäÁ¿ÉÏÏÞ
g=new double[n];
wa=new double[2*m*n+4*n+12*m*m+12*m];
dsave=new double[29];
isave=new int[44];
str=new char[60];
csave=new char[60];
task=new char[60];
lsave=new bool[16];
for(int i=0;i
{
nbd=0;
l=1.0;
u=10;
}
for(int i=1;i
{
nbd=0;
l=1.0;
u=10;
}
for(int i=0;i
{
x=0.0E0;
}
sprintf(task,"%s","START";
while(1){
lbfgsb(n,m,x,l,u,nbd,f,g,factr,pgtol,wa,iwa,task,iprint,csave,lsave,isave,dsave);
strncpy(str,task,2);
if (strncmp(str,"FG",2)==0)
{
fcn2(7, x,t,y,f, g );
continue;
}
strncpy(str,task,5);
if(strncmp(str,"NEW_X",5)!=0)
{
for(int i=0;i
{
cout<<"x["<
}
break;
}
}
delete[] nbd;
delete[] iwa;
delete[] x;
delete[] l;
delete[] u;
delete[] g;
delete[] wa;
delete[] lsave;
delete[] task;
delete[] csave;
delete[] str;
delete[] isave;
delete[] dsave;
system("pause";
return 0;
}
void CLoginDlg::OnBnClickedButton1()
{
// TODO: ÔÚ´ËÌí¼Ó¿Ø¼þ֪ͨ´¦Àí³ÌÐò´úÂë
main();
CDialog::OnOK();
}
ÕâÊdzÌÐò
http://good.gd/767141.htm
ÕâÊÇËã·¨µÄÕýÈ·³ÌÐò
http://good.gd/767144.htm
±¾ÎÄÀ´×Ô: Сľ³æÂÛ̳ http://muchong.com/bbs/viewthread.php?tid=2492928
[ Last edited by swustxxl on 2010-10-20 at 20:39 ] |
|