Решение систем дифференциальных уравнений в octave

Моделирование динамических систем: введение в GNU Octave

Жили-были умные, но очень жадные люди, которые написали замечательную программу Matlab. Умные они были потому, что программа вышла хорошей, а жадными, потому что очень любили деньги. Так любили, что брали их за свой Matlab не только с дядек серьезных, матлабом деньги зарабатывающих, а и с бедных студентов тоже, которым порой и сухую корочку хлеба купить не за что было. И кончилась бы сказочка скоро и невесело, если бы мир был не без добрых и умных людей, написавших похожие на матлаб программы, хоть худо-бедно работающие, да для всех желающих бесплатные. И с открытыми исходными текстами. Так что сами бедные студенты стали те программы дописывать, и работать они лучше и лучше стали с каждым годом. И стали тогда все жить-поживать, да добра наживать.

Решение систем дифференциальных уравнений в octave

Содержание
  1. Введение
  2. 1. Что такое Octave и где его взять
  3. 2. Нормальная форма Коши
  4. 3. Строим график
  5. Заключение
  6. IT Novella
  7. Возможности СКМ Octave
  8. Система компьютерной математики Octave
  9. Системы компьютерной математики
  10. Простейшие операции
  11. Рассмотрим пример
  12. Элементарные математические функции
  13. Экспоненциальные функции
  14. Условный оператор
  15. Матрично-векторные вычисления
  16. Создание матриц
  17. Возможности СКМ Octave
  18. Посов И.А.
  19. just a site
  20. Практические Задания
  21. Требования к оформлению заданий
  22. Создание матриц octave-matrices понедельник 7 октября 23:59
  23. Индексирование в Ocatave octave-indexing понедельник 14 октября 23:59
  24. Векторизация octave-vectorization четверг 24 октября 23:59
  25. Графика в Ocatave octave-graphics четверг 31 октября 23:59
  26. Решение уравнений octave-equations четверг 6 ноября 23:59
  27. Дифференциальные уравнения octave-ode четверг 14 ноября 23:59
  28. Задача о поиске кластеров методом k-средних octave-k-means четверг 20 ноября 23:59
  29. 🔥 Видео

Введение

Большинство научных работников не ломают голову над тем, как устроены численные методы внутри. Они просто используют их, применяя в своей работе специализированные пакеты численных расчетов. Это совершенно не означает, что не нужно разбираться с тем, как эти методы устроены. Программу пишет человек, а ему свойственно ошибаться. И ошибки сквозят даже в самых дорогих и навороченных системах численной математики сплошь и рядом. К тому же есть задачи, где применение стандартных систем невозможно.

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

Видео:Решение системы дифференциальных уравнений методом ЭйлераСкачать

Решение системы дифференциальных уравнений методом Эйлера

1. Что такое Octave и где его взять

GNU Octave — свободный математический пакет численной математики, основанный на концепциях своего проприетарного собрата Matlab. Он доступен для всех популярных на сегодняшний день десктопных платформ, и получить его можно, зайдя в раздел загрузки на официальном сайте.

Решение систем дифференциальных уравнений в octave

Большую часть экрана занимает так называемое командное окно, с приглашием командной строки вида «>>». Введем туда что нибудь и нажмем Enter

шикарно, переменная ans содержит результат последней операции, если вы явно не завели переменную под результат, например так

переменные вводятся «на ходу», как это принято в интерпретируемых языках. Да собственно m-язык октава и есть язык интерпретатора, очень напоминающий аналогичный язык матлаба. Один раз заведенная переменная сохраняет свое значение и тип до следующего присваивания, либо до полной очистки памяти командной оболочки

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

Решение систем дифференциальных уравнений в octave

Стоит обратить внимание на то, что для переменных указана размерность (Dimention) 1х1. Основным типом данных в Octave, как и в Matlab является матрица. Так вот наши числа это на самом деле матрицы размером 1 на 1 элемент.

Очистить все глобальные переменные можно выбрав в меню Edit -> Clear Workspace, а очистить командное окно — щелкнуть по нему правой кнопкой, выбрав Clear Window. Выполним очистку переменных и введя x получим

видно, что переменная x стала недоступна, до тех пока мы явно не присвоили ей значение снова.

