Реферат по имитационному моделированию на тему "Эффективные алгоритмы численного решения алгебраических уравнений, расчета производных, решение систем линейных алгебраических и дифференциальных уравнений в Scilab."
1187795
столько раз учителя, ученики и родители
посетили официальный сайт проекта «Инфоурок»
за прошедшие 24 часа
Добавить материал и получить бесплатное
свидетельство о публикации
в СМИ №ФС77-60625 от 20.01.2015
Инфоурок Информатика Научные работыРеферат по имитационному моделированию на тему "Эффективные алгоритмы численного решения алгебраических уравнений, расчета производных, решение систем линейных алгебраических и дифференциальных уравнений в Scilab."

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

библиотека
материалов

ФБГОУВПО «Мордовский Государственный педагогический институт им. М.Е.Евсевьева»




Физико-математический факультет

Кафедра информатики и вычислительной техники


РЕФЕРАТ

Эффективные алгоритмы численного решения

алгебраических уравнений, расчета производных, решение

систем линейных алгебраических и дифференциальных

уравнений в Scilab.








Выполнил: студент группы МДМ-115

физико-математического факультета

Ерина Оксана

Проверила: Кормилицына Т.В.













Саранск 2017

Введение

Scilab (/ˈsaɪlæb/) — пакет прикладных математических программ, предоставляющий открытое окружение для инженерных (технических) и научных расчётов. Это самая полная общедоступная альтернатива MATLAB.

С 1994 года распространяется вместе с исходным кодом через Интернет. В 2003 году для поддержки Scilab был создан консорциум Scilab Consortium. Сейчас в него входят 25 участников, в том числе MandrivaINRIA и ENPC (Франция).

Scilab содержит сотни математических функций, и есть возможность добавления новых, написанных на различных языках (C, C++, Fortran и т. д.). Также имеются разнообразные структуры данных (списки, полиномы, рациональные функции, линейные системы), интерпретатор и язык высокого уровня.

Scilab был спроектирован как открытая система, и пользователи могут добавлять в него свои типы данных и операции путём перегрузки.

В системе доступно множество инструментов:

  • 2D и 3D графики, анимация

  • Линейная алгебра, разреженные матрицы (sparse matrices)

  • Полиномиальные и рациональные функции

  • Интерполяция, аппроксимация

  • Симуляция: решение ОДУ и ДУ

  • Scicos: гибрид системы моделирования динамических систем и симуляции

  • Дифференциальные и не дифференциальные оптимизации

  • Обработка сигналов

  • Параллельная работа

  • Статистика

  • Работа с компьютерной алгеброй

  • Интерфейс к Fortran, Tcl/TkCC++JavaLabVIEW

Scilab имеет схожий с MATLAB язык программирования. В состав пакета входит утилита, позволяющая конвертировать документы Matlab в Scilab.

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

Для численных расчётов используются библиотеки LapackLINPACKODEPACK , Atlas и другие.

В состав пакета также входит Scicos — инструмент для редактирования блочных диаграмм и симуляции (аналог simulink в пакете MATLAB). Имеется возможность совместной работы Scilab с программой LabVIEW.

Программа доступна для различных операционных систем, включая LinuxMicrosoft Windows и Mac OS X. Возможности Scilab могут быть расширены внешними программами и модулями, написанными на разных языках программирования. Программа имеет открытый исходный код, что позволяет как свободное коммерческое использование и распространение неизменённых версий, так и некоммерческое распространение измененных версий, которые должны включать в себя исходный код. Для коммерческого распространения измёненных версий необходимо согласование с INRIA.

Начиная с версии 5.0 программа распространяется под совместимой с GNU GPL 2 лицензией CeCILL.

Отличия от некоторых коммерческих программ:

  • Бесплатность.

  • Свободность (с версии 5.0).

  • Маленький размер — дистрибутив 4 версии занимал менее 20 МБ против более чем двухгигабайтного пакета MATLAB. Инсталлятор 5 версии (5.4.1) увеличился в объёме до 117 МБ.

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























1 . Решение алгебраических уравнений.



