- •Задачи нестационарной теплопроводности в технологии кпэ оглавление
- •1. Физические основы передачи тепла
- •1.1 Температурное поле
- •1.2.Основной закон теплопроводности.
- •1.4. Модели обрабатываемых деталей.
- •1.5. Температурное поле мгновенного точечного источника теплоты (мти).
- •1.5.1 Температурное поле мти в полубесконечном теле.
- •1.5.2 Температурное поле мгновенного линейного источника.
- •1.5.3 Температурное поле мгновенного плоского источника.
- •1.6 Температурное поле точечного источника теплоты постоянной интенсивности (пти).
- •1.6.1 Температурное поле пти в полубесконечном теле.
- •1.6.2 Температурное поле постоянно действующего линейного источника (пли)
- •1.6.3 Температурное поле постоянно действующего плоского источника (ппи)
- •1.7 Температурное поле импульсного точечного источника теплоты (ити) в полубесконечном теле.
- •2. Работа с системой matlab.
- •2.1 Введение.
- •2.2 Рабочая среда matlab.
- •2.3 Основные объекты matlab
- •2.4 Просмотр и уничтожение переменных
- •2.5 Форматы вывода результатов вычислений.
- •2.6 Операторы и функции
- •2.7 Работа с массивами данных
- •2.8 Векторы-столбцы, векторы-строки, сложение и вычитание векторов.
- •2.9 Поэлементные операции с векторами
- •2.10 Построение таблицы значений функции
- •2.11 Основы графического представления результатов вычислений.
- •2.11.1 Построение графика функций одной переменной
- •2.11.2 Построение трехмерных графиков.
- •2.12 Основы программирования.
- •2.14 Особенности применения matlab для исследования температурных полей.
2.11.2 Построение трехмерных графиков.
Построение графика функций двух переменных на прямоугольной области определения включает два предварительных этапа:
- задание в области прямоугольной сетки;
- вычисление значений функции в узлах сетки и запись их в матрицу.
Построим график
функции:
,
где
.
Зададим сначала область изменения переменных x и y:
>> x=[-2:0.1:2]; y=[-2:0.1:2];
Затем создадим прямоугольную сетку:
>> [X,Y]=meshgrid(x,y);
Вычислим значения функции в узлах сетки и поместим их в матрице Z:
>> Z=exp(-(X.^2+Y.^2));
Построим график:
>> mesh(X,Y,Z)
График приведён на рисунке 5:
Рис. 4. Функция Гаусса.
Иногда функцию двух переменных удобно задать в виде линий уровня. Для этого сначала зададим набор уровней:
>> lev=[0:0.02:1];
Изобразим график:
>> contour3(X,Y,Z,lev)
Получим:
Рис. 5. Функция Гаусса, уровни.
При исследовании функций двух переменных часто возникает задача построения проекций линий уровня на плоскость, например построение изотерм при исследовании температурных полей. Для этого используется функция contour. Функция может быть использована с тремя или четырьмя входными аргументами и с двумя выходными аргументами, либо без выходных аргументов. В простейшем случае исполнение:
>> contour(X,Y,Z)
приведёт к построению десяти равноотстоящих проекций линий уровня на плоскость XY без указания значений уровней. Четвёртым аргументом функции contour может быть либо количество уровней, либо вектор, содержащий значения функции, для которых строятся уровни. Например исполнение:
>> contour(X,Y,Z,7)
приведёт к построению семи линий уровня. Обращение к функции с двумя выходными аргументами с последующим обращением к функции clabel:
>>v=[0.1:0.2:0.9];
>> [C,h]=contour(X,Y,Z,v);
>> clabel(C,h); grid on;
Приведёт к результату, показанному на рисунке 6. Вектор v содержит значения функции, для которых строятся линии уровня, выходные переменные C и h содержат информацию необходимую для задания числовых значений функции на линиях уровня. Построение выполнено для ранее описанной функции нормального распределения Гаусса.
Рис. 6 Линии уровня функции Гаусса.
Возможно также обращение:
>>clabel(contour(X,Y,Z,v)); grid on;
2.12 Основы программирования.
Для решения многих задач требуется писать программы, в которых действия повторяются циклически, в зависимости от некоторых условий выполняются различные части программы. Для этого используются операторы циклов for и while. Цикл for предназначен для выполнения заданного числа повторяющихся действий, а цикл while - для действий, число повторений которых заранее не известно, но известно условие продолжения цикла.
Цикл for.
Простое использование цикла for осуществляется следующим образом:
for count=start:step:final
команды MatLab
end
Здесь count – переменная цикла, start – ее начальное значение, final – конечное значение, а step – шаг, на который увеличивается count при каждом следующем заходе в цикл. Цикл заканчивается как только значение count становится больше final. Переменная цикла может принимать не только целые, но и вещественные значения любого знака.
Пусть требуется
вывести семейство кривых для
,
которое задано функцией, зависящей от
параметра
.
Используем цикл for.
Наберём текст файл-процедуры, приведенный
ниже в редакторе М-файлов, и запустим
его на выполнение :
figure
x=[0:pi/30:2*pi];
for a=-0.1:0.02:0.1
y=exp(-a*x).*sin(x);
hold on
plot(x,y)
end
В результате выполнения появится графическое окно, изображенное на рис. 7, которое содержит требуемое семейство кривых:
Рис. 7 Семейство кривых
Цикл while
Цикл while работает, пока выполняется условие цикла:
while условие цикла
команды MatLab
end
Пусть требуется найти сумму ряда для заданного x (разложение в ряд sin x):
.
Будем накапливать
сумму, пока слагаемые больше
(по модулю).
В данном примере
условием цикла является то, что текущее
слагаемое
больше
.
Для записи условия следует использовать
знак больше (>). Текст файл-функции
mysin,
вычисляющей сумму ряда приведен в
листинге :
function S=mysin(x)
% Вычисление синуса разложением в ряд
% использование: y=mysin(x), -pi<x<pi
S=0;
k=0;
while abs(x.^(2*k+1)/factorial(2*k+1))>1.0e-10
S=S+(-1)^k*x.^(2*k+1)/factorial(2*k+1);
k=k+1;
end
У цикла while, в отличие от for, нет переменной цикла, поэтому пришлось до начала цикла k присвоить ноль, а внутри цикла увеличивать k на единицу.
Условие цикла while может содержать не только знак >. Для задания условия выполнения цикла допустимы также другие операции отношения приведенные в таблице:
Отношения
Обозначение |
Операция отношения |
== |
Равенство |
< |
Меньше |
<= |
Меньше или равно |
>= |
Больше или равно |
~= |
Не равно |
Задание более сложных условий производится с применением логических операторов.
Логические операторы и примеры их использования приведены в таблице:
Логические операторы
Оператор |
Условие |
Запись в MatLab |
Эквивалентная запись |
Логическое «и» |
x<3 и k=4 |
and (x<3, k==4) |
(x<3) & (k==4) |
Логическое «или» |
x=1, 2 |
or(x==1, x==2) |
(x==1) | (x==2) |
Отрицание «не» |
|
not(a==1.9) |
~(a==1.9) |
Для задания порядка выполнения логических операций следует использовать круглые скобки, например записи (x==1) | (x==2) & (y==3) и (x==1) | ((x==2) & (y==3)) не эквивалентны в MatLab, в отличие от многих языков программирования.
Операторы ветвления
Условный оператор if и оператор переключения switch позволяют создать разветвляющийся алгоритм выполнения программ, в котором при выполнении определенных условий работает соответствующий блок операторов или команд MatLab.
Условный оператор if
Оператор if может применяться в простом виде, для выполнения блока команд при удовлетворении некоторого условия, или в конструкции if-elseif-else для написания разветвляющихся алгоритмов.
Применение if в самом простом случае выглядит так:
if условие
команды MatLab
end
Если условие верно, то выполняются команды MatLab, размещенные между if и end, а если условие неверно, то происходит переход к командам, расположенным после end. При записи условия используются ранее приведенные операции отношения.
Организация ветвления
В общем виде оператор ветвления представляет конструкцию if-еlsеif-else, работу которой хорошо поясняет пример файл-функции ifdem:
function ifdem(a)
% Пример использования структуры if—еlsеif—еlsе
if(a==0)
disp(‘a равно нулю’)
elseif a==1
disp(‘а равно единице’)
elseif a==2
disp(‘a равно двум’)
elseif a>=3
disp(‘a больше или равно трем’)
else
disp(‘a меньше трех, но не ноль, не единица и не двойка’)
end
В зависимости от выполнения того или иного условия работает соответствующая ветвь программы, если все условия неверны, то выполняются команды, размещенные после else. Вызовы функции ifdem с различными аргументами позволяют убедиться в вышесказанном:
>> ifdem(1)
a равно единице
>> ifdem(1.2)
a меньше трех, но не ноль, не единица и не двойка
>> ifdem(2)
a равно двум
>> ifdem(3)
a больше или равно трем
>> ifdem(-1)
a меньше трех, но не ноль, не единица и не двойка
В случае двух ветвей используется завершающее else, а elseif пропускается. Оператор if должен заканчиваться end.
Прерывания цикла, исключительные ситуации
Хорошо написанная программа предотвращает ошибочные действия, которые приводят к досрочному ее завершению. Проверка входных и выходных аргументов файл-функции является одним из способов контроля. MatLab
предоставляет в распоряжение программиста еще два средства: прерывание цикла и обработку исключительных ситуаций.
Прерывание цикла, оператор break
При организации
циклических вычислений следует
позаботиться о том, чтобы внутри цикла
не возникало ошибок. Например, пусть
дан массив х, состоящий из целых чисел,
и требуется сформировать новый массив
y
по правилу
.
Очевидно, что задача может быть решена
при помощи цикла for.
Но если один из элементов исходного
массива равен нулю, то при делении
получится Inf
и последующие вычисления могут оказаться
бесполезны. Предотвратить подобную
ситуацию можно выходом из цикла, если
текущее значение x(i)
равно нулю. Следующий фрагмент программы
демонстрирует использование оператора
break
для прерывания цикла:
…
y=zeros(length(x)-1)
for i=1: length(x)-1
if x(i)==0
break
end
y(i)=x(i+1)/x(i);
end
…
При выполнении условия x(i)==0 оператор break заканчивает цикл и происходит выполнение операторов, которые расположены в строках, следующих за end. Оператор break можно использовать и с циклом while. В случае вложенных циклов break осуществляет выход из внутреннего цикла.
2.13 М-файлы
Работа из командной строки MatLab затрудняется, если требуется выполнить много команд и часто изменять их. Удобным способом выполнения команд MatLab является использование М-файлов, в которых можно набирать команды, выполнять их все сразу или частями, сохранять в файле и использовать в дальнейшем. Для работы с М-файлами предназначен редактор М-файлов. При помощи редактора М-файлов можно создавать собственные функции и вызывать их, в том числе и из командной строки.
Работа в редакторе М-файлов
Раскройте меню File основного окна MatLab и в пункте New выберите подпункти M-file.Новый файл открывается в окне редактора М-файлов.
Типы М-файлов
М-файлы в MatLab бывают двух типов: файл-программы (Script M-Files), содержащие последовательность команд, и файл-функции, (Function M-Files), в которых описываеются функции, определяемые пользователем. Ниже рассмотрены файл-функции.
Файл-функции с одним входным аргументом
Предположим, что в вычислениях необходимо часто использовать функцию x2+1
Имеет смысл один раз написать файл-функцию, а потом вызывать его всюду, где необходимо вычисление этой функции. Откройте в редакторе М-файлов новый файл и наберите текст:
function f=myfun(x)
f=exp(-x).*sqrt((x.^2+1)./(x.^4+0.1));
Слово function в первой строке определяет что данный файл содержит файл-функцию. Первая строка является заголовком функции, в которой размещается имя функции и списки входных и выходных аргументов. В примере, приведенном в листенге 5.2, имя функции myfun, один входной аргумент х и один выходной – f. После заголовка следует тело функции (оно в данном примере состоит из одной троки), где и вычисляется ее значение. Важно, что вычисленное значение записывается не в f. Не забудьте поставить точку с запятой для предотвращения вывода лишней информации на экран.
Теперь сохраните файл в рабочем каталоге. Обратите внимание, что выбор пункта Save или Save as меню File приводит к появлению диалогового окна сохранения файла, в поле File name которого уже содержит название myfun. Не изменяйте его, сохраните файл-функцию в файле с предложенным именем!
Теперь созданную функцию можно использовать так же, как и встроенные sin, cos и другие, например из командной строки:
>> y=myfun(1.3)
y=
0.2600
Вызов собственных функций может осуществляться из файл-программы и из другой файл-функции.
Предупреждение
каталог, в котором содержатся файл-функции, должен быть текущим, или путь к нему должен быть добавлен в пути поиска, иначе MatLab не найдёт функцию, или вызовет вместо нее другую с тем же именем (если она находится в каталогах, доступных для поиска).
Аргументом функции myfun может быть как число, так и вектор или матрица значений, например:
>> x=[1.3 7.2]
>> y=myfun(x)
y=
0.2600 0.0001
Переменная y, в которую записывается результат вызова функции myfun автоматически становится вектором нужного размера.
Постройте график функции myfun на отрезке [0,4] из строки или при помощи файл-программы
x=[0:0.5:4];
y=myfun(x);
plot(x,y)
MatLab предоставляет ещё одну возможность работы с файл-функциями – использование их в качестве аргументов некоторых команд. Например, для построения графика служит специальная функция fplot, заменяющая последовательность команд, приведенную выше. При вызове fplot имя функции график который требуется построить, заключается в апострофы, пределы построения указываются в вектор-строке из двух элементов
fplot(‘myfun’,[0,4])
Файл-функции с несколькими входными аргументами
Написание файл-функций с несколькими входными аргументами практически не отличается от случая с одним аргументом. Все входные аргументы размещаются в списк через запятую. Например, ниже приведён листинг, содержащий файл-функцию, вычисляющую длину радиус-вектора точки трехмерного пространства
Function r=radius3(x,y,z)
r=sqrt(x.^2+y.^2+z.^2);
Для вычисления длины радиус-вектора теперь можно использовать функциию radius3, например:
>>R=radius3(1,1,1)
R=
1.732
Кроме функций с несколькими аргументами, MatLab позволяет создавать функции, возвращающие несколько значений, т. е. имеющие несколько выходных аргументов.
Файл-функции с несколькими выходными аргументами
Файл-функции с несколькими выходными аргументами удобны при вычислении функций, возвращающих несколько значений. Выходные аргументы добавляются через запятую в список выходных аргументов, а сам список заключается в квадратные скобки. Примером является функция, переводящая время в секундах, в часы, минуты и секунды.
Файл-функция перевода секунд в часы, минуты и секунды:
function [hour,minute,second]=hms(sec)
hour=floor(sec/360);
minute=floor((sec-hour*3600)/60);
second=sec-hour*3600-minute*60;
При вызове файл-функции с несколькими выходными аргументами результат следует записывать в вектор соответствующей длины:
>>[H,M,S]=hms(10000)
H=
2
M=
46
S=
40
Если список выходных аргументов пуст, т. е. заголовок выглядит так function myfun(a,b) или function []=myfun(a,b), то файл-функция не будет возвращать никаких значений. Такие функции тоже иногда оказываются полезными.
Как правило, М-файлы хранятся в каталоге пользователя. Для того чтобы система MatLab могла найти их, следует установить пути, указывающие расположение М-файлов.
Замечание
Хранить собственные М-файлы вне основного каталога MatLab следует по двум причинам. Во-первых, при переустановке MatLab файлы, которые содержатся в подкаталогах основного каталога MatLab, могут быть уничтожены. Во-вторых, при запуске MatLab все файлы подкаталога toolbox размещаются в памяти компьютера некоторым оптимальным образом так, чтобы увеличить производительность работы. Если вы записали М-файл в этот каталог, то воспользоваться им можно будет только после перезапуска MatLab.
Установка путей
Текущий каталог определяется в диалоговом окне Curent Directory рабочей среды. Окно присутствует в рабочей среде, если выбран пункт Curent Directory меню View рабочеё среды.
Текущий каталог выбирается из списка. Если его нет в списке, то его можно добавить из диалогового окна Browse for Folder, вызываемого нажатием на кнопку, расположенную справа от списка. Содержимое каталога отображается в таблице файлов.
Определение путей поиска производится в диалоговом окне Set Path навигатора путей, доступ к которому осуществляется из пункта Set Path меню File рабочей среды.
Для добавления каталога нажмите кнопку Add Folder и в появившемся диалоговом окне Browse for Path выберите требуемый каталог. Добавление каталога со всеми его подкаталогами осуществляется при нажатии на кнопку Add with Subfolders. Путь к добавленному каталогу появляется в поле MATLAB search path. Порядок поиска соответствует расположению путей в этом поле, первым просматривается каталог, путь к которому размещен вверху списка. Порядок поиска можно изменить или вообще удалить путь к какому-либо каталогу, для чего выделите каталог в поле MATLAB search path и определите его положение при помощи следующих кнопок:
Move to Top – поместить вверх списка;
Move Up – переместить вниз на одну позицию;
Remove – удалить из списка;
Move Down – переместить вниз на одну позицию;
Move to Bottom – поместить вниз списка.
После внесения изменений следует сохранить информацию о путях поиска,
нажав кнопку Save. При помощи кнопки Default можно восстановить стандартные установки, а Revert предназначена для возврата к сохраненным.
Команды для установки путей
Текущий каталог устанавливается командой cd, например cd c:\users\igor. Команда cd, вызванная без аргумента, выводит путь к текущему каталогу. Для установки путей служит команда path, вызываемая с двумя аргументами:
path (path, 'c:\ users\igor’) - добавляет каталог c:\ users\igor с низшим приоритетом поиска;
path ('c:\ users\igor’, path) - добавляет каталог c:\ users\igor с высшим приоритетом поиска.
Использование команды path без аргументов приводит к отображению на экране списка путей поиска. Удалить путь из списка можно при помощи команды rmpath.
rmpath ( 'c:\ users\igor’) удаляет путь к каталогу 'c:\ users\igor из списка путей.
Предупреждение
Не удаляйте без необходимости пути к каталогам. Удаление может привести к тому, что честь функций, определенных в Matlab, станет недоступной.
