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

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

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

где T – период, u– мгновенное напряжение, i– мгновенный ток.

R = 1 ом

t=2 c

exec(РИС23407.sce', 0) er =

1.339D-11 P =

1.5571783 Pt =

0.0397965

Рис.2.3.4-7. Определение мощности, выделяемая в резисторе

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

1)Какой встроенной функцией системы Scilabвычисляется производная в заданной точке?

2)Какое назначение и какой формат функции

numderivativeиспользуется.

3)Как осуществляется вычисление производной от функции, заданной аналитически?

231

4)Как формулируется постановка задачи численного интегрирования в Scilab?

5)Какая функция позволяет получить производную от полинома в явном виде?

6)Что называется, аппроксимированным дифференцированием?

7)Как осуществляется вычисление определенных интегралов в

Scilab?

8)Назначение функции inttrap(x,y)?

9)Что возвращает функция inttrap(x,y), если y(x) – матрица?

10)Можно ли использовать функцию inttrap, если узлы по оси х - не равноотстоящие?

11)Какая функция Scilab позволяет вычислить определенный интеграл с заданной точностью?

12)Какой численный метод заложен в функции integrate?

13)Какие существуют способы задания подынтегральной функции при вычислении определенного интеграла с использованием функции

integrate?

14)Как задать допустимую погрешность вычисления определенного интеграла?

15)С какой точностью производится вычисление определенного интеграла, если погрешность не задана?

232

2.4. Решение нелинейных уравнений

2.4.1. Постановка задачи решения нелинейных уравнений

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

Алгебраическими уравнениями называются уравнения, в которых значение функции f(x) представляет собой полином n-й степени (n≥2). Всякое неалгебраическое уравнение называется трансцендентным. Функция f(x) в таких уравнениях содержит хотя бы одну из следующих элементарных функций: показательную, логарифмическую, тригонометрическую или

обратную тригонометрическую.

 

 

Решением уравнения f(x)=0

является совокупность корней

Х, при

которых уравнение обращается

в тождество f(Х) 0. Однако,

точные

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

Процесс численного решения нелинейного уравнения состоит из двух этапов:

1)отделение корней уравнения (локализация каждого корня нелинейного уравнения на отдельном отрезке);

2)уточнение каждого корня на выбранном отрезке с заданной точностью.

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

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

233

строится ее график и визуально определяются отрезки, имеющие единственное пересечение с осью абсцисс ОX. Использование аналитического метода основывается на теореме о существовании и единственности корня на отрезке [24]. Согласно этой теореме надо найти такие отрезки, на концах которых функция f(x)имеет разные знаки, а первая производная непрерывна и не меняет свой знак (то есть функция монотонна).

Для уточнения корней с заданной степенью точности существуют множество классических численных методов (метод Ньютона, метод хорд,

метод итераций, метод половинного деления и многие другие, а также их модификации) [22].

Задача нахождения корня уравнения с заданной точностью ε (ε>0) считается решенной за n итераций, если найдено приближенное значение xn, которое отличается от точного значения корня x* не более чем на значение :

|x*-xn|≤ε.

Рассмотрим средства Scilab, используемые для решения нелинейных уравнений.

2.4.2. Решение нелинейных уравнений средствами Scilab

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

Рассмотрим этап отделения корней средствами Scilab на примере решения нелинейного уравнения 2x–4x=0.

Отделение корня нелинейного уравнения целесообразно вначале произвести графически. Из графика функции f(x)=2x–4x(рис. 2.4.2-1) следует, что уравнение имеет два действительных корня, принадлежащих отрезкам

[0;1] и [3.5;4.5].

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

234

--> -->clear

--> exec('РИС2421.sce', 0);

Рис.2.4.2-1. Графическое отделение корней нелинейного уравнения 2x–4x=0

Проверим на выбранных отрезках выполнение аналитических условий существования и единственности корня (рис.2.4.2-2).

-->//Аналитическое отделение корня нелинейного уравнения

-->//Загрузка сценария РИС2422 и выполнение функций f(x) и f1(x)

-->

--> clear

 

 

 

 

 

