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

Базовые средства матпакета Scilab

.pdf
Скачиваний:
55
Добавлен:
04.04.2023
Размер:
6.29 Mб
Скачать

одной независимой переменной и реализует аналитическое вычисление

d(p(z))

 

dz

 

iAizi 1

i

.

Рассмотрим несколько примеров (рис.2.1.2-2):

--> // Вычисление рациональной матричной производной

-->

-->s = poly(0, 's'); // Создание переменной типа полином

-->derivat(1/s)

 

// Вычисляетсяпроизводная(1/S)'=-1/s^2

ans

=

 

 

 

 

 

 

 

-1

 

 

 

 

 

 

 

---

 

 

 

 

 

 

 

 

s2

 

 

 

 

 

 

 

-->

 

 

 

 

 

 

 

 

-->

p1

= poly([1 -2 1], 'x', 'c')

 

 

p1

=

 

 

 

 

 

 

 

1 -2x +x2

 

 

 

 

 

 

-->

 

 

 

 

 

 

 

 

--> derivat(p1)

 

 

 

 

 

 

ans

 

=

 

 

 

 

 

 

-2 +2x

 

 

 

 

 

 

-->

 

 

 

 

 

 

 

 

-->

p3

= poly(ones(1, 10), 'z', 'c')

 

 

p3

=

 

 

 

 

 

 

1 +z +z2 +z3 +z4 +z5 +z6 +z7 + z8 +z9

 

--> derivat(p3)

 

 

 

 

 

ans

=

 

 

 

 

 

 

1 +2z +3z2

+4z3

+5z4

+6z5

+7z6

+8z7

+9z8

Рис.2.1.2-2. Вычисление рациональной матричной производной

Scilab может выполнять операции над полиномами только с одной переменной, иначе в результате выполнения появляется сообщение об ошибке:

«Переменные не имеют одной и той же формальной переменной».

В Scilab имеется множество вспомогательных функций по работе с полиномами [14], в том числе, для создания специальных полиномов. В качестве примера рассмотрим создание полинома Чебышева с использованием функции chepol (рис.2.1.2-3), имеющей следующий формат:

Tn=chepol(Порядок полинома, 'Независимая переменная'),

где: Tnполиноминальная переменная, которая в результате присваивания ей результата выполнения функции chepol представляет собой полином Чебышева.

201

-->// Использование функцииchepolдля создания полинома Чебышева

-->

-->

T4

= chepol(4, 'x')

// Создание полинома Чебышева 4-го порядка

Th

=

 

 

1

 

-8x2 +8x4

 

-->

 

 

 

--> //

Использование функции в выражениях

-->P =

2 * poly(0, 'x') *

chepol(4,'x') - chepol(5, 'x')

P

=

 

 

-3x

+4x3

 

Рис. 2.1.2-3. Использование chepolдля создания полинома Чебышева

Далее приведен пример использования вспомогательной функции pol2str, которая преобразует полином в символьную строку (рис. 2.1.2-4).

-->// Преобразование полинома в символьную строку

-->

-->p = poly([1, 2, 3], "t", "c")

p

=

 

 

1 +2t +3t2

// Значение данных типа полином

-->pol2str(p)

 

ans

=

 

 

1+2*t+3*t^2

// Значение данных типа строка

Рис. 2.1.2-4. Пример преобразования полинома в символьную строку

Рациональные дроби

Рациональная дробь – объект Scilab r, который является частным двух полиномов r = num/den[13]. Внутреннее представление рациональной дроби это список r=rlist(num,den,[]) или то же самое, что r=num/den. Матрица рациональных чисел может быть определена обычным синтаксисом, например, [r11,r12;r21,r22] является матрицей размером 2×2, где rij – рациональные числа размерностью 1x1. Матрица рациональных чисел может быть, также определена в виде списка,

tlist(['r','num','den','dt'],num,den,[]),

где: num и den – матрицы полиномов.

202

Рассмотрим несколько примеров использования рациональных дробей

(рис. 2.1.2-5).

--> // Представление и работа с рациональными дробями

-->

--> s = poly(0, 's') s =

s

--> W = [1/s, 1/(s+1)]

W =

 

1

1

--

------

s

1 + s

