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

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

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

--> // Решение алгебраического уравнения с помощью функции fsolve

--> X = fsolve(-1.5, y) X =

-1.2365057

-->

--> // Решение алгебраического уравнения с помощью функции roots

-->Х = roots(poly([1 0 0 -1 0 1], 'x', 'c'))

Х=

-1.2365057

0.9590477 + 0.428366i

0.9590477 - 0.428366i -0.3407949 + 0.7854231i -0.3407949 - 0.7854231i

Рис. 2.4.2-6. Уточнение корней уравнения с использованием

функций fsolveи roots

Из графика (рис. 2.4.2-6) видно, что уравнение имеет один действительный корень. Этот корень и был найден функцией fsolve. Решение этого же уравнения функцией roots показало, что кроме вещественного корня уравнение имеет еще несколько мнимых корней. Именно поэтому для вычисления всех корней полинома целесообразнее использовать функцию

roots.

Функция fsolve может решать также и системы нелинейных уравнений от двух переменных. Рассмотрим следующий пример:решить систему нелинейных уравнений

 

 

 

 

 

 

x1

 

2x1 x2

e

0;

 

 

x

 

2x

 

e x2

0.

 

1

2

 

 

 

 

 

 

Решениепроведем при начальных значениях неизвестных x0=[-5,5].

241

Создадим sce-файл для вычисления значений F(x), в котором левые части уравнений системы представлены в виде элементов вектора, а начальные приближения к неизвестным x и обращение к функции fsolve содержатся в том же сценарии, записанном в файле РИС2427.sce (рис.2.4.2-7).

-->// Решение системы уравненийфункцией fsolve -->// Загрузка и выполнение сценария РИС2429.sce

-->

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

x(1)=0.567143 x(2)=0.567143 fun(1)=0.000000 fun(2)=0.000000 id=1

Рис. 2.4.2-7. Решение системы нелинейных уравнений функцией fsolve

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

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

1)Что является нелинейным уравнением?

2)Этапы численного решения нелинейных уравнений?

3)Как осуществляется графическое отделение корней нелинейного уравнения средствами Scilab?

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

5)Какие основные идеи заложены в методе Пауэлла для нахождения корней нелинейных уравнений?

6)Какие имеются способы задания нелинейных уравнений при их решении с использованием функции fsolve?

242

7)Каково назначение и формат функции fsolve?

8)Каково назначение и формат функции poly?

9)Каково назначение и формат функции roots?

10)Что является решением функций fsolve и roots?

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

12)Какие алгоритмы используются в функции roots?

13)Каким образом необходимо задать исходные данные для решения систем нелинейных уравнений?

243

2.5. Решение обыкновенных дифференциальных уравнений

2.5.1. Постановка задачи решения обыкновенных дифференциальных уравнений

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

Обыкновенным дифференциальным уравнением (ОДУ) является уравнение, которое содержит независимую переменную, зависимую переменную и производные зависимой переменной. Таким образом, ОДУ 1-го порядка имеет следующий вид:

dy

f(x, y),

dx

 

где xи y – независимая и зависимая переменные, соответственно.

Такое ОДУ первого порядка представлено в виде, разрешенном относительно производной y'=f(x,y).

Для решения ОДУ первого порядка, в соответствии с задачей Коши, должны быть заданы начальные условия его решения – y(x0)=y0. Тогда решением ОДУ является функция y=f(x), которая будучи подставленной в исходное уравнение, обратит его в тождество, при этом будут выполняться и начальные условия.

Задача Коши для решения ОДУ n-го порядка

(n)

 

(n 1)

y

f(x,y,y ,...y

)

формулируется аналогично, при этом в качестве начальных условий должны

быть заданы

y(x0) y0,

 

 

 

 

 

 

 

(n 1)

(n 1)

 

 

y(x0)

y0,...

y

(x0)

y0 .

 

 

При

 

 

его

n 2

решении

в

выполняется

ряд

подстановок

(y

1

1

 

2

,...

 

y

n 1

)

,

результате которых ОДУ

n-го порядка

y

, y

y

y

 

 

 

 

 

 

 

 

заменяется системой из n обыкновенных дифференциальных уравнений 1-го порядка:

244

y

 

y

;

 

 

 

 

 

 

1

 

 

 

 

 

y

 

y

;

 

 

 

 

 

 

 

1

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

............

 

 

 

 

 

 

 

 

 

 

 

 

y

1

 

f(x, y, y

,..., y

n 1

).

 

n

 

 

1

 

 

Результатом решения ОДУ численными методами является таблица значений y = y(x) на некотором заданном множестве значений аргументах. Поэтому при постановке задачи численного решения ОДУ наряду с начальными условиями x0, y0необходимо задать область решения – отрезок интегрирования [a;b], где a=x0, и шаг изменения аргумента – h (шаг интегрирования).

Для получения численного решения ОДУ используются различные методы Рунге-Кутты [24],которые различаются порядком. Чем выше порядок метода, тем точнее решение, полученное при равном шаге интегрирования.

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

