Детализированная схема алгоритма
Основная программа
Построение интерполяционного многочлена
Нахождение максимума функции методом дихотомии
Вычисление значения заданной функции
Создание и запуск программы
Создание и запуск программы в Matlab
1) Создаем и сохраняем файл Poiskmax.m
% Задание табличной Функции
X = [0.0, 0.1, 0.2 ,0.3 ,0.4 ,0.5, 0.6];
Y = [1.819548, 1.823125 ,1.831914, 1.838081, 1.847401, 1.851659, 1.855652];
% Задание отрезка для нахождения максимума функции
a = 0.0;
b = 2.0;
% Задание промежуточных точек для интерполирования %параметров функции
XL = [0.17345, 0.43210];
% Задание точности нахождения максимума функции F(X)
E = 0.0001;
% Программа
clc
subplot(1,2,1);plot(X,Y,'g-',X,Y,'k.');% построение графика по точкам
title('Интерполирование функции f(x)');grid on
m=length (XL);
nx=length (X);
ny=length (Y);
if (nx ~= ny),
error (' (x,y) do not have the same # values')
end
%
disp(sprintf('- Результаты интерполяции -'))
for k=1: m
F = LagrangeP(k,nx,X,Y,XL);
LX(k)=F;
pause% пауза в программе
disp(sprintf('XL%g=%g',k,XL(k)))
disp(sprintf('LX%g=%g',k,LX(k)))
hold on; % рисовать на том же графике
subplot(1,2,1);plot(XL(k),LX(k),'r.');
end
%%%
A=a;
B=b;
Xmax=Dixotomii(A,B,E,LX);
Fmax=Fun(LX,Xmax);
%
pause
x=[a:0.1:b];
y=Fun(LX,x);
subplot(1,2,2);plot(x,y,'k-');grid on;%координатная сетка
title('Максимум функции F(Xmax)');
pause
disp(sprintf('=== МАКСИМУМ ФУНКЦИИ ==='))
disp(sprintf('Xmax=%g',Xmax))
disp(sprintf('F(Xmax,LX1,LX2)=%g',Fmax))
hold on
subplot(1,2,2);plot(Xmax, Fmax, 'r*');
2) Создаем и сохраняем файл LagrangeP.m
% Метод интерполяции
function F=LagrangeP(k,nx,X,Y,XL)
sum=0;
for i=1: nx
lt (i) =1;
for j=1: nx
if (j ~= i),
lt (i)= lt(i)*(XL(k)-X(j))/(X(i)- X(j));
end
end
sum = sum + Y (i) * lt (i);
end
F =sum;
end
3) Создаем и сохраняем файл Dixotomii.m
% Нахождение точки максимума функции методом дихотомии
%%%
% [A,B]-заданный отрезок; Е-точность нахождения максимума;
% LX()-параметры F(X)
function X=Dixotomii(A,B,E,LX)
while B-A>2*E
X1=(A+B-E)/2;
X2=(A+B+E)/2;
G1= Fun(LX,X1);
G2= Fun(LX,X2);
if (G1<G2)
A=X1;
else
B=X2;
end
end
X=(A+B)/2;
end
4) Создаем и сохраняем файл Fun.m
% Вычисление значения функции F(X)
function Y = Fun(LX,X)
Y=-LX(1)*X.^2+3.1*LX(2)*X+5;
end
5) Запускаем Poiskmax
Создание и запуск программы в Mathcab
- 1) Создаем и сохраняем файл Poiskmax.mcd
- 2) Набираем в окне Mathcab Poiskmax и получаем результат: