Скачиваний:
0
Добавлен:
02.11.2025
Размер:
85.46 Кб
Скачать

Результат работы

В ходе выполнения поставленной задачи были получены следующие результаты:

Количество итераций, N

Уровень точности

Рисунок 1. График Золотое сечение и Фибоначчи

На рис. 1 синим цветом отмечен алгоритм Золотого сечения, оранжевым – Фибоначчи. Согласно информации с графика, первый алгоритм медленнее алгоритма Фибоначчи. Также стоит отметить, что алгоритм Золотого сечения сильнее замедляется с увеличением необходимой точности. В связи с этим можно сказать, что метод Фибоначчи в среднестатистической ситуации предпочтительнее метода Золотого сечения благодаря своей более низкой сложности.

Приложение

function optimize_parabola

iterations = 10000;

golden_x = zeros(1, iterations);

golden_f = zeros(1, iterations);

golden_n = zeros(1, iterations);

fibo_x = zeros(1, iterations);

fibo_f = zeros(1, iterations);

fibo_n = zeros(1, iterations);

for i = 1:iterations

[golden_x(i), golden_f(i), golden_n(i)] = golddiv();

[fibo_x(i), fibo_f(i), fibo_n(i)] = fibonaccimethod();

end

fprintf('--- Результаты после %d запусков ---\n\n', iterations);

fprintf('Метод золотого сечения:\n');

fprintf('Среднее значение x: %e\n', mean(golden_x));

fprintf('Среднее значение f(x): %e\n', mean(golden_f));

fprintf('Среднее количество итераций: %.2f\n\n', mean(golden_n));

fprintf('Метод Фибоначчи:\n');

fprintf('Среднее значение x: %e\n', mean(fibo_x));

fprintf('Среднее значение f(x): %e\n', mean(fibo_f));

fprintf('Среднее количество итераций: %.2f\n', mean(fibo_n));

end

function [xmin, fmin, n] = golddiv()

eps = 0.001;

a = 0;

b = 1;

n = 0;

phi = (1 + sqrt(5)) / 2;

while (b - a) > eps

y = b - (b - a) / phi;

z = a + (b - a) / phi;

if fun(y) >= fun(z)

a = y;

else

b = z;

end

n = n + 1;

end

xmin = (a + b) / 2;

fmin = fun(xmin);

end

function [xmin, fmin, n] = fibonaccimethod()

eps = 0.001;

a = 0;

b = 1;

Fn = (b - a) / eps;

N = 1;

while (fibonacci(N) < Fn)

N = N + 1;

end

for k = 1:N - 3

y(k) = a + (b - a) * (fibonacci(N - k - 2) / fibonacci(N - k));

z(k) = b - (b - a) * (fibonacci(N - k - 2) / fibonacci(N - k));

if fun(y(k)) < fun(z(k))

b = z(k);

else

a = y(k);

end

end

xmin = (a + b) / 2;

fmin = fun(xmin);

n = N - 3;

end

function t = fibonacci(x)

n(1) = 1;

n(2) = 1;

for i = 3:x

n(i) = n(i-2) + n(i-1);

end

t = n(x);

end

function y = fun(x)

y = (x - 0.5)^2;

end

Санкт-Петербург

2025