Скажу честно, что с Ocatve я никогда не работал и разбираюсь вместе с читателем. Поэтому, предположим, что мы уже знаем достаточно, чтобы решить какую нибудь задачу. Например ту, которую решали в прошлый раз. Но сначала…

Видео:Видеоурок "Системы дифференциальных уравнений"Скачать

Видеоурок "Системы дифференциальных уравнений"

2. Нормальная форма Коши

Решение систем дифференциальных уравнений в octave

Решение систем дифференциальных уравнений в octave

Решение систем дифференциальных уравнений в octave

и получаем вместо одного уравнения 2-го порядка два уравнения 1-го порядка, которые нужно решать вместе, одновременно

Решение систем дифференциальных уравнений в octave

Это уже не одно уравнение, а система дифференциальных уравнений, содержащая две неизвестные зависимости Решение систем дифференциальных уравнений в octaveи Решение систем дифференциальных уравнений в octave.

Как решать систему уравнений численно? Да так же, как и одно уравнение. Соберем все наши переменные в вектор-столбец (или массив, или матрицу-столбец, кому как удобно выражаться это не важно)

Решение систем дифференциальных уравнений в octave

и правые части тоже соберем в вектор-столбец

Решение систем дифференциальных уравнений в octave

Тогда рекуррентная формула метода Эйлера будет справедлива для каждого элемента этих столбцов

Решение систем дифференциальных уравнений в octave

где n — число уравнений, в нашем случае их два.

К чему я всё это? А к тому, что Octave требует представлять дифференциальные уравнения именно в нормальной форме Коши.

С точки зрения механики вектор-столбец y называется вектором состояния системы или вектором фазовых координат. Тогда наша система уравнений превращается в одно векторное уравнение

Решение систем дифференциальных уравнений в octave

Теперь возьмем, и в командном окне Octave наберем

Таким образом мы определяем функцию, которая на вход принимает текущее значение фазовых координат y и текущее время t, а на выходе возвращает значение производных от фазовых координат. Видим, что приглашение командной строки «>>» пропало, система ждет что мы закончим ввод тела функции ключевым словом endfunction. Продолжим набирать функцию

Итак, в теле функции мы определили g = 10 — принятое нами значение ускорения свободного падения. Мы видим, что же не появилось в списке переменных слева — эта переменная является локальной, и существует лишь в пределах функции. Переменная y это матрица-столбец, первый элемент y(1) которой это координата z, второй y(2) — проекция вектора скорости vz. Соответственно, dydt — это то значение, которое возвращает наша функция, это тоже матрица-столбец первый элемент которой это производная от z по времени, а второй — производная от vz по времени. То есть мы записали нашу систему дифференциальных уравнений в терминах Octave.

Теперь определимся с диапазоном времени, для которого нам надо получить результат. Пусть это будет десять точек от 0 до 1 секунды, с шагом 0.1 — сравним результат с ручным примером

Тут всё очевидно: t0 — начальный момент времени, tend — конечный момент времени. А вот deltaT = 0.1 секунда — это не шаг интегрирования! Это интервал, с которым Ocatve будет отображать для нас численное решение уравнения. Последняя команда формирует массив моментов времени для которых мы хотим получить решение.

Как вы знаете из прошлой статьи, для решения уравнения численно необходимо знать начальные значения скорости и координаты. Необходимо задать их для Octave

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

Функция lsode решит для нас уравнение численно. Первый параметр — имя функции, которая вычисляет производные от фазовых координат. Это функция F, мы её задали. Второй параметр — начальные условия, то есть значения фазовых координат в момент времени t = t0. Последний параметр — массив моментов времени, для которых мы хотим рассчитать значения фазовых координат. Жмем Enter…

В ответ вываливается гора требухи, оканчивающаяся предложением

нам предлагают листать требуху дальше (f), вернуться назад (b), или выйти (q). Те, кто знает *nix-подобные системы, знают, что это консольный вывод под управлением юниксовой утилиты less. Мы притворимся что не знаем, выйдем отсюда, нажав на клавиатуре q.

Наберем теперь в командной строке «y» и нажмем Enter