-->

 

--> W'

* W

ans

=

1

1

--------

s2

s + s2

1

1

------

-----------

s + s2 1 + 2s + s2

-->

--> Num = [s, s+2; 1, s]

Num

=

 

s

2

+s

1

s

 

--> Den = [s*s, s; s, s*s]

Den

=

s2

s

s

s2

-->

--> H = Num ./ Den

H =

 

1

2 + s

--

------

s

s

1

1

 

 

--

--

 

s

s

 

 

-->

 

 

 

--> syslin('c', Num, Den)

//Определениелинейнойсистемы

ans

=

 

 

s

2

+ s

 

--------

s2 s

1 s

----

203

s s2

--> [Num1, Den1] = simp(Num, Den) // Рациональное упрощение

Den1

 

=

s

 

s

s

 

s

Num1

=

1

2

+ s

1

 

1

Рис. 2.1.2-4. Работа с рациональными дробями

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

Рассмотрим пример построения временной зависимости напряжения на конденсаторе uC(t) в неразветвленной RLC-цепи, если цепь включается на постоянное напряжение при нулевых начальных условиях [17] (рис. 2.1.2-5).

204

-->//Загрузка и выполнение сценарияРИС21205

Колебательный режим

R=0.8; L=0.3e-3; C=0.1e-6;

Рис. 2.1.2-5 Построение временной зависимости напряжения на конденсаторе uC(t) в неразветвленной RLC-цепи

2.1.3Контрольные вопросы

1)Что такое полином?

2)Является ли полином типом данных Scilab?

3)Как создать переменную типа полинома по заданному вектору коэффициентов?

4)Как создать переменную типа полином по заданному вектору корней полинома?

5)Как создать полином с использованием системных констант?

6)Какой формат имеет функция poly?

7)Как задать матрицу полиномов?

8)Как оценить значение полинома?

9)Как вычислить значения корней полинома?

10)Можно ли с полиномами осуществлять операции, такие как: сложение, вычитание, умножение и деление?

11)Как вычислить производную от полинома?

12)Как преобразовать полином в символьную строку?

13)Что представляет собой рациональная матричная производная?

14)Что представляет собой рациональная дробь?

205

f(x,a1,a2,…,am)

2.2. Решения задач аппроксимации и интерполяции функций

2.2.1.Постановка задач аппроксимации

иинтерполяции

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

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

Постановка задачи аппроксимации состоит в следующем. Пусть

функция задана таблично, то есть имеется набор узловых точек xk, где k=1,2,…,n и значения функции y(xk)в этих точках. Требуется заменить ее

некоторой приближенной функцией f(x,a1,a2,…,am), которая кроме аргумента х, зависит еще и от параметров as, где s=1,2,…,m. Задача аппроксимации состоит в том, чтобы подобрать такие значения параметров as, при которых аппроксимирующая функция f(x,a1,a2,…,am) наилучшим образом описывала бы исходную функцию. Как правило, m<<n, поэтому добиться того, чтобы функция давала точные результаты даже в узловых точках, как правило, не удается. Следовательно, должен быть выбран такой критерий близости, который смог бы обеспечить требуемую точность. В зависимости от решаемой задачи на практике используют различные методы и, соответственно, различные критерии близости. Чаще всего для аппроксимации таблично заданной функции используется метод наименьших квадратов, в котором в качестве критерия близости, аппроксимирующей и аппроксимируемой функций, используется неравенство:

206

 

n

 

 

 

(yi

f (xi ))

2

 

 

i 0

 

 

 

 

 

 

n 1

 

,

где: среднеквадратическое отклонение;допустимая погрешность;

уi– значения аппроксимируемой функции в узловых точках; f(xi) – значения аппроксимирующей функции в узловых точках; n+1 – количество узловых точек.

Задача интерполяции функции, как уже отмечалось выше, является частным случаем задачи аппроксимации. Решение задачи интерполяции требует замены таблично заданной функции (y(xk), где k=1,2,…,n) такой функцией f(x),которая в узловых точках x1,x2,…,xnпринимала бы значения заданной функции, то есть другими словами выполнялось бы основное условие интерполяции f(xk)=yk, где k=1,2,…,n. Чаще всего в качестве интерполирующей функции f(x) используется полином p(x), степень которого n-1 (на единицу меньше количества узлов интерполяции), а интерполяционные формулы [24] в зависимости от метода различаются лишь формами представления полиномов.

