Поиск экстремума функции одной и нескольких переменных. Интерполяция функций интерполяционными полиномами, способы их вычисления и анализ сходимости (по классическому примеру Рунге). Определение ошибки интерполяции. Построение графиков полиномов Чебышева.
В MATLAB поиск локального минимума осуществляет функция : [х , у]= fminbnd (name , a , b [, options ]) для которой : name - имя М-функции, вычисляющей значение f (x ); а, b - границы интервала, на котором осуществляется поиск минимума; options - параметры, управляющие ходом решения; х , у - координаты точки, в которой достигается минимум функции на заданном интервале.Функцию fminbnd можно использовать и для вычисления локального максимума. Вычисление экстремума функции многих переменных z = f (x 1 , x 2 ,…, x n ) осуществляет команда: [x, z] = fminsearch (name, x0 [, options] где: name - имя М-функции, вычисляющей значение z = f (x 1 , x 2 ,…, x n ) , зависящей от n переменных; x 0 - вектор из n элементов, содержащий координаты точки начального приближения; options - параметры, управляющие ходом решения; x - из n элементов, содержащий координаты точки, в которой достигается минимум функции; z - значение функции в точке с координатами x .Пример: Найти минимум функции [z,f ] = fminsearch (@( x ) sqrt (x (1)^2 x(2)^2), [2,2]) %Построение графика [x y ] =meshgrid (-2:0.2:2,-2:0.2:2); z= sqrt (x.^2 y.^2); surf( x,y,z ); Результат: z = 1.0e-004 *-0.4133-0.1015 f = 4.2559e-005Интерполирование функций.Интерполяция функций интерполяционными полиномами В вычислительной математике существенную роль играет интерполяция функций, т.е. построение по заданной функции другой (как правило, более простой), значения которой совпадают со значениями заданной функции в некотором числе точек. % задание границ отрезка a=-1; b=1; % задание количества узлов N=1:30 ; % инициализируем массив (пока пустой) для записи чисел обусловленности C=[]; % проходим по узлам в цикле for n=N % формируем матрицу x=linspace (a,b,n )"; M=[]; for k=0:n M=[M x.^k ]; end % считаем число обусловленности для текущего числа узлов и записываем в массив C C=[C cond (M)]; end % выводим график зависимости числа обусловленности от числа узлов % в полулогарифмическом масштабе figure semilogy (N,C) grid ONИНТЕРПОЛЯЦИОННЫЙ полином в форме ЛАГРАНЖАДЛЯ примера построим графики функций Ф n (x ) для пяти узлов, равномерно распределенных на отрезке [0,1], для чего можно воспользоваться следующей небольшой программой: % задаем границы отрезка и значение n a=0; b=1; n=4 % генерируем набор из n 1 точек, равномерно распределенных на [0,1] x= linspace (a,b,n 1); % генерируем вспомогательный набор из 1000 точек, равномерно распределенных на [0,1] % для вычисления в них функций Psi_k для построения их графиков xx=linspace (a,b,1000); % создаем графическое окно и оси, наносим сетку figure axes(" NEXTPLOT","add ") grid on % в цикле вычисляем значения каждой функции Psi_k в точках, записанных в xx % и строим графики функции Psi_k for k=1:n 1 Phi=ones(size(xx)); J=[1:k-1 k 1:n 1]; for j=J Phi=Phi.*(xx-x(j))/(x(k)-x(j)); end plot( xx,Phi,"Color ",[rand rand rand ],"LINEWIDTH",2) ENDHA следующем рисунке приведены полученные графики Ф n (x ) для k=1,2,3,4,5 , узлы отмечены красными маркерами. Приведем несколько примеров поэлементных операций с векторами: >> a= [10 20 30]; >> b= [2 4 6]; >> c=a ./ b c = 5 5 5 >> d=a .* b d = 20 80 180При программировании интерполяционного полинома по второму способу в функции lagrangef не делалась проверка на равенство x какому-либо узлу, поскольку в MATLAB операция деления на ноль допустима (при делении на ноль числа не равного нулю получается Inf , а при делении нуля на ноль получается NAN , т.е Not a Number , не число). function yy=lagrange (x,y,xx ) % вычисление интерполяционного полинома в форме Лагранжа % x - массив координат узлов % y - массив значений интерполируемой функции % xx - массив значений аргумента, для которых надо вычислить значения полинома % yy - массив значений полинома в точках xx % узнаем число узлов интерполяции (N=n 1) N=length (x ); % создаем нулевой массив значений интерполяционного полинома yy=zeros (size (xx )); % в цикле считаем сумму по узлам for k=1:N % вычисляем произведения, т.е. функции Psi_k t=ones (size (xx )); for j= [1:k-1, k 1:N] t=t .*( xx-x (j ))/( x (k )-x (j )); end % накапливаем сумму yy = yy y (k )* t ; ENDB качестве тестового примера проинтерполируем функцию sin x на отрезке [1,9] с шагом 2 и построим графики sin x и полученного интерполяционного полинома. % задание узлов интерполяции x=1:2:9; y=sin (x ); % задание точек, в которых требуется найти значения интерполяционного полинома xx=linspace (1,9,1000); % нахождение значений интерполяционного полинома yy=lagrange (x,y,xx ); % построение графиков figure (" Color","w ") % вывод графика sin (x ) fplot (@ sin ,[1 9]) hold on % вывод графика полинома plot (xx,yy,"r ") % вывод узлов интерполяции plot (x,y,"bo ") % размещение легенды legend (" sin\itx ","{\ ITL_n }({\ itx })","nodes",-1)Получающийся результат приведен на рисунке ниже Интерполяция функции sin x полиномом 4-ой СТЕПЕНИХОРОШИМ тестовым примером для функций
Вы можете ЗАГРУЗИТЬ и ПОВЫСИТЬ уникальность своей работы