Ничего не напоминает? Ну конечно же это то самое решение, что мы получили для задачи из прошлой статьи. Только оно теперь удивительно точное — значения совпадают с аналитическим решением! Открою вам тайну — это точное решение нашей задачи. Связано это с тем, что функция lsode использует для решения задачи отнюдь не метод Эйлера, а нечто более продвинутое. Движение камня происходит с постоянным ускорением, и та формула численной аппроксимации, что применяется в данном методе, очевидно просто совпадает с аналитическим решением задачи. Хотя, если лезть в дебри представления машиной чисел с плавающей запятой, то… А ну да ладно, сейчас не об этом.

Видео:Решение систем Д/У: 1. Знакомство с функциями odeXYСкачать

Решение систем Д/У: 1. Знакомство с функциями odeXY

3. Строим график

Наберите теперь команду

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

Решение систем дифференциальных уравнений в octave

Синяя кривая сверху — координата камня. Оранжевая снизу — вертикальная проекция скорости. Введенная команда неудобна тем, что строит график для всех функций сразу. А если мы хотим, построить, зависимость скорости от высоты? Тогда поступим так

Будет построен график, где по оси абсцисс пойдет переменная y(1), а по оси ординат — y(2), что есть соответственно высота и вертикальная проекция скорости

Решение систем дифференциальных уравнений в octave

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

А пока предлагаю выполнить самостоятельное задание — постройте график зависимости высоты от времени и скорости от времени в отдельных окнах. И старайтесь не смотреть под спойлер

Решение систем дифференциальных уравнений в octave

Решение систем дифференциальных уравнений в octave

Видео:Решение двух систем уравнений в MatLabСкачать

Решение двух систем уравнений в MatLab

Заключение

На этом первое знакомство с Octave, как средой для численного моделирования будем считать оконченным. Теперь у нас есть мощный инструмент, с помощью которого мы будем постигать более изощренные премудрости.

Видео:Численное решение системы дифференциальных уравнений(задачи Коши)Скачать

Численное решение системы дифференциальных уравнений(задачи Коши)

IT Novella

После нажатия клавиши на экране появится результат выполнения команды

Решение систем дифференциальных уравнений в octave

Функция rand позволяет генерировать случайные числа из нтервала (0,1).

Если функция вызывается без аргументов, то будет создано случайное число.

Если функция имеет один аргумент rand(m), то будет создана квадратная матрица размерности mхm.

Решение систем дифференциальных уравнений в octave

Если передать два аргумента rand(m,n), то будет создана матрица размерности $ m times n $

Решение систем дифференциальных уравнений в octave

В теории линейной алгебры выделяют специальные виды матриц.

Создать такие матрицы в Octave позволяют следующие функции:

Решение систем дифференциальных уравнений в octave

  • ones(m),ones(m,n)
  • Функция генерирует матрицу с элементами 1 (количество аргументов трактуется аналогично eye).octave:18> = ones(2)

Решение систем дифференциальных уравнений в octave

  • zeros(m), zeros(m,n)
  • Функция генерирует нулевую матрицу (количество аргументов трактуется аналогично eye).octave:29> Z = zeros(2)

Решение систем дифференциальных уравнений в octave

  • diag(v, k)
  • Функция генерирует диагональную матрицу с элементами вектора v на диагонали k. Аргумент k выступает в качестве опции:k=0 означает главную диагональ, при k > 0 элементы вектора v ставятся на k-ую диагональ выше, а при k D = diag([1 2 3])

Решение систем дифференциальных уравнений в octave

Возможности СКМ Octave

GNU Octave — высокоуровневый язык программирования, предназначенный прежде всего для численных расчётов. Он предоставляет удобный интерфейс командной строки для численного решения линейных и нелинейных задач, а также для выполнения других численных экспериментов. Кроме того, GNU Octave — свободно распространяемое программное обеспечение.

Решение систем дифференциальных уравнений в octave

Видео:Системы дифференциальных уравнений. Часть 2Скачать

Системы дифференциальных уравнений. Часть 2

Система компьютерной математики Octave

Решение систем дифференциальных уравнений в octave

Системы компьютерной математики

Система компьютерной алгебры (computer algebra system, CAS) — программное приложение для символьных вычислений,