--> a = 0; b = 5; h = 0.5;

 

 

 

 

--> exec('РИС2422.sce', 0);

 

 

 

 

-->x = a : h : b;

//

Вектор аргумент x

 

-->fx = f(x);

f1x = f1(x);

//

Вектор функций f и 1-й производной f1

 

--> disp([x; fx; f1x]', ["

x", "

fx", "

f1x "]);

 

! x

fx

 

f1x

!

 

 

 

 

 

 

 

 

 

 

 

 

 

235

0.

1.

-3.3068528194400546

0.5

-0.5857864376269049

-3.01974185653145270

1.

-2.

-2.61370563888010920

1.5

-3.17157287525380970

-2.03948371306290530

2.

-4.

-1.22741127776021890

2.5

-4.34314575050761940

-0.0789674261258111

3.

-4.

1.5451774444795623

3.5

-2.68629150101523880

3.84206514774837780

4.

0.

7.09035488895912460

4.5

4.62741699796952230

11.6841302954967560

5.

12.

18.1807097779182490

Рис. 2.4.2-2. Отделение корня нелинейного уравнения

Из полученной таблицы, содержащей значения аргумента, функции и производной, следует, что условия существования и единственности корня выполняются на отрезках [0;0.5] и [3.5;4] (на концах каждого из этих отрезков функция имеет противоположные знаки, а ее производная на каждом из этих отрезков знакопостоянна).

Для решения нелинейных уравнений в среде Scilab используется функция fsolve, предназначенная для нахождения вещественных корней уравнений вида f(х)=0, использующая модификацию гибридного метода Пауэлла [13]. Хотя здесь и в дальнейшем fsolveназываем функцией, следует понимать, что fsolveпо своей сути является решателем, объединяющим под этим именем несколько алгоритмов.

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

Функция fsolveимеет следующие основные форматы:

fsolve(x0,f)

[х,fx,id]=fsolve(x0,f,fp,er2),

где: х0 начальное приближение к корню;

fуказатель на внешнюю функцию f(x)уравнения f(х)=0;

fp– указатель на внешнею функцию fp(x) (необязательный параметр), представляющую производную от функции f(x) (при решении систем нелинейных уравнений fp– это Якобиан [13]);

er2 – относительная погрешность (необязательный параметр) по умолчанию принимает значение 1.d-10, и определяет условие проверки сходимости;

236

х и fxвыходные параметры функции fsolveзначение корня уравнения, вычисленное с заданной относительной погрешностью er2 и значение функции в точке корня;

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

Индикатор id может иметь следующие значения:

0– неверные входные параметры;

1– найдены значения корней с заданной точностью tol(или с погрешностью, принятой по умолчанию);

2– допустимое количество вызовов fдостигнуто;

3er2 слишком мало, поэтому дальнейшие приближения невозможны;

4– итерации не дают результата (корней нет).

При использовании первого формата fsolveпроисходит вычисление и вывод корня уравнения, как значение переменной ans, а при использовании второгозначение корняx и значение функции в точке корня fx.

На рис.2.4.2-3 приведен пример уточнения корня нелинейного уравнения на отрезке [0;1] с использованием функции fsolve, где в качестве начального приближения к корню выбрано значение 0.

--> // Загрузка сценария РИС2423, содержащего описание функции f(x) --> // Уточнение корня нелинейного уравнения на отрезке[0;1]

-->exec('РИС2423.sce', 0);

 

 

 

-->

 

 

 

 

 

--> // Первый способ

 

 

 

 

-->fx = f(x);

 

 

 

 

--> [x, fx] = fsolve(0, f)

// Начальное приближение х0 = 0

-->disp([x, fx], ["

x

", "

fx

"]);

!

xfx !

 

 

 

 

 

0.30990693238069056

0.

 

 

 

-->

 

 

 

 

 

--> // Второй способ

 

 

 

 

-->x = fsolve(0, f);

fx = f(x);

 

 

-->disp([x, fx], ["

x

", "

fx

"]);

!

x

fx!

 

 

 

 

0.30990693238069056

0.

 

 

 

Рис. 2.4.2-3. Уточнение корня уравнения с использованием функции fsolve

237

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

В следующем примере показано решение нелинейного уравнения ex/5–2(x-1)2=0, иллюстрирующее возможность использования функции fsolve для решения НУ, имеющего несколько корней, при условии, что для каждого из коней задается свое начальное приближение.

Предположим, что предварительно проведено графическое отделение всех корней уравнения ex/5–2(x-1)2=0 (рис. 2.4.2-4), из которого следует, что уравнение имеет три корня, принадлежащие соответственно следующим

отрезкам: x1€[0.5;1], x2€[1.5;2], х3€[5;5.5].

-->// Загрузка сценария РИС2424.sce, содержащего описание функции f(x), -->// отображение графика и

--> // выполнение функции fsolve с различными начальными приближениями

--> -->clear

-->exec('РИС2425.sce', 0);

--> // 1-ый этап: Отделение корней графическим способом:

-->x = 0 : 0.2 : 5.5;

-->y = yf(x); // Левая часть НУ

-->y1 =x * 0; // y1 используется для выделения оси Ох

--> plot(x, y, x, y1)

--> xtitle('', 'X', 'Y(X)'); -->xgrid();

238

--> // Из графика видно, что уравнение имеет три корня,

--> // принадлежащие отрезкам: x1€[0.5;1], x2€[1.5;2], х3€[5;5.5]

-->//Выбор начальных приближений: x1 = 0.5, x2 = 2, x3 = 5

--> --> // 2-ый этап: Уточнение корней:

--> // 1-й способ: вычисление каждого корня уравнения отдельным --> // обращением к функции fsolve

-->xx(1) = fsolve(0.5, yf); xx(2) = fsolve(2, yf); xx(3) = fsolve(5, yf); -->yy = yf(xx); xy = [xx'; yy']'

xy =

0.5778406 -3.220D-15

1.7638701 1.554D-15

5.1476865 0. -->

--> // 2-й способ: вычисление корней уравнения с использованием --> // вектора начальных приближений

--> [xx,yy] = fsolve([0.5; 2;5], yf); -->xy = [xx'; yy']'

xy =

0.5778406 -3.220D-15

1.7638701 1.554D-15

5.1476865 0.

Рис. 2.4.2-4. Отделение корней нелинейного уравнения графическим методом и уточнение его корней с использованием функции fsolve

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

Приведем еще один пример использования функции fsolve, содержащей третий (необязательный) выходной параметр индикатор (рис.2.4.2-5). Для этого используем нелинейное уравнение sin(x)+2=0, для которого заранее известно, что оно не имеет корней. В результате выполнения значение индикатора приняло значение 4, что говорит о том, что корень не найден, а в качестве результата выведено значение переменной, обеспечивающее максимальное приближение к корню.

239

--> // Загрузка сценария РИС2425, содержащего описание функции f(x) --> // Уточнение корня нелинейного уравнения и --> // использование индикатора для проверки наличия корня

-->

-->exec('РИС2425.sce', 0); -->

--> [xx, yy, id] = fsolve(0, fd) id =

4. yy =

1.0000001 xx = -1.5703125

Рис. 2.4.2-5. Решение уравнения не имеющего корней

Функция fsolve может быть использована для решения как

трансцендентных, так и алгебраических уравнений. Правая часть алгебраических уравнений представляет собой полином вида P(x) a1xn a2xn 1 ... anx an 1 . Однако, для вычисления корней полинома, как уже говорилось в п.2.1.1, чаще используется функция roots, так как эта функция вычисляет все корни, действительные и комплексные. Перед использованием roots создается список коэффициентов (даже нулевых), затем выполняется функция poly(a,'x','с'). Решим в качестве примера одно и тоже алгебраическое уравнение x5-x3+1=0 с использованием функций fsolve и roots, построив предварительно график функции левой части уравнения(рис.

2 4.2-6).

--> deff('[f] = y(x)', 'f = x^5 - x^3 + 1') --> x = -2:0.1:2; f = y(x);

--> plot(x, f) -->xtitle('X','Y'); -->xgrid();

240