Отличия файла-функции от скрипт-файла




Решение типовых математических задач

Действия с полиномами (многочленами)

Среди математических задач часто возникает необходимость использовать полиномы или как их еще называют степенные многочлены. В ML предусмотрены функции для работы с ними. С помощью этих функций можно вычислить значение полинома, найти его корни, выполнить операции умножения и деления полиномов и т.д.

Полином (многочлен) определяется выражением вида:

P(x)=a1xn+a2xn-1+…..+anx+an+1

В системе Matlab полином задаётся и хранится в виде вектора, элементами которого являются коэффициенты полинома:

P=[a1 a2 …an an+1]

Число э лементов вектора должно быть на единицу больше степени полинома. Если в полиноме отсутствует слагаемое, соответствующее какой-либо степени х, то в этом случае в векторе в качестве значения коэффициента записывается ноль.

Например, пусть задан полином x7+3.2x5-5.2x4+0.5x2+x-3. Вектор коэффициентов полинома будет:

p=[1, 0, 3.2, -5.2, 0, 0. 5, 1, -3]

Вычислить корни полинома можно с помощью функции roots. Число корней определяется степенью полинома:

>> p=[1, 0,0, 3.2, -5.2, 0, 0.5, 1, -3];

>> X=roots(p)

X =

-0.5668 + 2.0698i

-0.5668 - 2.0698i

-0.6305 + 0.5534i

-0.6305 - 0.5534i

1.2149

0.5898 + 0.6435i

0.5898 - 0.6435i

Результат – вектор-столбец. Число корней должно совпадать со степенью полинома. В данном случае найдены семь корней, из которых один вещественный и шесть комплексных.

Можно восстановить коэффициенты полинома, применив функцию

>> p1=poly(X)

p1 =

Columns 1 through 5

1.0000 0.0000 3.2000 -5.2000 0.0000

Columns 6 through 8

0.5000 1.0000 -3.0000

Однако, если коэффициент у старшей степени не 1, то полученный вектор надо умножить на коэффициент, равный старшей степени (p1*n).

Для вычисления значения полинома при некотором значении аргумента предназначена функция polyval(p, x), где p – вектор коэффициентов полинома; х – значение аргумента, при котором надо вычислить значение полинома.

>>p=[1 0 3.2 -5.2 0 0.5 1 -3];

>>Y=polyval(p,1)

Y =

-2.5000

В результате будет вычислено значение полинома p при x=1.

В качестве аргумента х может быть указан вектор или матрица. В результате получится вектор или матрица того же размера, что и аргумент:

>> p=[1 0 3.2 -5.2 0 0.5 1 -3];

x=1:4;

Y=polyval(p,x)

Y =

1.0e+004 * %Это множитель, на который надо умножить каждый элемент

-0.0003 0.0148 0.2548 1.8339

Элементы вектора Y – значения полинома, вычисленные для каждого элемента вектора X.

Чтобы вычислить производную от полинома, следует использовать функцию polyder. Результатом этой функции является вектор, элементы которого представляют собой коэффициенты полинома-производной от исходного полинома:

>> p=[1 0 3.2 -5.2 0 0.5 1 -3];

>> polyder(p)

ans =

Columns 1 through 5

7.0000 0 16.0000 -20.8000 0

Columns 6 through 7

1.0000 1.0000

Для выполнения умножения и деления полиномов предназначены функции conv и deconv:

Z=conv(P1,P2),

где P1, P2 – полиномы, заданные векторами; Z – результирующий векторкоэффициентов полинома, полученного в результате перемножения полиномов, заданных векторами P1, P2.

[R1, R2]=deconv(P1,P2)

Результат работы этой функции – два вектора R1, R2, где R1, R2 – векторы коэффициентов полинома-частного и полинома-остатка, полученного в результате деления полиномов, заданных векторами P1,P2.

Файлы функций

В процессе работы с системой ML мы уже сталкивались с встроенными функциями, например, sin (х). У таких функций есть только один входной аргумент (для приведенной функции - это х). В математике это аргумент, а в программировании говорят – параметр.