т.е. для выполнения преобразований и работы с математическими выражениями в аналитической (символьной) форме.

GNU Octave

GNU Octave — это свободно распространяемый язык программирования высокого уровня, ориентированный на проведение численных расчетов, и по сути являющийся альтернативой коммерческому пакету MatLab.

Решение систем дифференциальных уравнений в octave

Простейшие операции

Простейшие арифметические операции в Octave выполняются с помощью следующих операторов:

Рассмотрим пример

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

Решение систем дифференциальных уравнений в octave

Для решения СЛАУ в окне интерпретатора Octave последовательно введём следующие команды:

Решение систем дифференциальных уравнений в octave

Элементарные математические функции

Экспоненциальные функции

Решение систем дифференциальных уравнений в octave

Примеры применения экспоненциальных функций:

Решение систем дифференциальных уравнений в octave

Целочисленные функции

Решение систем дифференциальных уравнений в octave

Примеры работы с целочисленными функциями:

Решение систем дифференциальных уравнений в octave

Комплексные числа

Ввод комплексного числа производится в формате:

действительная часть + i * мнимая часть

действительная часть + j * мнимая часть

Примеры записи комплексных чисел в Octave

Решение систем дифференциальных уравнений в octave

Функции работы с комплексными числами

Решение систем дифференциальных уравнений в octave

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

Решение систем дифференциальных уравнений в octave

Основные операторы в Octave

Условный оператор

Обычный условный оператор имеет вид:

Решение систем дифференциальных уравнений в octave

Обычный оператор if работает по следующему алгоритму:

если условие истинно, то выполняются операторы1, если ложно — операторы2.

Рассмотрим работу условного оператора на примере.

Пример:даны вещественные числа x и y. Определить принадлежит ли точка с координатами (x;y) заштрихованной части плоскости.

Решение систем дифференциальных уравнений в octave

Текст программы и результат её работы

Решение систем дифференциальных уравнений в octave

Оператор альтернативного выбора

Оператор switch

Решение систем дифференциальных уравнений в octave

Оператор switch работает следующим образом: если значение параметра равно значение1, то выполняются опреаторы1, иначе если параметр равен значение2, то выполняются операторы2. В противном случае, если значение параметра совпадает с значение3, то выполняются операторы3 и т.д. Если значение параметра не совпадает ни с одним из значений в группах case, то выполняются операторы, идущие после служебного слова otherwise.

Рассмотрим использование оператора switch на примере:

Вывести на экран название дня недели, соответствующее заданному числу D, при условии, что в месяце 31 день и первое число — понедельник.

Решение систем дифференциальных уравнений в octave

Матрично-векторные вычисления

Создание матриц

Любую матрицу или вектор с заданными элементами в Octave можно создать путем перечисления

этих элементов в квадратных скобках ([ ]), разделяя столбцы пробелом или запятой, строки

знаком ”точка с запятой”

octave:1>A=[1 3 5; 2 4 6]

После нажатия клавиши на экране появится результат выполнения команды

Решение систем дифференциальных уравнений в octave

Функция rand позволяет генерировать случайные числа из нтервала (0,1).

Если функция вызывается без аргументов, то будет создано случайное число.

Если функция имеет один аргумент rand(m), то будет создана квадратная матрица размерности mхm.

Решение систем дифференциальных уравнений в octave

Если передать два аргумента rand(m,n), то будет создана матрица размерности $ m times n $

Решение систем дифференциальных уравнений в octave

В теории линейной алгебры выделяют специальные виды матриц.

Создать такие матрицы в Octave позволяют следующие функции:

Решение систем дифференциальных уравнений в octave

  • ones(m),ones(m,n)
  • Функция генерирует матрицу с элементами 1 (количество аргументов трактуется аналогично eye).octave:18> = ones(2)

Решение систем дифференциальных уравнений в octave

  • zeros(m), zeros(m,n)
  • Функция генерирует нулевую матрицу (количество аргументов трактуется аналогично eye).octave:29> Z = zeros(2)

Решение систем дифференциальных уравнений в octave

  • diag(v, k)
  • Функция генерирует диагональную матрицу с элементами вектора v на диагонали k. Аргумент k выступает в качестве опции:k=0 означает главную диагональ, при k > 0 элементы вектора v ставятся на k-ую диагональ выше, а при k D = diag([1 2 3])

