даток B
Метод "Золотого перетину" на С
Налагодження і тестування програми для пошуку мінімуму функції методом "Золотого перетину" на мові С
Вихідний код
# include
# include
# include F (double x)
{x * x +6 * exp (x);
} FMIN (double * AX, double * BX, double * TOL, double * XM, double * FM)
{
"Золотий перетин" з апроксимация
C квадратичної FMIN (AX, BX, F, TOL, XM, FM) AX - нижня межа аргументу; BX - верхня межа аргументу; F - ім'я FUNCTION для розрахунку цільової функції; TOL - точність вибору аргументу цільової функції; XM - вихідне значення аргументу (мінімум цільової функції); FM - вихідне значення цільової функції; --------------------------------------- -------------------------------
*/A, B, C, D, E, EPS, XH, P, Q, R, TOLM, U, V, W, FU, FV, FW, FX, X, ZN, Mn; = 0.5 * (3.0-sqrt (5.0)); = 1.0;: = EPS/2.0; = 1 + EPS; (TOLM> 1) goto a; = sqrt (EPS); = * AX; = * BX; = A + C * (BA); = V; = V; = 0.0; = F (X); = FX; = FX;: = 0.50 * (B - A); = A + R; = EPS * fabs (X) + * TOL /3.0; (fabs (X-XH) <= (2.0 * TOLM-R)) goto k; (fabs (E) <= TOLM) goto d; = X - V; = (X - W) * ( FX - FV); = P * (FX - FW); = P * Q - (X - W) * R; = 2.0 * (Q - R); (Q> 0) P =-P; = fabs (Q ); = E; = D;: (fabs (P)> = fabs (0.50 * Q * R)) goto d; (P <= Q * (A - X)) goto d; (P> = Q * (B - X)) goto d; = P/Q; = X + D; = XH-X; (ZN <0) {Mn = -1;} else {Mn = 1;} ((U - A) < ; TOLM) D = fabs (TOLM) * Mn; ((B - U) = XH) E = A - X; (X = TOLM) U = X + D; = F (U); (FU> FX) goto f; (U> = X) A = X; (U = X) B = U; (FU <= FW) goto g; (W == X) goto g; (FU <= FV) goto j; (V == X) goto j; (V == W) goto j; b;: = W; = FW; = U; = FU; b ;: = U; = FU; b;:
* XM = X;
* FM = FX;
} main (void)
{AX, BX, F, TOL, XM, FM; = -1; = 0; = 0.005; (& AX, & BX, & TOL, & XM, & FM); (" ; Minimum naiden na x =% .3 lf, y =% .3 lf ", XM, FM);
_getch (); 0;
}
Результат:
В
Метод "Гауса" для рішень системи лінійних алгебраїчних рівнянь на С
Налагодження і тестування на мові С
Вихідний код
# include
# include
# include
# include
# define siz 3double T; freee (T ** a, size_t m)
{_t Row, j; (j = 0; j
{(a [j]);
} (a);
} Release (T ** a, size_t m)
{_t Row, Col; (Row = m - 1; 0
{(a [Row]! = NULL) (a [Row]);
} ((void *) a);
} ** fun (size_t m, size_t n, T ** a)
{_t i, j, ff; (a! = NULL)
{= 0; (i = 1; i <= m; + + i) {printf (" n"); (j = 1; j <= n; + + j) {+ + ; [i-1] [j-1] = i + j; ((i == 3) && (j == 3)) a [i-1] [j-1] = 9; (" ;% 3.2f ", a [i-1] [j-1]);
}
}
} a;
} ** Allocate (size_t m, size_t n)
{_t Row; Success = 1; ** a = (T **) calloc (m, sizeof (T *)); (a! = NULL)
{(Row = 0; Row
{[Row] = (T *) calloc (n, sizeof (T)); (NULL == a [Row])
{= 0; (a, m);
}
}
} (Success! = 1) = NULL; a;
} DSIMQLL (T ** A, double * X, unsigned int * N)
{
/*** SIMQL ****************************************** ******** S ** DSIMQL - BEPCІЯ C ДBOЙHOЙ TOЧHOCTЬЮ ** ПPOГPAMMA - SIMQL - PEШAET CІCTEMY ЛІHEЙHИX AЛГEБPAІЧECKІX ** YPABHEHІЙ METOДOM ГAYCCA ** A - BXOДHAЯ MATPІЦA KOЕФФІЦІEHTOB (N * N), HE COXPAHЯETCЯ ** X - результуюча МАСИВ ** N - РОЗМІРНІСТЬ ****************************************** ************** F *
*/i, j, u, k, m, n; buf; = * N; = -1;: = u +1; k = u;: (A [k] [u] == 0) {= k +1; (k <= n-1) goto b; ("Sistema ne opredelena"); return;
} (k! = u)
{(m = u; m <= n; m + +) {= A [u] [m]; [u] [m] = A [k] [m]; [k] [m] = buf;
}
} (j = n; j> = u; j -) {[u] [j] = A [u] [j]/A [u] [u];
} = n; (k +1 = 0; i -) {[i] = A [i] [m]; (i! = 0) (k = i-1; k> = 0; k -) A [k] [m] = A [k ] [m] - A [k] [i] * X [i];
}
} main (void)
{int i, j, N, M; ** A; * X; D; int size; = siz; = size; = size +1; = Allocate (N, M); = (double *) calloc ((N), sizeof (double)); [0] [0] = -2.0; [0] [1] = 3.0; [0] [2] = 4.0; [0] [3] = 21.0; [1 ] [0] = 1.0; [1] [1] = 5.0; [1] [2] = 7.0; [1] ...