/* Priklad minimalizace souctu ctvercu pomoci procedury E04FDF z NAG F77 Library. Je pevne zvolena dimenze (N=3) a maximalni pocet bodu (M=150); samozrejme vse muze byt promenne, jestlize pouzijeme dynamickou alokaci pameti (viz nize). Prokladanou funkci definuje funkce lsfun1_, ktera cte body ze sdilene promenne. Jako pocatecni odhad reseni je zvolen vektor (0.5, 1.0, 1.5). */ #include #include #include "nagopt.h" #define N 3 /* pocet volnych promennych */ #define M 150 /* pocet bodu */ #define LW 7*N+N*N+2*M*N+3*M+N*(N-1) /* delka pracovniho pole pozadovaneho procedurou E04FDF */ double w[LW]; /* zminene pracovni pole */ long int iw[1]; /* pracovni pole, ktere se ve skutecnosti nepouziva */ double x[N]; static double t[M][3]; static double y[M]; /* experimentalni body y_i = f(t_1,t_2,t_3) */ long int m,n,i,ifail,liw=1,lw=LW; double sumsq; void lsfun1_(long int *m, long int *n, double xc[], double fvect[]) /* vraci ve fvect[i] hodnotu i-teho residua v bode x */ /* prokladana funkce je dana vzorcem x_1 + t_1/(x_2*t_2 + x_3*t_3) */ { long int i; for (i=0;i<*m;i++) fvect[i]= xc[0] + t[i][0]/(xc[1]*t[i][1] + xc[2]*t[i][2]) - y[i]; } main () { printf("Zadej pocet bodu a body ve formatu y t_1 t_2 t_3.\n"); scanf("%ld", &m); for (i=0; i