2.5.2. Решение обыкновенных дифференциальных уравнений средствами Scilab

Для решения ОДУ и системы ОДУ 1-го порядка в Scilab предусмотрена функция ode, имеющая форматы:

[y]=ode(y0,t0,t,f),

[y,w,iw]=ode(type,y0,t0,f,adams,stiff,rk,rkf,fix,rtol,adol,jac,w,iw),

которые содержат обязательные и необязательные параметры.

Первый формат функцииode содержит только обязательные параметры, к которым относятся:

y0 – вектор начальных условий;

t0 – начальная точка интервала интегрирования;

t – координаты узлов сетки, в которых происходит поиск решения; f– имя внешней функция, определяющей правую часть уравнения или системы уравнений;

y – вектор решений (выходной параметр).

245

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

type– строка, указывающая тип используемой программы решения,

может принимать значения: "adams", "stiff", "rk", "rkf", "fix",

"discrete"или "root";

adams– применяют при решении дифференциальных уравнений или систем методом прогноза и коррекции Адамса;

stiff– указывают при решении жестких задач;

rk– используют при решении дифференциальных уравнений или систем методом Рунге-Кутты четвертого порядка;

rkf– указывают при выборе пятиэтапного метода Рунге-Кутты четвертого порядка;

fix– тот же метод Рунге-Кутты, но с фиксированным шагом;

rtol, atoll– относительная и абсолютная погрешности вычислений, соответственно, по умолчанию rtol=0.00001, atol=0.0000001 (при

использовании параметров rkfи fixrtol=0.001, atol=0.0001);

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

вида j=jak(t,y);

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

Описание этого формата достаточно подробно рассмотрено в справочной системе Scilab, где и приведены примеры его использования для различных типов ОДУ [13].

Остановимся на использовании первого формата функции ode, для чего рассмотрим решение следующего примера: найти решение ОДУ y'=-sin(x*y) на отрезке [0;5]cшагом 0.5 при начальных условиях y(0)=1.5.

Решение ОДУ, полученное с применением функции ode и график полученного решения, представлены на рис.2.5.2-1.

246

--> // Решение ОДУy'=-sin(x*y)

--> y0 = 1.5; t0 = 0; t = 0:0.5:5; // Начальные условия

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

--> exec('РИС2521.sce', 0); ans =

0.1.5

0.51.3302706

1.0.9566472

1.50.5574285

2.0.2477507

2.50.0822207

3.0.0208664

3.50.0041103

4.0.0006303

4.50.0000753

5.0.000007

Рис. 2.5.2-1. Решение ОДУ с использованием функции ode

Для решения системы обыкновенных дифференциальных уравнений

в Scilab предназначена функция:

y=ode(x0,t0,t,sys),

где х0 – вектор начальных условий ОДУ; t0 – начальная точка интегрирования;

t– вектор значений независимой переменной;

sys– имя функции, в которой исходя из вектора значенийtвычисляется матрица решенийy;

y– матрица решений (выходной параметр), первый столбец которой y(1)– значение функции y(x), а второй - y(2)значение производной

y'(x).

247

Решение системы ОДУ формируется в матрице y, и выводится на экран в виде таблицы

В качестве примера рассмотрим решение системы ОДУ:

x cos(x * y);

y sin(x) t * y,

c начальными условиями x(0)=0, y(0)=0 на отрезке [0;10] и шагом 1.

Решение системы ОДУ в Scilab начинается с создания функции sys, описывающей систему (рис.2.5.2-2). После того, как заданы начальные условия ОДУ, производится обращение в функции ode, в результате которого формируется матрица решения y. Решение системы выводится в виде таблицы и графика. (Шапка таблицы и легенда для графика!)

--> // Решение системы ОДУ --> // Загрузка сценария РИС2522 и его выполнение

-->clear

--> // Начальные условия

-->x0 = [0; 0]; t0 = 0; t = 0:1:10; -->

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

ans

=

 

0.

0.

0.

1.

0.9802401

0.533358

2.

1.4096497

0.9693978

3.

1.7429464

0.6024417

4.

2.4027415

0.2586293

5.

3.3312751

0.005761

6.4.2504071 -0.1650347

7. 4.826261 -0.2358589

8.5.1581587 -0.2515654

9.5.3963437 -0.2509281

10.5.5981318 -0.2461951

248

Рис.2.5.2-2. Решение системы ОДУ

Рассмотрим задачу построения временной зависимости тока i(t) в RC-

цепи.

Построить временную зависимость тока i(t) в неразветвленной RC- цепи (рис. 3.3-4), если цепь включается на постоянное напряжение при нулевых начальных условиях.

249

Неразветвленная RC-цепь

Дано:

E=1 В – ЭДС источника; R=1 Ом – сопротивление; С=1 Ф – емкость;

t=[0, 6τ] c – временной интервал.

Рис.2.5.2-3. Построить временную зависимость тока i(t) в RC-цепи

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

250