Решение систем дифференциальных уравнений в octave

Возможности СКМ Octave

GNU Octave — высокоуровневый язык программирования, предназначенный прежде всего для численных расчётов. Он предоставляет удобный интерфейс командной строки для численного решения линейных и нелинейных задач, а также для выполнения других численных экспериментов. Кроме того, GNU Octave — свободно распространяемое программное обеспечение.

Видео:Gnu Octave в физике и технике.Скачать

Gnu Octave в физике и технике.

Посов И.А.

Видео:octave_01_intro.ogv (in Russian)Скачать

octave_01_intro.ogv (in Russian)

just a site

Видео:Системы дифференциальных уравнений. Метод исключенияСкачать

Системы дифференциальных уравнений. Метод исключения

Практические Задания

Видео:Системы дифференциальных уравненийСкачать

Системы дифференциальных уравнений

Требования к оформлению заданий

В каждом блоке заданий указано название каталога, в который надо складывать решения. Названия заданий должны быть taskX.m , где вместо X вы подставляете номер задачи. Например, task1.m , task2.m и т.п. Изредка в самой задаче указано другое название функции, тогда вы должны использовать предложенное название.

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

В решениях вы можете использовать только следующие оператры, конструкции и приемы:

  • Создание и комбинирование матриц с помощью квадратных скобок: [1, 2, 3] ;
  • Оператор диапазона: 1:10 или 100:10:200 ;
  • Функции ones , zeros , eye ;
  • Арифметические операции над матрицами: сложения, вычитания, умножения, деления; операции могут быть поэлементными ( .* , ./ )или матричными ( * , / );
  • Все виды индексирования;
  • Расширение диапазона;

Видео:Система дифференциальных уравнений. Операционный методСкачать

Система дифференциальных уравнений. Операционный метод

Создание матриц octave-matrices понедельник 7 октября 23:59

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

  1. Создайте матрицу 10 на 10, у которой все элементы нули, кроме первой строки, в которой все элементы единицы
  2. Создайте матрицу размера 5 на 5, состоящую из чисел 5.

$ begin 0 & 0 & 0 & 0 & 0 & 1 & 1 & 1 & 1 & 1 \ 0 & 0 & 0 & 0 & 0 & 1 & 1 & 1 & 1 & 1 \ 0 & 0 & 0 & 0 & 0 & 1 & 1 & 1 & 1 & 1 \ 0 & 0 & 0 & 0 & 0 & 1 & 1 & 1 & 1 & 1 \ 0 & 0 & 0 & 0 & 0 & 1 & 1 & 1 & 1 & 1 \ 2 & 2 & 2 & 2 & 2 & 3 & 3 & 3 & 3 & 3 \ 2 & 2 & 2 & 2 & 2 & 3 & 3 & 3 & 3 & 3 \ 2 & 2 & 2 & 2 & 2 & 3 & 3 & 3 & 3 & 3 \ 2 & 2 & 2 & 2 & 2 & 3 & 3 & 3 & 3 & 3 \ 2 & 2 & 2 & 2 & 2 & 3 & 3 & 3 & 3 & 3 end $

Создайте матрицу 10 на 10, у которой в каждой клетке стоит 0 или 1 в шахматном порядке:

Здесь, если не можете справиться без цикла, разберитесь, как сделать цикл, и сделайте один цикл. Но не больше. Какой определитель у этой матрицы? Почему?

Видео:1 - Решение систем нелинейных уравнений в MatlabСкачать

1 - Решение систем нелинейных уравнений в Matlab

Индексирование в Ocatave octave-indexing понедельник 14 октября 23:59

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

  1. Дана квадратная матрица четного размера. Поделите ее пополам по вертикали и горизонтали и верните матрицу, соответствующую верхнему левому квадрату.
  2. Дана матрица с четным числом строк. Поменяйте местами верхнюю половину строк матрицы и нижнюю половину.
  3. Дан вектор из целых чисел. Верните вектор, который содержит только те числа исходного вектора, которые делятся на 3.
  4. Дан вектор из целых чисел. Верните этот же вектор, но в котором все четные числа поделены на два. Будет ли работать ваше решение, если исходная матрица не линейная, а прямоугольная?
  5. filter_multiples(a, k) возвращет копию вектора a , в котором удалены все числа, строго большие $k$ и делящиеся на $k$.

