Добавил:
unclefalkon
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:ЛР1 / lab1_hord
.m function [x_min, f_min] = lab1_hord(a, b, eps, f)
a_start = a;
b_start = b;
syms x;
f_diff = diff(f);
f_diff_a = double(subs(f_diff, x, a));
f_diff_b = double(subs(f_diff, x, b));
x_min = a - ( f_diff_a / (f_diff_a - f_diff_b) ) * (a-b);
f_diff_xmin = double(subs(f_diff, x, x_min));
counter = 3;
while abs(f_diff_xmin) > eps
if f_diff_xmin > 0
b = x_min;
f_diff_b = f_diff_xmin;
else
a = x_min;
f_diff_a = f_diff_xmin;
end
x_min = a - ( f_diff_a / (f_diff_a - f_diff_b) ) * (a-b);
f_diff_xmin = double(subs(f_diff, x, x_min));
counter = counter + 1;
end
f_min = myfun(x_min);
str=sprintf('Минимум функции на отрезке [%d; %d] - %3f, в точке %3f',a_start, b_start, f_min, x_min);
disp(str);
str = sprintf('Количество вычислений значения производной функции - %d %d', counter);
disp(str);
end
a_start = a;
b_start = b;
syms x;
f_diff = diff(f);
f_diff_a = double(subs(f_diff, x, a));
f_diff_b = double(subs(f_diff, x, b));
x_min = a - ( f_diff_a / (f_diff_a - f_diff_b) ) * (a-b);
f_diff_xmin = double(subs(f_diff, x, x_min));
counter = 3;
while abs(f_diff_xmin) > eps
if f_diff_xmin > 0
b = x_min;
f_diff_b = f_diff_xmin;
else
a = x_min;
f_diff_a = f_diff_xmin;
end
x_min = a - ( f_diff_a / (f_diff_a - f_diff_b) ) * (a-b);
f_diff_xmin = double(subs(f_diff, x, x_min));
counter = counter + 1;
end
f_min = myfun(x_min);
str=sprintf('Минимум функции на отрезке [%d; %d] - %3f, в точке %3f',a_start, b_start, f_min, x_min);
disp(str);
str = sprintf('Количество вычислений значения производной функции - %d %d', counter);
disp(str);
end
Соседние файлы в папке ЛР1