
- •Лабораторная работа №3 «Определения границ фаз в термическом анализаторе сплавов с помощью нечеткой логики»
- •Краткие теоретические сведения
- •Определение границ фазовых составляющих сплава с помощью четкой логики
- •Определение границ фаз с помощью нечеткой логики
- •Алгоритм определения границ фаз с помощью нечеткой логики.
- •Подготовка к лабораторной работе.
- •Порядок выполнения работы
- •Содержание отчета по лабораторной работе
- •Краткие теоретические сведения.
- •Выполнение работы
- •Файл-процедура для нахождения локального минимума
- •Файл-процедура для нахождения точки конца кристаллизации
- •Файл-процедура для нахождения точек
- •7.1.4 Результаты работы программы для обнаружения границ фаз в термическом анализаторе алюминиевых сплавов при помощи четкой логики.
- •7.2 Для нечеткой логики
- •Файл-процедура для нечеткой логики: определяет максимум
- •7.3 Результаты работы программы для обнаружения границ фаз в термическом анализаторе алюминиевых сплавов при помощи нечеткой логики.
- •Файл-сценарий для создания снв и сохранения ее на диске в виде файла
- •Аннотация к созданной снв
- •7.3. Сравниваем результат работы программы обнаружения границ фаз с помощью четкой логики с результатом работы программы обнаружения границ фаз с помощью нечеткой логики.
Файл-процедура для нахождения локального минимума
function i = findmin1(i, Fy);
d = 0.1;
while d > 0
d = Fy(i) - Fy(i+1);
i = i+1;
end
i = i-1;
echo off
Файл-процедура для нахождения точки конца кристаллизации
function T_kr = findend(Fy, n, i_f1);
i = i_f1;
T_kr = i;
massivmax = Fy(i);
i = i+1;
while i<=0.95*n
if Fy(i)>massivmax
massivmax = Fy(i);
T_kr = i;
end
i = i+1;
end
echo off
Файл-процедура для нахождения точек
function [xmax2,ymax2] = findpoints(i_f1, i_f2, Fy, Fx);
ymax2 = Fy(i_f1);
i_f1 = i_f1+1;
while i_f1<=i_f2
if Fy(i_f1) > ymax2
ymax2 = Fy(i_f1);
xmax2 = Fx(i_f1);
end
i_f1 = i_f1+1;
end
7.1.3 Программа по обнаружению границ фаз с помощью четкой логики для кривых темпа охлаждения, выбранных из таблицы 2.1 согласно номеру варианта (вариант №3+8).
script
format long e;
for x1 = 11:15 %Номера считываемых КТО
xx = int2str(x1); %переводит строковую переменную в число
file = 'curve';
exten = '.xy';
fid = fopen([file xx exten],'r'); %чтение файла КТО
[F, LMas] = fscanf(fid, '%e', inf); %определение входных параметров
st = fclose(fid);
n = LMas/2;
for i=1:n %цикл получения массивов координат по Х и по Y
Fx(i) = F(i*2-1);
Fy(i) = F(i*2);
end
plot(Fx, Fy); %построение КТО
hold on;
%Нахождение границы первой фазы
i=20;
d = Fy(i) - Fy(i+1);
if d > 0
i = i + 1;
i = findmin1(i, Fy); %нахождение первого минимума
end
[X2,Y2,i,ymax2,xmax2] = findmax_ch(i, Fx, Fy);
d = 0;
%Цикл повторяется до тех пор, пока не будет найдена первая фаза
while d < 0.004
%нахождение расстояний, координат минимума и левого максимума фазы
[X1,Y1,i,xmax1,ymax1,ymin,xmin] = findmin_ch(i, Fx, Fy);
i_f1 = i; %индекс минимума фазы по оси Х
%нахождение расстояний и координат правого максимума
[X2,Y2,i,ymax2,xmax2] = findmax_ch(i, Fx, Fy);
L1=sqrt((ymax1-ymin)^2+((xmin-xmax1)/20000)^2); %Вычисление параметра L1
d=L1;
end
%После окончание цикла определены все параметры первой фазы
step = Fx(i+1)-Fx(i);
% Построение первой фазы
plot([xmax1 xmax1],[ymax1+0.001 ymax1-0.001],'r-'); %построение левой границы первой фазы
plot(xmax1, ymax1, 'b*'); %построение левого максимума первой фазы
plot(xmin, ymin, 'r*'); %построение минимума первой фазы
plot(xmax2, ymax2, 'b*');
plot([xmax2 xmax2],[ymax2+0.001 ymax2-0.001],'r-'); %прорисовка верт.линии конца фазы
zoom on;
i_end = 200; %
T_kr = findend(Fy, n, i_f1); %нахождение точки конца кристализации
F_kr = Fx(T_kr-1);
% Цикл для нахождения следующего участка, подозрительного на фазу
while Fx(i) < F_kr
i_s = i;
[X1,Y1,i,xmax1,ymax1,ymin,xmin] = findmin_ch(i, Fx, Fy);
i_f2 = i; %индекс следующего минимума фазы по оси Х
[X2,Y2,i,ymax2,xmax2] = findmax_ch(i, Fx, Fy);
Xratio = X1/X2; %определение Xratio
Vector_1 = [Y1/Y2 Y2/Y1];
Yratio = max(Vector_1); %определение Yratio
X_nach = xmax2 - xmax1; %расстояние между двумя максимумами по Х
X_nach1 = 0;
S = 0;
%Цикл нахождения площади под анализируемым участком кривой
while X_nach1 < X_nach
YY = ((ymax2-ymax1)/(xmax2-xmax1))*(Fx(i_s)-xmax1)+ymax1;
YYtek = YY-Fy(i_s); %текущее значение по Y
S = YYtek*step+S; %площадь под анализируемым участком кривой
i_s = i_s+1; %переход к следующему участку кривой
X_nach1 = X_nach1+step;
end
%Если выполняется условие сравнение Xratio, Yratio и S с их граничными
%значениями, то учасок считается фазой и находится правый максимум
if (Xratio<0.8) & (Yratio>1.5) & (S>0.00165)
[xmax2,ymax2] = findpoints(i_f1, i_f2, Fy, Fx);
%Построение фазы
plot(xmin, ymin, 'r*');
plot(xmax2, ymax2, 'b*');
plot([xmax2 xmax2],[ymax2+0.001 ymax2-0.001],'r-');
i_f1 = i_f2;
kor_x = xmax2; %правый максимум по Х для построения последней фазы
kor_y = ymax2; %правый максимум по Y для построения последней фазы
end
end
%Построение последней правой границы фазы
if Fy(T_kr)>kor_y
plot(Fx(T_kr-1), Fy(T_kr), 'b*');
plot([Fx(T_kr-1) Fx(T_kr-1)],[Fy(T_kr)+0.001 Fy(T_kr)-0.001],'r-');
else
plot(kor_x, kor_y, 'b*');
plot([kor_x kor_x],[kor_y+0.001 kor_y-0.001],'r-');
end
hold off;
disp(x1);
pause;
end
clear all;