sieve(n) . Решето Эратосфена. Вам понадобится цикл while , попробуйте найти информацию о его синтаксисе самостоятельно.

Требуется вернуть вектор из простых чисел от 1 до n. Для этого создайте вектор всех целых чисел от $2$ до $n$, С помощью предыдущей функции filter_multiples удалите сначла всё, что больше 2 и делится на 2. Потом всё, что больше 3 и делится на 3, потом все, что больше 5 (мы пропускаем 4, потому что оно уже было удалено на первом шаге) и делится на 5, и т.д. За подробностями смотрите, что такое решето Эратосфена.

  • Дана матрица из двух столбцов. Каждая строка описывает зверя: его рост в метрах и вес в килограммах. Необходимо вернуть следующие данные:
    • суммарный рост зверей
    • средний рост зверей
    • средний рост зверей весом больше 100 килограмм.
    • матрицу из одного столбца с индексом массы тела (ИМТ) зверей. ИМТ равен весу, деленному на квадрат роста.
    • матрицу из двух столбцов со зверьми, у которых рост больше 10 метров, и вес больше 100 килограмм.
  • Видео:устойчивость замкнутой системы в octaveСкачать

    устойчивость замкнутой системы в octave

    Векторизация octave-vectorization четверг 24 октября 23:59

    В этих задачах вообще нельзя использовать циклы

    1. Дана матрица строка, например, a = [1, 2, -2, 4] и число x , например 1. Строка a задает коэффициенты многочлена, начиная с младшего, т.е. она соответствует многочлену (1 + 2x — 2x^2 + 4x^3). Посчитайте значение многочлена в точке x . Для приведенного примера ответ будет 5. Т.е. необходимо написать выражение через a и x , которое считает значение многочлена a в точке x . Замечание: в Octave есть функция polyval , делающая аналогичные действия, но у нее иначе интерпретируются аргументы. Не пользуйтесь этой функцией при решении задачи.
    2. Дана матрица-столбец x. Создать квадратную матрицу такого же размера, которая в i-ой строке и j-ом столбце содержит разность x(i) – x(j) .
    3. Дана матрица, состоящая из трех столбцов. Предположим, что каждая строка задает прямую вида (ax + by + c = 0), где столбцы — это, соответственно, числа a , b , c . Создайте матрицу, состоящую из двух столбцов с числами, соответственно, k и b , которые описывает эти же прямые, только в виде (y = kx + b). Например, строка [1 1 1] должна превратиться в строку [-1 -1] .
    4. Функция all2dets(x) . Дана матрица x из двух столбцов. Создать квадратную матрицу, размером в количество строчек исходной. Элемент в i-ой строке j-ом столбце должен быть равен определителю матрицы [x(i,:); x(j,:)] , т.е. матрицы 2×2, составленной из i-ой и j-ой строк исходной матрицы. Напомню, что определитель матрицы (begina&b\c&dend) равен (ad — bc).
    5. Функция all_lines_intersections(a) . Дана матрица а из трех столбцов, описывающая набор прямых (см. предыдущее задание). Если кратко сформулировать условие, то нобходимо пересечь каждую прямую с каждой. Подробней так: каждое пересечение прямой из строки i с прямой из строки j дает две координаты пересечения x и y. Функция должна вернуть две матрицы x и y . Первая содержит x координату этого пересечения в строчке i и столбце j, вторая содержит, соответственно, y координату. Не обрабатывайте отдельно случаи параллельных прямых, пусть для параллельных прямых получается произвольный ответ, скорее всего, у вас это будет NaN из-за деления 0 на 0. Напомню формулу пересечения прямых (a_1x+b_1y+c_1) = 0 и (a_2x+b_2y+c_2 = 0):

    Соответственно, пользуйтесь задачей 4 для решения.

    Графика в Ocatave octave-graphics четверг 31 октября 23:59

    Не используйте при решении задач циклы, если не сказано обратного.

    1. Нарисуйте график функции (sin(x) + sin(3x)) в диапазоне от (-2pi) до (2pi). Функция должна не только нарисовать график, но и вернуть два значения: x с абсциссами и y с ординатами точек, это те же значения, которые вы передадите в функцию plot(x,y).
    2. Нарисуйте график функции (sin(x) + frac1sin(2x) + frac1sin(3x) + cdots + frac1sin(10x)). Для решения задачи создайте матрицу, у которой в строках расположены значения каждого слагаемого по отдельности. Верните результат как в прошлой задаче.
    3. Дана матрица A размера 2xN, каждый столбец — координаты точки на плоскости. В этой задаче функция не должна возвращать результат, она должна только рисовать одну картинку, состояющую из следующих элементов:
      1. Изобразите множество A
      2. Изобразите центр масс множества A (одна точка, другой маркер, другой цвет)
      3. Изобразите множество B, которое получается параллельным переносом множества A так, чтобы его центр масс перешел в 0. (Новый тип маркера, новый цвет). Напоминание: при параллельном переносе на вектор ((dx, dy)) координаты точки ((x, y)) заменяются на ((x + dx, y + dy)).
      4. Изобразите множество C: поворот множества A вокруг нуля на (5^circ). (Новый тип маркера, новый цвет). Напоминание. Чтобы повернуть точку с координатами ((x, y)) на угол (varphi) относительно нуля, нужно домножить вектор столбец (beginx\yend) слева на матрицу (begincos(varphi)&sin(varphi)\-sin(varphi)&cos(varphi)end).
      5. Изобразите множество D: поворот множества А вокруг его центра масс на (5^circ).
    4. Нарисуйте 10 концентрических окружностей с радиусами, соответственно, 1, 2, …, 10. Используйте для этого тот факт, что точки с координатами ((cos(varphi), sin(varphi))) лежат на одной окружности радиуса 1, при (varphi) меняющемся от 0 до (2pi).
    5. (сложно) Дана линейная матрица из трех чисел a , b , c . Кроме этого даны матрицы xrange=[xmin, xmax] и yrange=[ymin, ymax] . Постройте график прямой (ax + by + c = 0), нужно построить ту ее часть, которая содержится в прямоугольнике (x_ leq x leq x_) и (y_ leq y leq y_). Учтите все варианты, включая то, что прямая может быть вертикальной. Удобней всего решать так. Нужно пересечь заданную прямую с каждой из четырех сторон прямоугольника. Стороны горизонтальны или вертикальны, поэтому вычислить пересечение с каждой конкретной стороной или проверить, что его нет, относительно несложно. В общей сложности получится два пересечения. Далее нужно нарисовать отрезок от первой точки пересечения до второй, для этого достаточно одного вызова функции plot() .
    6. Функция plot_intersections(a) . Дана матрица с прямыми как в задании 3 из блока octave-vectorization . Постройте на одном графике все пересечения этих прямых. Воспользуйтесь задачей 5 из блока octave-vectorization .
    7. Функция plotсм_lines(a, xrange, yrange) . Дана матрица с прямыми как в задании 3 из блока octave-vectorization . Постройте на одном графике все эти прямые. Вызовите для этого в цикле функцию рисования прямой.
    8. Функция plot_lines_and_intersections_in_range(a, xrange, yrange) . Дана матрица с прямыми как в предыдущем задании. Воспользуйтесь предыдущей задачей и задачей 5 из блока octave-vectorization , нарисуйте все прямые и все их точки пересечения.

    Решение уравнений octave-equations четверг 6 ноября 23:59

    1. Дано n , найти корни многочлена (x^n + x^ + cdots + x + 1), т.е. многочлена степени (n), у которого все коэффициенты единицы. Верните корни в виде одной матрицы-строки. Найдите самостоятельно встроенную в Octave функцию, которая вычисляет корни многочлена.
      • Заставьте эту же функцию task1 рисовать корни многочлена на плоскости. Так как корни многочлена комплексные, вам придется отдельно выделить их вещественную и мнимую часть. обязательно разберитесь, как выделить вещественную и мнимую части, не пользуйтесь версией функции plot , которая сама рисует комплексные числа — в этом случае решение получается слишком простым и скучным.
    2. Решите уравнение (x + sin(x)=1). Не забудьте реализовать функцию, которая вернет результат.
    3. Решите систему уравнений (begin x + sin(y) = 1 \ y + cos(x) = 1 end). Не забудьте реализовать функцию, которая вернет результат.
    4. Дано вещественное число a . Решите уравнение (e^x — e^=a). Пусть функция возвращает четыре результата решения (не в виде матрицы, а именно в виде функции с четырьмя значениями):
      • Решение задачи с помощью fsolve . Здесь и в других пунктах проверяйте решение на числе «миллион».
      • Решение задачи с помощью fzero , здесь вам придется подумать, какой указать отрезок для поиска корня.
      • Решение задачи с помощью явной формулы. В этом уравнении можно явно выписать, чему равен x , подумайте, как это сделать.
      • Разность между решениями в виде явной формулы и с помощью fsolve .
    5. Круг задается матрицей из трех чисел: [x, y, r] — координаты центра и радиус. Даны два круга. Нужно определить их точки пересечения. Для этого составьте систему из двух уравнений, описывающих круги, и используйте функцию fsolve для решения системы. Функция должна вернуть матрицу из двух строчек, в которой точки пересечения расположены в столбцах. Кроме этого, функция должна нарисовать оба круга и обозначить особым маркером точки пересечения. Не пытайтесь вычислять точки пересечений явно, самостоятельно решая систему или делая геометрические построения.
      • Для начала найдите хотя бы одну точку пересечения.
      • А потом найдите обе точки. Вам придется проделать геометрические вычисления, чтобы определить две начальных точки для двух вызовов fsolve .

    Даны натуральные числа $m$ и $n$, это размеры клетчатого прямоугольника. В нём $mtimes n$ клеточек, они пронумерованы от $1$ до $mcdot n$. Составьте матрицу $A$ размера $mcdot ntimes mcdot n$, в которой в которой в ячейке i,j находится:

    • 1, если клетки $i$ и $j$ — это две соседние по горизонтали клетки
    • мнимая единица, если клетки $i$ и $j$ — это две соседние по вертикали клетки
    • 0 иначе

    Посчитайте определитель матрицы $A$ и возьмите корень. Вы получите количество способов разбить прямоугольник m на n на доминошки.

  • Задача о клеточной функции (наполняется)
  • Дифференциальные уравнения octave-ode четверг 14 ноября 23:59

    1. Решите неоднородное линейное дифференциальное уравнение с постоянными коэффициентами: (y’ + 2y = x + frac12, y(0) = 1). Получите решение для x = linspace(0, 1, 100) . Функция должна вернуть три результата, строчку x , строчку значений функции y1 и строчку значений функции y2 :
      • y1 получается решением уравнения с помощью функции lsode .
      • y2 получается решением уравнения вручную. Вспомните, как решаются такие уравнения, получите решение в виде явной формулы.

    Постройте оба графика в одном окне, убедитесь, что они совпадают.

    Решите уравнение (y’‘(x) + y(x) * (cos(x) + 1) = 0, y(0)=-1, y’(0)=1) на отрезке (0leq x leq 10), постройте график решения, функция не должна ничего возвращать.

    Создайте функцию task2a для решения того же уравнения, но в ней можно задавать начальные значения. В ней должно быть три параметра: координаты x значение для y(0) и для y'(0) . Сделайте функцию task2b для тестирования функции task2a , внутри должен быть следующий код:

    Задача о поиске кластеров методом k-средних octave-k-means четверг 20 ноября 23:59

    Эта задача на отдельной странице: Метод k-средних

    students-site is maintained by iposov. This page was generated by GitHub Pages.

    🔥 Видео

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

    Система неоднородных дифференциальных уравнений

    Системы дифференциальных уравнений. Часть 1Скачать

    Системы дифференциальных уравнений. Часть 1

    Решение систем Д/У: 2. Опции решателей odeXYСкачать

    Решение систем Д/У: 2. Опции решателей odeXY

    01.02. Модель SIR. Численное решение системы дифференциальных уравнений с помощью SciPyСкачать

    01.02. Модель SIR. Численное решение системы дифференциальных уравнений с помощью SciPy
    Поделиться или сохранить к себе: