АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Встраиваемые и анонимные функции

Читайте также:
  1. F. Метод, основанный на использовании свойства монотонности показательной функции .
  2. I Психологические принципы, задачи и функции социальной работы
  3. I. Деньги и их функции.
  4. I. Функции
  5. I. Функции эндоплазматической сети.
  6. II. Основные задачи и функции
  7. II. Основные задачи и функции
  8. II. Функции плазмолеммы
  9. III. Предмет, метод и функции философии.
  10. III. Функции и полномочия Гостехкомиссии России
  11. IV. Конструкция бент-функции
  12. Ms Excel: мастер функций. Логические функции.

Лабораторная работа № 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-функции это единый объект.

 


1 | 2 | 3 | 4 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.)