Дело в том, что в Matlab я создала в GUI интерфейс диалогового окна. После нажатия на кнопку "Результат", должен запускаться код алгоритма на С++. Я, честно, уже намучалась, не получается. Как это можно сделать?
Часть кода на Matlab:| Код | function [] = algoritm4(n1,m1,a1,b1,x_h1,x_l1,znach_eps1,kol1,pogr1) %ALGORITM1 Базовый алгоритм. %n1=msgbox(n,'Алгоритм 4 пошел!','warn') n2=str2double(n1) nn=uint8(n2) m2=str2double(m1) mn=uint8(m2) an=str2double(a1) bn=str2double(b1) x_hn=str2double(x_h1) x_ln=str2double(x_l1) znach_epsn=str2double(znach_eps1) kol2=str2double(kol1) koln=uint8(kol2) pogrn=str2double(pogr1)
tripdata save gardata nn mn an bn x_hn x_ln znach_epsn koln pogrn !gareqn load gardata
|
Функция main на C++:
| Код | #include <iostream.h> # include <stdlib.h> # include <stdio.h> # include <conio.h> #include <fstream.h> # include <iomanip> #include <math.h>
int kFunc; int kGrad;
int kNeRes=0; int kol;
#include "Generator.cpp" #include "F_Gr.cpp" #include "MZO.cpp" #include "MOV_Base.cpp" #include "MOV_uro.cpp" #include "MOV_bi.cpp"
void main(void) { int n; int m; double *A,*b,*c,*x0,*x_dop,*x_opt; double ro2,pogr,eps; int j; int kRes=0; int maxf1,minf1,srednf1,maxg1,ming1,sredng1, maxf2,minf2,srednf2,maxg2,ming2,sredng2, maxf3,minf3,srednf3,maxg3,ming3,sredng3; n=10; m=20;
ofstream out; out.open("test10_20_vivod.txt"); if(!out) { cout<<"File is not possible open\n"; return; } A=new double[n*n*(m+1)]; b=new double[n*(m+1)]; c=new double[m+1]; x_dop=new double[n]; x0=new double[n]; x_opt=new double[n];
pogr=0.005; out<<"pogr="<<pogr<<"\n"; eps=1000.0; out<<"eps="<<eps<<"\n"; for(kol=0;kol<20;kol++) { printf("kol=%d\n",kol); out<<"Íîìåð çàäà÷è="<<kol<<"\n"; Gen_task(n,m,-0.01,0.01,-1000.0,1000.0,eps,A,b,c,x_dop);
ro2=0; for (j=0; j<n; j++) { x0[j]=0.01; ro2+=x_dop[j]*x_dop[j]; } if(kol>15) {
for (j=0; j<n; j++){ printf("x_dop[%d]=%lf\n",j,x_dop[j]); out<<"x_dop="<<x_dop<<"\n";} for (j=0; j<=m; j++){ printf("f[%d]=%lf\n",j,func(n,A,b,c,j,x_dop)); out<<"f="<<func(n,A,b,c,j,x_dop)<<"\n";} } for (j=0; j<=m; j++) { printf("f[%d]=%lf\n",j,func(n,A,b,c,j,x0)); out<<"f["<<j<<"]\t"<<func(n,A,b,c,j,x0)<<"\n"; // getch(); }
kFunc=0; kGrad=0; MOV(n,m,pogr,A,b,c,x0,sqrt(ro2),x_opt); if(kNeRes>0){kol++; break;}
printf("MOV_base kFunc=%d kGrad=%d\n",kFunc,kGrad); out<<"kFunc="<<kFunc<<"\t"<<"kGrad="<<kGrad<<"\n";
if (kol==0) { maxf1=minf1=srednf1=kFunc; maxg1=ming1=sredng1=kGrad; } else { if (maxf1<kFunc) maxf1=kFunc; if (minf1>kFunc) minf1=kFunc; srednf1+=kFunc; if (maxg1<kGrad) maxg1=kGrad; if (ming1>kGrad) ming1=kGrad; sredng1+=kGrad; } // for (j=0; j<n; j++) // printf("x_opt[%d]=%lf\n",j,x_opt[j]); for (j=0; j<=0; j++) { printf("f[%d]=%lf\n",j,func(n,A,b,c,j,x_opt)); out<<"f["<<j<<"]\t"<<func(n,A,b,c,j,x_opt)<<"\n";
}
kFunc=0;//ñ÷åò÷èê êîëè÷åñòâà âû÷èñëåíèé ôóíêöèè kGrad=0;//ñ÷åò÷èê âû÷èñëåíèé ãðàäèåíòà MOV_uro(n,m,pogr,A,b,c,x0,sqrt(ro2)/100,x_opt); out<<"Ýâðèñòè÷åñêèé ìåòîä óñêîðåíèÿ ñ ro-êðèâûì\n"; printf("MOV_uro kFunc=%d kGrad=%d\n",kFunc,kGrad); out<<"kFunc="<<kFunc<<"\t"<<"kGrad="<<kGrad<<"\n";
if (kol==0) { maxf2=minf2=srednf2=kFunc; maxg2=ming2=sredng2=kGrad; } else {
if (maxf2<kFunc) maxf2=kFunc; if (minf2>kFunc) minf2=kFunc; srednf2+=kFunc; if (maxg2<kGrad) maxg2=kGrad; if (ming2>kGrad) ming2=kGrad; sredng2+=kGrad; } // for (j=0; j<n; j++) // printf("x_opt[%d]=%lf\n",j,x_opt[j]); for (j=0; j<=0; j++) { printf("f[%d]=%lf\n",j,func(n,A,b,c,j,x_opt)); out<<"f["<<j<<"]\t"<<func(n,A,b,c,j,x_opt)<<"\n"; }
kFunc=0; kGrad=0; MOV_bi(n,m,pogr,A,b,c,x0,5,x_opt); printf("MOV_bi kFunc=%d kGrad=%d\n",kFunc,kGrad); out<<"kFunc="<<kFunc<<"\t"<<"kGrad="<<kGrad<<"\n"; if (kol==0) { maxf3=minf3=srednf3=kFunc; maxg3=ming3=sredng3=kGrad; } else { if (maxf3<kFunc) maxf3=kFunc; if (minf3>kFunc) minf3=kFunc; srednf3+=kFunc; if (maxg3<kGrad) maxg3=kGrad; if (ming3>kGrad) ming3=kGrad; sredng3+=kGrad; } // for (j=0; j<n; j++) // printf("x_opt[%d]=%lf\n",j,x_opt[j]); for (j=0; j<=0; j++) { printf("f[%d]=%lf\n",j,func(n,A,b,c,j,x_opt)); out<<"f["<<j<<"]\t"<<func(n,A,b,c,j,x_opt)<<"\n"; }
// grad(n,A,b,c,0,x_opt,x0); // ro2=0; // for (j=0; j<n; j++) // ro2+=x0[j]*x0[j]; // printf("gr=%lf kFunc=%d kGrad=%d\n",ro2,kFunc,kGrad); } kRes=kol-kNeRes;
srednf1/=kRes; sredng1/=kRes; srednf2/=kRes; sredng2/=kRes; srednf3/=kRes; sredng3/=kRes;
out<<"maxf1="<<maxf1<<"\t"; out<<"minf1="<<minf1<<"\t"; out<<"srednf1="<<srednf1<<"\n"; out<<"maxg1="<<maxg1<<"\t"; out<<"ming1="<<ming1<<"\t"; out<<"sredng1="<<sredng1<<"\n";
out<<"maxf2="<<maxf2<<"\t"; out<<"minf2="<<minf2<<"\t"; out<<"srednf2="<<srednf2<<"\n"; out<<"maxg2="<<maxg2<<"\t"; out<<"ming2="<<ming2<<"\t"; out<<"sredng2="<<sredng2<<"\n";
out<<"maxf3="<<maxf3<<"\t"; out<<"minf3="<<minf3<<"\t"; out<<"srednf3="<<srednf3<<"\n"; out<<"maxg3="<<maxg3<<"\t"; out<<"ming3="<<ming3<<"\t"; out<<"sredng3="<<sredng3<<"\n";
out.close(); }
|
|