Мы записывали последовательность команд в скрипт-файл (такой файл еще называют иначе - файл-программа). У скрипт-файла нет ни заголовка, ни входных, ни выходных параметров. Все объекты, используемые внутри script-файла, считаются глобальными, т.е. они доступны и их можно использовать до и после выполнения скрипт-файла. Все данные, которые находятся в рабочем пространстве, можно использовать, а после выполнения скрипта использовать данные, созданные с его помощью. Вызвать такой файл можно указав просто его имя в командной строке.

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

Такая необходимость возникает прежде всего при решении задач, использующих численные методы, при программировании собственных приложений и реализуется в виде файла-функций. Файл-функция, так же как и файл-программа, создаются в редакторе ML и имеют расширение m. Можно создавать файл-функцию с любым количеством входных и выходных параметров.

Файл-функция имеет заголовок, который состоит из ключевого слова function, в квадратных скобках указываются один или несколько выходных параметров (вектор выходных значений), знака равенства, имени функции и в круглых скобках списка входных параметров.

Синтаксическая конструкция заголовка файла-функции:

function [рез1, рез.2…рез.N] = <имя функции> (пар.1, пар.2,…пар.N)

После заголовка записываются операторы, реализующие алгоритм поставленной задачи. Они составляют тело функции. Заканчивается файл-функция ключевым словом – end (не обязательным)

Переменным из списка выходных параметров в процессе работы функции присваиваются значения, вычисленные в функции. Выходных параметров может быть столько, сколько необходимо, их список перечисляется через запятую в квадратных скобках:

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

Вызвать (активизировать) файл-функцию можно так:

[y1, y2,…,yn]=<имя функции>(<список вх. факт. параметров>)

Вызов можно осуществить либо в командном режиме, либо из других файлов-программ или файлов-функций. Имя функции используется только для вызова и не несёт результата.

Вызов файла-функции c одним выходным параметром будет иметь вид:

<имя функции>(<список входных фактических параметров>)

В таком случае вызов может использоваться в операторах присваивания или в выражении:

<имя переменной>=<имя функции>(<список входных фактических параметров>)

Если выходной параметр один, то [] не записываются. Функция может не возвращать никакого результата. В этом случае заголовок имеет вид:

function <имя функции> (пар.1, пар.2,…пар.n)

При написании файла-функции следует помнить, что при сохранении m -файла, его имя должно совпадать с именем функции.

Все переменные, используемые внутри файла-функции, а также входные и выходные параметры являются локальными. Они доступны только внутри функции.

Отличия файла-функции от скрипт-файла

1. Файл-функция имеет входные и выходные параметры, а script- файл – нет.

2. Все переменные, используемые внутри файла-функции, локальны. Файл-программа работает с переменными рабочего пространства, т.е. в script- файле можно использовать глобальные данные.

3. Функция перед выполнением компилируется. Script- файл не компилируется целиком, а выполняется в режиме интерпретации.

4. Имя файла, в котором записана функция, должно совпадать с именем функции, а имя script- файла может быть любым.

Программа будет выполняться быстрее, если вместо script- файла использовать файл - функцию(в случае, если это возможно).

Примеры

Пусть необходимо многократно вычислять функцию y(x)=sin(x)/x при различных значениях входного параметра x.

В редакторе ML запишем:

function y=mysin(x)

y=sin(x)./x;

End

Сохраним файл с именем mysin и выполним его с разными значениями x. Вызов функции осуществляется указанием имени и в круглых скобках списка параметров.

>> mysin (pi/4)

ans =

0.9003

>> mysin (pi/3)

ans =

0.8270

>> mysin ([ pi/3, pi/4, pi/2, pi ])

ans =

0.8270 0.9003 0.6366 0.0000

Можно использовать обращение к функции в выражении:

>> f= mysin (pi/3)/5 + mysin (pi/4)

f =

1.0657

В последнем случае обратились к функции с входным параметром – вектором значений x. В результате получили выходной параметр в виде вектора того же размера, что и входной вектор.

Вызов собственных функций может осуществляться как из файл-программы, так и из другой файл-функции, так и из командной строки, указав имя функции и список входных параметров.



Поделиться:




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

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-27 Нарушение авторских прав и Нарушение персональных данных


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