Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

matlab_10

.pdf
Скачиваний:
17
Добавлен:
27.05.2015
Размер:
174.81 Кб
Скачать

Программные средства MatLab, реализующие численные методы

MatLab содержит ряд программных средств (прежде всего, в виде функций), предназначенных для реализации алгоритмов типовых численных методов решения прикладных задач. Наряду с базовыми операциями решения линейных и нелинейных уравнений и их систем имеются функции вычисления конечных разностей, численного дифференцирования и интегрирования, триангуляции, аппроксимации, вычисления лапласиана и для работы с полиномами.

Решение систем линейных уравнений

/ – правое деление. Выражение X=В/A дает решение ряда систем линейных уравнений AX = B, где A – матрица размера m×n и B – матрица размера n×k;

\ – левое деление. Выражение X=В\A дает решение ряда систем линейных уравнений XA=B, где A – матрица размера m×n и B – матрица размера n×k.

Если А – квадратная матрица, то A\B – то же самое, что и inv(A)*B. Если А – матрица размера n×n, а В – вектор-столбец с n компонентами или матрица с несколькими подобными столбцами, тогда X=A\B – решение уравнения AX=B, которое находится хорошо известным методом исключения Гаусса.

Поиск нулей функции fun(x) = 0:

fzero(fun, x) - возвращает уточненное значение x, при котором достигается нуль функции fun, представленной строкой, при начальном значении аргумента x.

fzero(fun, [x1 x2]) возвращает значение x, при котором fun(x)=0 c заданием интервала поиска с помощью вектора x=[x1 x2], такого что знак fun(x(1)) отличается от знака fun(x(2)).

fzero(fun, x, tol) возвращает результат с заданной погрешностью tol.

fzero(fun, x, tol, trace) выдает на экран информацию о каждой итерации.

Для функции fzero нуль рассматривается как точка, где график функции fun пересекает ось х, а не касается ее. В зависимости от формы задания функции fzero реализуются следующие хорошо известные численные методы поиска нуля функции: деления отрезка пополам, секущей и обратной квадратичной интерполяции.

Пример:

>> x = fzero(@cos, [1 3]) x = 1.5708

Для решения нелинейных уравнений и систем нелинейных уравнений может использоваться функция fsolve (метод наименьших квадратов).

Пример:

Сначала создаем м-файл с функцией для задания системы:

function F = my_fun(x)

F = [2*x(1) - x(2) - log(-x(1)); -x(1) + 2*x(2) - exp(-x(2))]; return

Затем выполняем следующие команды:

>>x0 = [-5; -5]; %начальное приближение

>>options=optimset('Display','iter'); %опции показа решения

>>[x, fval] = fsolve(@my_fun, x0, options) %старт!

Результаты:

 

 

 

Norm of

First-order Trust-region

Iteration

Func-count

f(x)

step

optimality

radius

0

3

23579.3

 

2.31e+004

1

1

6

3375.08

1

3.25e+003

1

2

9

518.733

1

457

1

...

 

 

 

 

 

10

33 4.39022e-018

2.58413e-005

9.75e-009

6.25

x =

-0.378555299284655 0.214282514963590

fval = 1.0e-008 *

0.209510675475144 -0.002735012216704

Минимизация функции одной переменной (золотое сечение или параболическая интеполяция)

fminbnd(fun, x1, x2) возвращает значение x, которое является локальным минимумом функции fun(x) на интервале x1<x<x2.

fminbnd(fun, x1, x2, options) сходна с описанной выше формой функции, но использует параметры tolX, maxfuneval, maxiter, display из вектора options, предварительно установленные при помощи команды optimset

Пример:

>> options=optimset('tolX',1.e-10);... [x]=fminbnd(@cos,3,4,options) x = 3.1416

Минимизация функции нескольких переменных (симплекс-методы)

Реализующая симплекс-методы НелдераМида функция записывается в виде:

fminsearch(fun,x0) возвращает вектор x, который является локальным минимумом функции fun(x) вблизи х0. x0 может быть скаляром, вектором (отрезком при минимизации функции одной переменной) или матрицей (для функции нескольких переменных)

fminsearch(fun,x0,options) аналогична описанной выше функции, но использует вектор параметров options точно так же, как функция fminbnd

Пример: поиск минимума тестовой функции Розенброка, точка минимума которой находится в «овраге» с «плоским дном»:

rb(x1, x2, a) = 100*(x2 – x1^2)^2 + (a – x1)^2.

Минимальное значение этой функции равно нулю и достигается в точке [a a^2].

Создадим файл-функцию

function f = rb(x, a) f=100*(x(2)-x(1)^2)^2+(a-x(1))^2; return

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]