Задача: Освоить базовые операции создания и модификации массивов в Engee
Цель: Научиться создавать векторы и матрицы, получать доступ к элементам и изменять их
Инструкция:
// Создание вектора
v = [1, 3, 5, 7, 9];
// Создание матрицы
M = [1 2 3; 4 5 6];
// Получение элемента
element = M[2, 3]; // Вернет 6 Цель задания: Закрепить навыки создания, индексации и модификации массивов
Вектор-строка имеет размерность 1×n (одна строка, n столбцов), а вектор-столбец - n×1 (n строк, один столбец). В Engee при создании через [1,2,3] получится вектор-столбец, а через [1 2 3] - вектор-строка.
Оператор ' выполняет транспонирование - превращает строки в столбцы и наоборот. Для вектора-столбца он создаст вектор-строку, для матрицы поменяет строки и столбцы местами.
Можно использовать список индексов: array[[1, 3, 5]] вернет первый, третий и пятый элементы. Обратите внимание на двойные квадратные скобки!
Двоеточие (:) означает "все строки", а end - "последний столбец". Таким образом, эта команда вернет весь последний столбец матрицы data.
Код из блока 5: r = v1 .+ 1
Код из блока 5: vs = v1 + v2
Код из блока 5: va = vs / 2
Код из блока 5: vm = maximum(v1)
Код из блока 5: vr = round.(v1)
Код из блока 5: mass = density .* v1
Цель: Научиться применять операции с массивами для решения технических задач
У вас есть массив скоростей ветра: [5, 7, 12, 9] м/с
Задание: Добавьте 2 м/с к каждому значению (поправка на высоту установки)
Используйте: ветер_скорректированный = ветер .+ 2
Дневная выработка: [100, 120, 90] кВт·ч
Ночная выработка: [80, 70, 85] кВт·ч
Задание: Найдите суточную выработку для каждого дня
Используйте: суммарная = дневная + ночная
Температуры пациентов: [36.6, 37.2, 36.8] °C
Задание: Переведите их в Кельвины по формуле: K = C + 273.15
Используйте: кельвины = цельсии .+ 273.15
Напряжения в цепи: [12.1, 11.8, 12.5, 11.9, 12.3] В
Задание: Найдите максимальное напряжение в цепи
Используйте: пиковое = maximum(напряжения)
Плотности материалов: [2.7, 7.8, 11.3] г/см³ (алюминий, сталь, свинец)
Объёмы деталей: [10, 5, 3] см³
Задание: Рассчитайте массу каждой детали
Используйте: масса = плотности .* объёмы
println().+ - поэлементное сложение (добавляет число к КАЖДОМУ элементу массива). + - обычное сложение (складывает два массива целиком, если они одинакового размера).
Julia выдаст ошибку DimensionMismatch. Проверяйте размеры массивов функцией size() перед операциями.
Используйте обычное умножение: A * 2 или поэлементное A .* 2 - оба варианта работают.
minimum() - минимум, mean() - среднее, sum() - сумма, std() - стандартное отклонение.
println()Код из блока 6: s = size(x)
Код из блока 6: (xMax, idx) = findmax(x)
Новые функции: sum(), mean()
Цель: Научиться использовать функции для анализа данных
Температура 5 термопар: [215, 198, 230, 205, 222] °C
Задание: Найдите максимальную и минимальную температуру и их индексы
Используйте: findmax() и findmin()
Создайте матрицу мощности: power = [100 110 95; 120 105 98; 115 108 102] кВт
Задание: Определите размеры матрицы (сколько агрегатов и периодов)
Используйте: size()
Суточный расход: [1200, 1150, 1300, 1100] м³
Задание: Найдите суммарный расход за 4 дня и среднесуточный
Используйте: sum() и mean()
Вектор вибрации: [2.1, 3.5, 2.8, 4.2, 3.1, 2.9] мм/с
Задание: Найдите максимальный уровень и выведите: "Пик вибрации: [значение] на замере №[индекс]"
Используйте: findmax()
println()Код из блока 7: plot(x, y)
Код из блока 7: scatter(x, y, ...)
Код из блока 7: histogram(x)
Цель: Научиться строить графики для анализа систем
Данные: time = [9, 12, 15, 18, 21] ч
load = [80, 120, 110, 95, 70] МВт
Задание: Постройте график с заголовком "Суточный график нагрузки"
Используйте: plot(), title!()
Экспериментальные данные: x = [1,2,3,4,5]
y1 = [2,4,5,4,5]
Задание: Постройте график с маркерами в виде кругов и линией
Используйте: scatter() и plot!()
Данные дефектов: defects = [0,1,0,2,1,1,3,0,1,2]
(количество дефектов в 10 партиях)
Задание: Постройте гистограмму распределения
Используйте: histogram()
Синус и косинус: x = range(0, 2π, 50)
y1 = sin.(x), y2 = 0.5*cos.(x)
Задание: Постройте оба графика с легендой
Используйте: plot() и plot!()
plot() - создаёт новый графикplot!() - добавляет на существующий график:red, :blue, :green:circle, :square, :crossgrid!(:both)Создайте файл pump_log.csv с содержимым:
| Time | Pressure_Bar | FlowRate_lmin |
|---|---|---|
| 9:00 | 2.1 | 120 |
| 10:00 | 2.3 | 125 |
| 11:00 | 2.5 | 130 |
| 12:00 | 2.7 | 135 |
| 13:00 | 2.8 | 140 |
Код из блока 8: CSV.read("file.csv", DataFrame)
Код из блока 8: dataframe.column_name
Новая операция: Создание столбца с расчётами
Код из блока 8: sort(dataframe, "column")
Цель: Научиться импортировать и анализировать таблицы
Создайте файл materials.csv со следующими данными:
| Name | Density_gcm3 | YoungModula_GPa | Cost_rub_kg |
|---|---|---|---|
| Алюминий | 2.7 | 70 | 150 |
| Сталь | 7.8 | 200 | 80 |
| Медь | 8.9 | 110 | 300 |
| Титан | 4.5 | 116 | 500 |
Задание: Загрузите таблицу materials.csv
Используйте: CSV.read("materials.csv", DataFrame)
Выведите: Размер таблицы и названия столбцов
Задание: Создайте новый столбец "Density_kgm3"
Формула: кг/м³ = г/см³ × 1000
Используйте: materials.Density_kgm3 = ...
Задание: Отсортируйте таблицу по стоимости (по возрастанию)
Используйте: sort(materials, "Cost_rub_kg")
Выведите: Отсортированную таблицу
Задание: Выведите названия и модули упругости 3 самых дешёвых материалов
Используйте: materials[1:3, ["Name", "YoungModula_GPa"]]
println() или display()names(df) - получить имена столбцовsize(df) - размеры таблицы (строки, столбцы)df.column_name - доступ к столбцу через точкуdf[!, "column"] - доступ через строкуsort(df, "col") - сортировка по столбцуСовет: Всегда проверяйте размеры таблицы после операций!
Код из блока 9: y = v1 .< 4
Код из блока 9: z = v1[v1 .< 4]
Код из блока 9: v1[v1.<4] .= 0
Цель: Научиться отбирать данные по условиям
Дан вектор напряжений:
u = [12.3, 0.5, 11.9, 12.1, -0.1, 12.0] В
Задание: Создайте маску для значений от 11.5 до 12.5 В
Используйте: mask = (u .>= 11.5) .& (u .<= 12.5)
Тот же вектор напряжений
Задание: Получите вектор "корректных" напряжений по маске
Используйте: correct_u = u[mask]
Выведите: Среднее корректное напряжение
Тот же вектор напряжений
Задание: Замените все значения меньше 0 на 0
Используйте: u[u .< 0] .= 0
Выведите: Исправленный вектор
Обороты двигателя: rpm = [1450, 0, 1500, 1550, 10, 1520] об/мин
Задание: Найдите все ненулевые значения
Используйте: mask = rpm .!= 0
Выведите: Только рабочие обороты и их среднее
println() для вывода.> - больше (поэлементно).< - меньше (поэлементно).>= - больше или равно.<= - меньше или равно.== - равно.!= - не равно.& - И (логическое умножение).| - ИЛИ (логическое сложение).! - НЕ (инверсия)Пример сложного условия:
mask = (x .> 5) .& (x .< 10) .& (x .!= 7)
Код из блока 10: if условие ... else ... end
Код из блока 10: for переменная in диапазон ... end
Цель: Научиться использовать циклы и условия
Задание: Напишите цикл for, который выводит квадраты чисел от 1 до 5
Используйте: for i in 1:5 ... end
Формат: "Квадрат числа X = Y"
Дан вектор: signal = [0.1, 1.5, 0.3, 2.0, 0.4]
Задание: Напишите цикл, который выводит только значения больше 1
Используйте: if value > 1 ... end
Температура системы: t = 35 (°C)
Задание: Напишите условия:
Начальный уровень бака: 0 литров
Задание: Смоделируйте 5 шагов заполнения
Шаг: каждый шаг +10% от ёмкости (1000 л)
Выведите: Уровень на каждом шаге
На следующем уроке вы создадите проект, используя все изученные навыки:
Примерные темы проектов:
Подумайте, какую систему вы хотели бы смоделировать!