русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Примечание


Дата добавления: 2015-07-23; просмотров: 507; Нарушение авторских прав


Подфункциями понимаются как встроенные функции, например sin(x) или ехр(х),так и функции пользователя, например f(x), задаваемые как т-файлы-функции.

Численные значения таких функций, заданных дескрипторами, вычисляются с помощью функции feval:

» feval(fe.1.0)

ans =

2.7183

Для совместимости с прежними версиями можно записывать функции в символьном виде в апострофах, использование функции eval для их вычисления может быть более наглядно, не нужно создавать m-файл, но в учебном курсе мы будем стараться использовать новую нотацию, с использованием дескрипторов функций и feval, так как при этом программирование становится «более объектно-ориентированным», повышается скорость, точность и надежность численных методов. Поэтому, хотя везде в нижеследующем тексте вместо @fun можно подставить и символьное значение функции в апострофах, мы будем использовать нотацию @fun в дидактических целях. Все же иногда в интерактивном режиме можно использовать старую запись, чтобы не создавать m-файл функции.

Довольно часто возникает задача решения нелинейного уравнения вида f(x) = О или/, (г) =/ 2 (дг). Последнее, однако, можно свести к виду f(x) =f 1 (х) - f 2 (х) = 0. Таким образом, данная задача сводится к нахождению значений аргумента х функции f(x) одной переменной, при котором значение функции равно нулю. Соответствующая функция MATLAB, решающая данную задачу, приведена ниже:

· fzero(@fun,x) — возвращает уточненное значение х, при котором достигается нуль функции fun, представленной в символьном виде, при начальном значении аргумента х. Возвращенное значение близко к точке, где функция меняет знак, или равно NaN, если такая точка не найдена;

· fzero(@fun,[xl x2]) — возвращает значение х, при котором fun(x)=0 с заданием интервала поиска с помощью вектора x=[xl х2], такого, что знак fun(x(D) отличается от знака fun(x(2)). Если это не так, выдается сообщение об ошибке. Вызов функции fzero с интервалом гарантирует, что fzero возвратит значение, близкое к точке, где fun изменяет знак;



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

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

· fzero(@fun,х.tol .trace,Р1.Р2,...) — предусматривает дополнительные аргументы, передаваемые в функцию fun(x.Pl,P2,...). При задании пустой матрицы для tol или trace используются значения по умолчанию. Пример:

fzero(fun,x,[ ],[ ],Р1).

Для функции fzero ноль рассматривается как точка, где график функции fun пересекает ось х, а не касается ее. В зависимости от формы задания функции fzero реализуются следующие хорошо известные численные методы поиска нуля функции: деления отрезка пополам, секущей и обратной квадратичной интерполяции. Приведенный ниже пример показывает приближенное вычисление р/2 из решения уравнения cos(x)=0 с представлением косинуса дескриптором:

» х= fzero(@cos.[1 3])

x =

1.5708

В более сложных случаях настоятельно рекомендуется строить график функции f(x) для приближенного определения корней и интервалов, в пределах которых они находятся. Ниже дан пример такого рода (следующий листинг представляет собой содержимое m-файла fun1.m):

%Функция, корни которой ищутся

function f=funl(x)

f=0.25*x+sin(x)-1;

» х=0:0.1:10;

» plot(x,funl(x));grid on;

Из рисунка нетрудно заметить, что значения корней заключены в интервалах [0.5 1], [2 3] и [5 6]. Найдем их, используя функцию fzero:

» xl=fzero(@funl.[0.5 1])

xl =

0.8905

» x2=fzero(@funl.[2 3])

x2 =

2.8500

» x3=fzero(@funl,[5.6])

x3 =

5.8128

» x3=fzero(@funl,5,0.001)

x3 =

5.8111

Обратите внимание на то, что корень хЗ найден двумя способами и что его значения в третьем знаке после десятичной точки отличаются в пределах заданной погрешности tol =0.001. К сожалению, сразу найти все корни функция fzero не в состоянии. Решим эту же систему при помощи функции f sol ve из пакета Optimization Toolbox, которая решает систему нелинейных уравнений вида f(x)=0 методом наименьших квадратов, ищет не только точки пересечения, но и точки касания, f solve имеет почти те же параметры (дополнительный параметр — задание якобиана) и почти ту же запись, что и функция lsqnonneg, подробно рассмотренная ранее. Пример:

»fsolve(@funl,0:10 )

ans =

Columns 1 through 7

0.8905 0.8905 2.8500 2.8500 2.8500 5.8128 5.8128

Columns 8 through 11

5.8128 2.8500 2.8500 10.7429

Для решения систем нелинейных уравнений следует также использовать функцию solve из пакета Symbolic Math Toolbox. Эта функция способна выдавать результат в символьной форме, а если такого нет, то она позволяет получить решение в численном виде. Пример:

» solve('0.25*x + sin(x) -1) [ Пакеты расширения Symbolic Math ToolBox и Extended Symbolic Math Toolbox MATLAB 6.0 используют ядро Maple V Release 5 [30-35] и являются поэтому исключением: они пока не поддерживают новую нотацию с использованием дескрипторов функций. — Примеч. ред. ]

ans =

.89048708074438001001103173059554



<== предыдущая лекция | следующая лекция ==>
Метод сопряженных градиентов | Минимизация функции одной переменной


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 3.661 сек.