При большом количестве базовых точек интерполяция полиномом может оказаться малоэффективной, поэтому нередко используют интерполяцию сплайнами. Идея сплайн-интерполяции [24] состоит в разбиении диапазона интерполирования на отрезки, в пределах которых используются разные функции одного вида (чаще всего алгебраические многочлены). При этом сама функция и ее производные 1-го, 2-го и 3-го порядка во всем диапазоне интерполяции непрерывны. Существуют линейные и квадратичные сплайны, однако, наиболее распространенный и точный вариант интерполяции – интерполяция кубическими сплайнами, в результате которой мы имеем кусочно-непрерывную интерполяционную зависимость.

Очевидно, что решение задач и аппроксимации, и интерполяции функций являются крайне трудоемкими. Это связано с тем, что их точность во многом зависит от количества используемых узловых точек на отрезке и шага интерполяции. Поэтому на практике эти задачи чаще всего решаются с использованием средств математических пакетов [25, 26].

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

207

2.2.2. Решение задач аппроксимации и интерполяции функций средствами пакета Scilab

Для выполнения полиномиальной аппроксимации в системе Scilab используется функция

[a,err]=datafit(R,z,a0),

где: R– функция, с помощью которой можно вычислить разность между заданными и расчетными значениями (y-f(x,a0,a1,…,ak)) аппроксимируемой и аппроксимирующей функциями в узловых точках;

z – матрица исходных данных (первая строка – массив х, вторая строка

– массивy);

a0 – вектор начальных коэффициентов (нулевой вектор из k элементов);

a – вектор коэффициентов полинома степени k аппроксимирующей

функции (a0,a1,…,ak);

err– сумма квадратов отклонений аппроксимируемой и аппроксимирующей функции.

Функция datafitвозвращает вектор коэффициентов полинома степени k, который с наименьшей среднеквадратической погрешностью аппроксимирует таблично заданную функцию. Результатом является вектор - строка длиной k+1, содержащий коэффициенты полинома в порядке увеличения степеней. Как правило, степень полинома много меньше количества узлов (k<<n).

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

На рис. 2.2.2-1 приведен пример линейной аппроксимации таблично заданной функции. Функция R(a,z) определяет разности между исходной и аппроксимирующей функцией, а сумма квадратов отклонений возвращается через переменную err.

208

--> // Загрузка и выполнение файла-сценарияРИС2221

--> clear -->exec('РИС2221.sce', 0); err =

17.371602 a = -7.6955977 7.412379

--> y1 = poly(a', 'x', 'c') y1 =

-7.6955977 +7.412379x// Линейный полином y1

-->y1x = horner(y1, x) // Значение полинома y1 в точках х y1x =

2.0887426 2.6817329 3.4229708 4.3124562 4.9054466 5.6466845 6.3879223

7.1291602 7.9445219 8.611636 9.5011215 8.9081312 10.909474 --> plot(x, y1x, 'mx');

--> mtlb_hold('on'); --> plot(x, y, 'o');

Рис. 2.2.2-1. Линейная аппроксимация функцией datafit

Заголовок, оси и легенду!!! Лучше линией с кружочком или крестиком!

Рассмотрим пример кубической аппроксимации (рис.2.2.2-2).

209

--> // Загрузка и выполнение сценария РИС2222 кубической аппроксимации

-->

--> clear -->exec('РИС2222.sce', 0); err =

1.745866

a = [-47.407916 87.939048 -51.081064 10.199285] -->P3 = poly(a', 'x', 'c')

P3 =

-47.407916 +87.939048x -51.081064x2 +10.199285x3 // Кубический полином y3

-->y3x = horner(P3, x) // Значение полинома P3 в точках х y3x =

3.1260106 3.5747038 3.9908489 4.3587432 4.5732778 4.8619532 5.23053

5.740204 6.5368498 7.4276265 9.0321418 7.9052934 12.787137 --> plot(x, y3x, 'mx'); mtlb_hold('on'); plot(x, y, 'o');

210