#include <stdio.h>
#include <math.h>
#define n 11 // Количество точек данных
// Функция для расчета ошибки модели
double F(double b1, double b2, double x[], double y[]) {
double F = 0;
for (int i = 0; i < n; i++) {
double Y_m
= b1
* log(b2
* x
[i
]); // Модельное значение y F
+= pow(y
[i
] - Y_m
, 2); // Квадрат ошибки }
return F;
}
int main() {
// Исходные данные
double x[n] = {0.1, 0.9, 1, 2, 5, 6, 7, 10, 15, 16, 17};
double y[n] = {-4.767, -0.394, -0.185, 1.195, 3.018, 3.381, 3.688, 4.398, 5.205, 5.333, 5.454};
// Начальные значения переменных
int Iter = 0;
double b1 = 2.0; // Начальные значения b1
double b2 = 1.0; // Начальные значения b2
// Вывод исходных данных
for (int i = 0; i < n; i++) {
printf("%.1f %.3f\n", x
[i
], y
[i
]); }
// Вывод начальной ошибки
printf("\nFnach: %.6f\n", F
(b1
, b2
, x
, y
));
// Ввод параметров оптимизации
double F_zad, db;
// Итерационный процесс оптимизации
while (F_zad < F(b1, b2, x, y)) {
double new_b1 = b1, new_b2 = b2;
// Оптимизация параметра b1
if (F(b1 + db, b2, x, y) < F(b1, b2, x, y)) {
new_b1 = b1 + db;
} else if (F(b1 - db, b2, x, y) < F(b1, b2, x, y)) {
new_b1 = b1 - db;
}
// Оптимизация параметра b2
if (F(b1, b2 + db, x, y) < F(b1, b2, x, y)) {
new_b2 = b2 + db;
} else if (F(b1, b2 - db, x, y) < F(b1, b2, x, y)) {
new_b2 = b2 - db;
}
// Обновление параметров
b1 = new_b1;
b2 = new_b2;
Iter++;
// Проверка на превышение числа итераций
if (Iter > 1000) {
printf("Ошибка: невозможно вычислить функцию с требуемой точностью.\n"); return 1;
}
}
// Вывод результатов
printf("\nIterations: %d\n", Iter
); printf("Fkon: %.6f\n", F
(b1
, b2
, x
, y
)); printf("b1 = %.6f, b2 = %.6f\n", b1
, b2
);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CgojZGVmaW5lIG4gMTEgLy8g0JrQvtC70LjRh9C10YHRgtCy0L4g0YLQvtGH0LXQuiDQtNCw0L3QvdGL0YUKCi8vINCk0YPQvdC60YbQuNGPINC00LvRjyDRgNCw0YHRh9C10YLQsCDQvtGI0LjQsdC60Lgg0LzQvtC00LXQu9C4CmRvdWJsZSBGKGRvdWJsZSBiMSwgZG91YmxlIGIyLCBkb3VibGUgeFtdLCBkb3VibGUgeVtdKSB7CiAgICBkb3VibGUgRiA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGRvdWJsZSBZX20gPSBiMSAqIGxvZyhiMiAqIHhbaV0pOyAvLyDQnNC+0LTQtdC70YzQvdC+0LUg0LfQvdCw0YfQtdC90LjQtSB5CiAgICAgICAgRiArPSBwb3coeVtpXSAtIFlfbSwgMik7IC8vINCa0LLQsNC00YDQsNGCINC+0YjQuNCx0LrQuAogICAgfQogICAgcmV0dXJuIEY7Cn0KCmludCBtYWluKCkgewogICAgLy8g0JjRgdGF0L7QtNC90YvQtSDQtNCw0L3QvdGL0LUKICAgIGRvdWJsZSB4W25dID0gezAuMSwgMC45LCAxLCAyLCA1LCA2LCA3LCAxMCwgMTUsIDE2LCAxN307CiAgICBkb3VibGUgeVtuXSA9IHstNC43NjcsIC0wLjM5NCwgLTAuMTg1LCAxLjE5NSwgMy4wMTgsIDMuMzgxLCAzLjY4OCwgNC4zOTgsIDUuMjA1LCA1LjMzMywgNS40NTR9OwoKICAgIC8vINCd0LDRh9Cw0LvRjNC90YvQtSDQt9C90LDRh9C10L3QuNGPINC/0LXRgNC10LzQtdC90L3Ri9GFCiAgICBpbnQgSXRlciA9IDA7CiAgICBkb3VibGUgYjEgPSAyLjA7IC8vINCd0LDRh9Cw0LvRjNC90YvQtSDQt9C90LDRh9C10L3QuNGPIGIxCiAgICBkb3VibGUgYjIgPSAxLjA7IC8vINCd0LDRh9Cw0LvRjNC90YvQtSDQt9C90LDRh9C10L3QuNGPIGIyCgogICAgLy8g0JLRi9Cy0L7QtCDQuNGB0YXQvtC00L3Ri9GFINC00LDQvdC90YvRhQogICAgcHJpbnRmKCJEYXRhICh4LCB5KTpcbiIpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICBwcmludGYoIiUuMWYgJS4zZlxuIiwgeFtpXSwgeVtpXSk7CiAgICB9CgogICAgLy8g0JLRi9Cy0L7QtCDQvdCw0YfQsNC70YzQvdC+0Lkg0L7RiNC40LHQutC4CiAgICBwcmludGYoIlxuRm5hY2g6ICUuNmZcbiIsIEYoYjEsIGIyLCB4LCB5KSk7CgogICAgLy8g0JLQstC+0LQg0L/QsNGA0LDQvNC10YLRgNC+0LIg0L7Qv9GC0LjQvNC40LfQsNGG0LjQuAogICAgZG91YmxlIEZfemFkLCBkYjsKICAgIHByaW50ZigiV3JpdGUgRnphZDogIik7CiAgICBzY2FuZigiJWxmIiwgJkZfemFkKTsKICAgIHByaW50ZigiV3JpdGUgZGI6ICIpOwogICAgc2NhbmYoIiVsZiIsICZkYik7CgogICAgLy8g0JjRgtC10YDQsNGG0LjQvtC90L3Ri9C5INC/0YDQvtGG0LXRgdGBINC+0L/RgtC40LzQuNC30LDRhtC40LgKICAgIHdoaWxlIChGX3phZCA8IEYoYjEsIGIyLCB4LCB5KSkgewogICAgICAgIGRvdWJsZSBuZXdfYjEgPSBiMSwgbmV3X2IyID0gYjI7CgogICAgICAgIC8vINCe0L/RgtC40LzQuNC30LDRhtC40Y8g0L/QsNGA0LDQvNC10YLRgNCwIGIxCiAgICAgICAgaWYgKEYoYjEgKyBkYiwgYjIsIHgsIHkpIDwgRihiMSwgYjIsIHgsIHkpKSB7CiAgICAgICAgICAgIG5ld19iMSA9IGIxICsgZGI7CiAgICAgICAgfSBlbHNlIGlmIChGKGIxIC0gZGIsIGIyLCB4LCB5KSA8IEYoYjEsIGIyLCB4LCB5KSkgewogICAgICAgICAgICBuZXdfYjEgPSBiMSAtIGRiOwogICAgICAgIH0KCiAgICAgICAgLy8g0J7Qv9GC0LjQvNC40LfQsNGG0LjRjyDQv9Cw0YDQsNC80LXRgtGA0LAgYjIKICAgICAgICBpZiAoRihiMSwgYjIgKyBkYiwgeCwgeSkgPCBGKGIxLCBiMiwgeCwgeSkpIHsKICAgICAgICAgICAgbmV3X2IyID0gYjIgKyBkYjsKICAgICAgICB9IGVsc2UgaWYgKEYoYjEsIGIyIC0gZGIsIHgsIHkpIDwgRihiMSwgYjIsIHgsIHkpKSB7CiAgICAgICAgICAgIG5ld19iMiA9IGIyIC0gZGI7CiAgICAgICAgfQoKICAgICAgICAvLyDQntCx0L3QvtCy0LvQtdC90LjQtSDQv9Cw0YDQsNC80LXRgtGA0L7QsgogICAgICAgIGIxID0gbmV3X2IxOwogICAgICAgIGIyID0gbmV3X2IyOwogICAgICAgIEl0ZXIrKzsKCiAgICAgICAgLy8g0J/RgNC+0LLQtdGA0LrQsCDQvdCwINC/0YDQtdCy0YvRiNC10L3QuNC1INGH0LjRgdC70LAg0LjRgtC10YDQsNGG0LjQuQogICAgICAgIGlmIChJdGVyID4gMTAwMCkgewogICAgICAgICAgICBwcmludGYoItCe0YjQuNCx0LrQsDog0L3QtdCy0L7Qt9C80L7QttC90L4g0LLRi9GH0LjRgdC70LjRgtGMINGE0YPQvdC60YbQuNGOINGBINGC0YDQtdCx0YPQtdC80L7QuSDRgtC+0YfQvdC+0YHRgtGM0Y4uXG4iKTsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQogICAgfQoKICAgIC8vINCS0YvQstC+0LQg0YDQtdC30YPQu9GM0YLQsNGC0L7QsgogICAgcHJpbnRmKCJcbkl0ZXJhdGlvbnM6ICVkXG4iLCBJdGVyKTsKICAgIHByaW50ZigiRmtvbjogJS42ZlxuIiwgRihiMSwgYjIsIHgsIHkpKTsKICAgIHByaW50ZigiYjEgPSAlLjZmLCBiMiA9ICUuNmZcbiIsIGIxLCBiMik7CgogICAgcmV0dXJuIDA7Cn0=