Любое уравнение P(x) = 0, где P(x) — это многочлен, отличный от нулевого, называется алгебраическим уравнением или полиномом. Всякое алгебраическое уравнение относительно x можно записать в виде a0x n+a1x n−1+· · ·+an−1x+an = 0, где a0 6= 0, n > 1 и ai — коэффициенты алгебраического уравнения n–й степени. Например, линейное уравнение это алгебраическое уравнение первой степени, квадратное — второй, кубическое — третьей и так далее. Решение алгебраического уравнения в Scilab состоит из двух этапов. Необхо- димо задать полином P(x) с помощью функции poly, а затем найти его корни, применив функцию roots. Итак, определение полиномов в Scilab осуществляет функция poly(a, "x ["fl"]),

Любое уравнение P(x) = 0, где P(x) — это многочлен, отличный от нулевого, называется алгебраическим уравнением или полиномом. Всякое алгебраическое уравнение относительно x можно записать в виде a0x n+a1x n−1+· · ·+an−1x+an = 0, где a0 6= 0, n > 1 и ai — коэффициенты алгебраического уравнения n–й степени. Например, линейное уравнение это алгебраическое уравнение первой степени, квадратное — второй, кубическое — третьей и так далее. Решение алгебраического уравнения в Scilab состоит из двух этапов. Необхо- димо задать полином P(x) с помощью функции poly, а затем найти его корни, применив функцию roots. Итак, определение полиномов в Scilab осуществляет функция

параметра a воспринимаются функцией как корни, для которых необходимо рас- считать коэффициенты соответствующего полинома. По умолчанию fl=r. Следующий пример отражает создание полинома p, имеющего в качестве корня тройку, и полинома f с коэффициентом 3.

-->p=poly(3,’x’,’r’);

-->f=poly(3,’x’,’c’);

-->p p = - 3 + x

-->f

f = 3

Далее приведены примеры создания более сложных полиномов.

-->//Полином с корнями 1, 0 и 2

-->poly([1 0 2],’x’)

ans = 2 3 2x - 3x + x



-->//Полином с коэффициентами 1, 0 и 2

-->poly([1 0 2],’x’,’c’)

ans = 2 1 + 2x



Функция roots(p)

предназначена для решения алгебраического уравнения. Здесь p — это полином, созданный функцией poly и представляющий собой левую часть уравнения P(x) = 0.

Решим несколько алгебраических уравнений.

Найти корни полинома 2x 4 − 8x 3 + 8x 2 − 1 = 0.

Для решения этой задачи необходимо задать полином p. Сделаем это при по- мощи функции poly, предварительно определив вектор коэффициентов V . Обра- тите внимание, что в уравнении отсутствует переменная x в первой степени, это означает, что соответствующий коэффициент равен нулю:

-->V=[-1 0 8 -8 2];

-->p=poly(V,’x’,’c’)

p = 2 3 4 1 + 8x - 8x + 2x

Теперь найдем корни полинома:

-->X=roots(p)

X = ! 0.4588039 !

! - 0.3065630 !

! 1.5411961 !

! 2.306563 !













2. Вычисление производной функции в точке. Приближенное вычисление частных производных.



Универсальной командой дифференцирования является команда

g=numdiff(fun,x)

здесь fun — имя функции, задающей выражение для дифференцирования. Функция должна быть задана в виде y=fun(x [, p1, p2,..., pn]),

где x — переменная, по которой будет проводится дифференцирование. Если параметры p1, p2, . . . , pn присутствуют в описании функции, то они должны быть обязательно определены при вызове, например, так:

g=numdiff(list(fun,p1,p2,...pn),x).

Результат работы функции — матрица gij = dfi /dxj .

Рассмотрим несколько примеров.

  • Вычислить f ′ (1), если f(x) = (x + 2)3 + 5x

-->function f=my(x), f=(x+2)^3+5*x, endfunction;

-->numdiff(my,1)

ans = 32.

-->x=1;3*(x+2)^2+5

ans = 32.

  • Задана функция многих переменных y(x1,x2,x3) = x1x x3 2 +x 2 1x3. Вычислить dy/dx1 , dy/dx2 , dy/dx3 в точке (1, 2, 3).

-->function [Y]=f(X), Y=X(1)*X(2)^X(3)+X(1)^2*X(3),endfunction

-->X=[1 2 3]; -->numdiff(f,X)

ans = 14. 12. 6.5451775

-->//--------------------------------



-->function [Y]=f1(X),

Y(1)=X(2)^X(3)+2*X(1)*X(3),

Y(2)=X(1)*X(3)*X(2)^(X(3)-1),

Y(3)=x(1)*X(2)^X(3)*log(X(2))+X(1)^2, endfunction –

->f1(X) ans = 14.

12.

6.5451774



























































3. Решение систем линейных алгебраических уравнений.



Система m уравнений с n неизвестными вида:

a11x1 + a12x2 + · · · + a1nxn = b1 ,

a21x1 + a22x2 + · · · + a2nxn = b2,

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

am1x1 + am2x2 + · · · + amnxn = bm

называется системой линейных алгебраических уравнений (СЛАУ), причем xj — неизвестные, aij — коэффициенты при неизвестных, bi — свободные коэффициенты (i = 1 ... m, j = 1 ... n). Система из m линейных уравнений с n неизвестными может быть описана при помощи матриц:

A · x = b, где x — вектор неизвестных, A — матрица коэффициентов при неизвестных или матрица системы, b — вектор свободных членов системы или вектор правых частей. Совокупность всех решений системы (x1,x2,... ,xn) называется множеством решений или просто решением системы.

  • Решить СЛАУ при помощи правила Крамера:

2x1 + x2 − 5x3 + x4 = 8 ,

x1 − 3x2 − 6x4 = 9 ,

2x2 − x3 + 2x4 = −5 ,

x1 + 4x2 − 7x3 + 6x4 = 0 .

Правило Крамера заключается в следующем. Если определитель ∆ = det A матрицы системы из n уравнений с n неизвестными A · x = b отличен от нуля, то система имеет единственное решение x1,x2,... ,xn, определяемое по формулам Крамера: xi = ∆i/∆, где ∆i — определитель матрицы, полученной из матрицы системы A заменой i-го столбца столбцом свободных членов b. Текст файла- сценария с решением задачи по формулам Крамера: 54

//Матрица коэффициентов:

A=[2 1 -5 1;1 -3 0 -6;0 2 -1 2;1 4 -7 6];

b=[8;9;-5;0]; //Вектор свободных коэффициентов

A1=A;A1(:,1)=b; //Первая вспомогательная матрица

A2=A;A2(:,2)=b; //Вторая вспомогательная матрица

A3=A;A3(:,3)=b; //Третья вспомогательная матрица

A4=A;A4(:,4)=b; //Четвертая вспомогательная матрица

D=det(A); //Главный определитель

//Определители вспомогательных матриц:

d(1)=det(A1);

d(2)=det(A2);

d(3)=det(A3);

d(4)=det(A4);

x=d/D //Вектор неизвестных

P=A*x-b //Проверка

  • Решим систему из двух уравнений вида A*x=b

Задаем матрицу коэффициентов:

-->A=[1,2;3,4]

A =

1. 2.

3. 4.

Задаем вектор свободных коэффициентов:

-->b=[2;1]

b =

2.

1.

Определяем детерминант матрицы:

-->det(A)

ans =

- 2

Так как определитель матрицы отличен от нуля, решение СЛАУ существует.

Решение СЛАУ методом обратной матрицы

-->x=A\b

x =

- 3.

2.5

Запись A\b соответствует математической операции A-1b. Записи x=A\b эквивалентна запись x=inv(A)*b

Эту систему уравнений также можно решить с помощью специальной функции linsolve (эта функция решает уравнение вида Ax+b=0, поэтому поменяем знак вектора b)

x=linsolve(A,-b)

x =

- 3.

2.5

и получили ответ: x0= -3; x1= 2.5;

Проверяем

A*x-b

ans =

1.0D-14 *

0.2220446

0.3552714

результирующий вектор близок к нулю, то есть система решена верно.

























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

Дифференциальным уравнением n-го порядка называется соотношение вида

H(t,x,x′ ,x′′,...,x(n) ) = 0

Решением дифференциального уравнения является функция x(t), которая обращает уравнение в тождество. Системой дифференциальных уравнений n-го порядка называется система вида:

x ′ 1 = f1(t,x1,x2,... ,xn)

x ′ 2 = f2(t,x1,x2,... ,xn)

· · ·

x ′ n = fn(t,x1,x2,... ,xn)

Решение системы — вектор, который обращает уравнения системы в тождества:

x(t) =

x1(t)

x2(t)

. . .

xn(t)

  Дифференциальные уравнения и системы имеют бесконечное множество ре шений, которые отличаются друг от друга константами. Для однозначного определения решения требуется задать дополнительные начальные или граничные условия. Количество таких условий должно совпадать с порядком дифференциального уравнения или системы. В зависимости от вида дополнительных условий в дифференциальных уравнениях различают: задачу Коши — все дополнительные условия заданы в одной (чаще начальной) точке интервала; краевую зада- чу — дополнительные условия указаны на границах интервала. Большое количество уравнений может быть решено точно. Однако есть уравнения, а особенно системы уравнений, для которых точное решение записать нельзя. Такие уравнения и системы решают при помощи численных методов. Численные методы также применяют в том случае, если для уравнений с из- вестным аналитическим решением требуется найти числовое значение при опре- деленных исходных данных. Для решения дифференциальных уравнений и систем в Scilab предусмотрена функция [y,w,iw]=ode([type],y0,t0,t [,rtol [,atol]],f [,jac] [,w,iw])

для которой обязательными входными параметрами являются: y0 — вектор на- чальных условий; t0 — начальная точка интервала интегрирования; t — коорди- наты узлов сетки, в которых происходит поиск решения; f — внешняя функция, определяющая правую часть уравнения или системы уравнений (8.2); y — вектор решений . Таким образом, для того чтобы решить обыкновенное дифференциаль- ное уравнение вида dy/dt = f(t,y), y(t0) = y0, необходимо вызвать функцию y=ode(y0,t0,t,f). Рассмотрим необязательные параметры функции ode: type — параметр, с помощью которого можно выбрать метод решения или тип решаемой задачи, указав одну из строк: adams — применяют при решении дифференциальных уравнений или систем методом прогноза-коррекции Адамса; stiff — указывают при решении жестких задач; rk — используют при решении дифференциальных уравнений или систем методом Рунге — Кутта четвертого порядка; rkf — указывают при выборе пятиэтапного метода Рунге — Кутта четвертого порядка; fix — тот же метод Рунге — Кутта, но с фиксированным шагом; rtol, atol — относительная и абсолютная погрешности вычислений, вектор, раз- мерность которого совпадает с размерностью вектора y, по умолчанию rtol=0.00001, atol=0.0000001, при использовании параметров rkf и fix - rtol=0.001, atol=0.0001; jac — матрица, представляющая собой якобиан правой части жесткой системы дифференциальных уравнений, задают матрицу в виде внешней функции вида J=jak(t,y); w, iw — векторы, предназначенные для сохранения информации о параметрах интегрирования, которые применяют для того, чтобы последующие вычис- ления выполнялись с теми же параметрами.

  • Решить задачу Коши x ′ = cos(xy), y ′ = sin(x + ty), x(0) = 0, y(0) = 0. на интервале [0; 10].



//Функция, описывающая систему дифференциальных уравнений

Function

dy=syst(t,y)

dy=zeros(2,1);

dy(1)=cos(y(1)*y(2));

dy(2)=sin(y(1)+y(2)*t);

endfunction

//Решение системы дифференциальных уравнений x0=[0;0];t0=0;t=0:*0.1*:10;y=ode(x0,t0,t,syst);

//Формирование графического решения

plot(t,y)

hello_html_m31ce6bed.png















































Заключение



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

Scilab — мощный открытый пакет прикладных математических программ (система компьютерной математики) для инженерных и научных расчётов.

Система позволяет

решать задачи линейной алгебры;

решать нелинейные уравнения и системы;

решать задачи оптимизации;

дифференцировать и интегрировать;

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

обрабатывать экспериментальные данные (интерполяция и аппроксимация, метод наименьших квадратов);

создавать различные виды графиков и поверхностей.























Список используемой литературы



1. Ярушкина Н.Г., Ястребова Н.Н., Чекина А.В. Нечеткие интеллектуальные системы в среде SciLab

2. М.И.Павлова. Руководство по работе с пакетом SCILAB

3.Е.Р.Алексеев, О.В.Чеснокова. Scilab - теория и практика на русском языке

4.Е.Р.Алексеев, О.В. Чеснокова, Е.А. Рудченко. Scilab. Решение инженерных и математических задач. М., ALT Linux, Бином, 2008.

5.Константин Носов. Scilab: серьезная математика, доступная всем.

6.И.С. Тропин, О.И. Михайлова, А.В. Михайлов. Численные и технические расчеты в среде Scilab. (ПО для решения задач численных и технических вычислений). М., 2008.

Курс профессиональной переподготовки
Учитель информатики
Курс профессиональной переподготовки
Учитель математики и информатики
Найдите материал к любому уроку,
указав свой предмет (категорию), класс, учебник и тему:
также Вы можете выбрать тип материала:
Общая информация
Похожие материалы

Вам будут интересны эти курсы:

Курс повышения квалификации «Табличный процессор MS Excel в профессиональной деятельности учителя математики»
Курс повышения квалификации «Информационные технологии в деятельности учителя физики»
Курс повышения квалификации «Методика преподавания информатики в начальных классах»
Курс повышения квалификации «Внедрение системы компьютерной математики в процесс обучения математике в старших классах в рамках реализации ФГОС»
Курс повышения квалификации «Сетевые и дистанционные (электронные) формы обучения в условиях реализации ФГОС по ТОП-50»
Курс повышения квалификации «Использование компьютерных технологий в процессе обучения в условиях реализации ФГОС»
Курс повышения квалификации «Специфика преподавания информатики в начальных классах с учетом ФГОС НОО»
Курс повышения квалификации «Применение MS Word, Excel в финансовых расчетах»
Курс повышения квалификации «Введение в программирование на языке С (СИ)»
Курс повышения квалификации «Современные тенденции цифровизации образования»
Курс повышения квалификации «Специфика преподавания дисциплины «Информационные технологии» в условиях реализации ФГОС СПО по ТОП-50»
Курс повышения квалификации «Применение интерактивных образовательных платформ на примере платформы Moodle»
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.