|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Встраиваемые и анонимные функцииЛабораторная работа № 8 Численные методы решения нелинейных алгебраических уравнений
Цели работы: 1. Изучение работы с анонимными и встраиваемыми функциями. 2. Решение нелинейных алгебраических уравнений с помощью функции fzero. 3. Разработка алгоритмического и программного обеспечения решения нелинейных алгебраических уравнений методами бисекций и Ньютона. Продолжительность: 4 академических часа.
Встраиваемые и анонимные функции Встраиваемая функция определяется при помощи функции inline, обращение к которой выглядит следующим образом:
Имя_функции = inline('формула', список_аргументов)
Список аргументов не обязателен, а 'формула' является текстовой строкой и задает выражение для вычисления значения функции. Следующий пример демонстрирует создание в рабочей среде встраиваемой функции fun:
>> fun=inline('sin(x)-x.^2.*cos(x)') fun = Inline function: fun(x) = sin(x)-x.^2.*cos(x)
Inline-фунция fun может быть использована как любая другая функция MATLAB, например:
>> y=fun(0.5)
y = 0.2600
Если функция зависит от нескольких переменных, то все они являются аргументами введенной inline-функции и располагаются в алфавитном порядке:
>> fun1=inline('sin(a*x)-x.^2.*cos(b*x)')
fun1 = Inline function: fun1(a,b,x) = sin(a*x)-x.^2.*cos(b*x)
Для изменения порядка аргументов их следует перечислить через запятые в списке после выражения, определяющего вид функции:
>> fun2=inline('sin(a*x)-x.^2.*cos(b*x)','x','a','b')
fun2 = Inline function: fun2(x,a,b) = sin(a*x)-x.^2.*cos(b*x)
Если в списке случайно пропущен хотя бы один из аргументов, то inline-функцией воспользоваться не удастся:
>> fun3=inline('sin(a*x)-x.^2.*cos(b*x)','x','b')
fun3 = Inline function: fun3(x,b) = sin(a*x)-x.^2.*cos(b*x)
Даже при наличии переменной а в рабочей среде вызов функции fun3 приведет к сообщению о том, что аргумент а не задан:
>> a=1; >> fun3(5,0)
??? Error using ==> inlineeval at 15 Error in inline expression ==> sin(a*x)-x.^2.*cos(b*x) Undefined function or variable 'a'.
Этот пример демонстрирует, что при вычислении значения встраиваемой функции переменные рабочей среды недоступны. Все аргументы функции inline должны быть символьными строками, заключенными в апострофы, или строковыми переменными. В противном случае получается недопустимая конструкция. Необходимо придерживаться простого правила — ставить апострофы в аргументах функции inline. Альтернативный способ задания исследуемой функции состоит в объявлении анонимной функции с помощью оператора указателя @: Имя_функции = @ (список_аргументов) формула
В отличие от inline-функции, и аргументы, и формула записываются в обычном виде, а не как текстовые строки в апострофах. Кроме того, анонимной функции доступны переменные рабочей среды, которые входят в формулу. Однако они являются константами, в качестве которых берутся значения этих переменных в момент создания анонимной функции, и последующее изменение их значений не будет учитываться при вычислении функции:
>> a=1; >> gun3=@(x,b)(sin(a*x)-x.^2.*cos(b*x))
gun3 = @(x,b)(sin(a*x)-x.^2.*cos(b*x))
>> gun3(5,0)
ans = -25.9589
>> a=1000; >> gun3(5,0)
ans =
-25.9589
По способу использования анонимная функция напоминает inline-функцию, но отличается тем, что создается указатель на функцию, который связан с исполняемым кодом. Это хорошо видно либо в окне Workspace, либо при выводе информации о функциях с помощью whos:
>> whos gun3 Name Size Bytes Class Attributes
gun3 1x1 16 function_handle
>> whos fun3 Name Size Bytes Class Attributes
fun3 1x1 910 inline
Информация о выделенной под функции памяти показывает, что для анонимной функции исполняемый код и указатель на нее отделены, а для inline-функции это единый объект.
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.) |