- •Лабораторная работа №3 «Определения границ фаз в термическом анализаторе сплавов с помощью нечеткой логики»
- •Краткие теоретические сведения
- •Определение границ фазовых составляющих сплава с помощью четкой логики
- •Определение границ фаз с помощью нечеткой логики
- •Алгоритм определения границ фаз с помощью нечеткой логики.
- •Подготовка к лабораторной работе.
- •Порядок выполнения работы
- •Содержание отчета по лабораторной работе
- •Краткие теоретические сведения.
- •Выполнение работы
- •Файл-процедура для нахождения локального минимума
- •Файл-процедура для нахождения точки конца кристаллизации
- •Файл-процедура для нахождения точек
- •7.1.4 Результаты работы программы для обнаружения границ фаз в термическом анализаторе алюминиевых сплавов при помощи четкой логики.
- •7.2 Для нечеткой логики
- •Файл-процедура для нечеткой логики: определяет максимум
- •7.3 Результаты работы программы для обнаружения границ фаз в термическом анализаторе алюминиевых сплавов при помощи нечеткой логики.
- •Файл-сценарий для создания снв и сохранения ее на диске в виде файла
- •Аннотация к созданной снв
- •7.3. Сравниваем результат работы программы обнаружения границ фаз с помощью четкой логики с результатом работы программы обнаружения границ фаз с помощью нечеткой логики.
7.1.4 Результаты работы программы для обнаружения границ фаз в термическом анализаторе алюминиевых сплавов при помощи четкой логики.
Результаты работы программы для разных участков кривой представлены на рисунках 7.1-7.5.
Рисунок 7.1 – Участок кривой №11
Рисунок 7.3 – Участок кривой №13
Рисунок 7.5 – Участок кривой №40
Рисунок 7.2 – Участок кривой №12
Рисунок 7.4 – Участок кривой №39
7.2 Для нечеткой логики
Файлы-процедуры для нечеткой логики
script
format long e;
OutputFismat = readfis('FIS_lab_fz');
for x1 = 11:15 %Номера считываемых КТО
xx = int2str(x1); %переводит строковую переменную в число
file = 'curve';
exten = '.xy';
fid = fopen([file xx exten],'r'); %чтение файла КТО
[F, LMas] = fscanf(fid, '%e', inf);%считывание данных в массив F
st = fclose(fid);
n = LMas/2;
%Цикл получения массивов координат по Х и по Y
for i=1:n
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
[L2,i,ymax2,xmax2] = findmax_fz(i, Fx, Fy);%нахождение локального максимума
d = 0;
%Цикл повторяется до тех пор, пока не будет найдена первая фаза
while d < 0.004
%Нахождение гипотенузы, угла, координат минимума и левого максимума
[L1,i,xmax1,ymax1,ymin,xmin,t1] = findmin_fz(i, Fx, Fy);
i_f1 = i; %индекс минимума фазы по оси Х
%Нахождение гипотенузы, угла и координат правого максимума
[L2,i,ymax2,xmax2,t2] = findmax_fz(i, Fx, Fy);
d = L1; %сравнение по левой гипотенузе
end
%После окончание цикла определены все параметры первой фазы
% Построение первой фазы
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
[L1,i,xmax1,ymax1,ymin,xmin,t1] = findmin_fz(i, Fx, Fy);
i_f2 = i; %индекс следующего минимума фазы по оси Х
[L2,i,ymax2,xmax2,t2] = findmax_fz(i, Fx, Fy);
location = xmin; %временная координата локального минимума
X_In = [L1 L2 t1 t2 location];%входные парамерты для принятия решения
Decision = evalfis(X_In, OutputFismat); %принятие решения
% Если Decision > 0.5, то участок считается фазой и находится правый
% максимум
if Decision > 0.5
[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;
Файл-процедура для нечеткой логики: определяет минимум
function [L1,i,xmax1,ymax1,ymin,xmin,t1]=findmin_fz(i,Fx,Fy);
% Вызов файла-процедуры для нахождения локального минимума
% (xmax1,ymax1) - koordinatu '1-go' lokalnogo max (na4ala kristalizacii)
% (ymin,xmin) - koordinatu lokalnogo min
% L1 - gipotenyza '1-go' treygolnika
% t1 - ygol naklona krivou 1-go treygolnika
% Fx,Fy - issledyemue to4ki massiva(razdelennue na abscusu i ordinatu),
% poly4ennue iz zagrygaemux faulov s krivumi
cnt=i; %начало выполнения функции
fl1=0; %flag-min,станет равно 1 когда найдется min
fl2=0; %flag-max,станет равно 1 когда найдется max
DX=Fx(2)-Fx(1); %priras4enie argumenta
Yd=[]; %sozdaem massiv dlya xraneniya zna4eniu proizvodnou
Yd=diff(Fy)/DX; %opredelenie proizvodnou
while or(fl1==0,fl2==0)==1 %vupolnyat, poka ne nauden max ili min
if and(and(Yd(i)>=0,Yd(i+1)<0),fl2==0)==1 %esli proizvodnaya v i-u
%to4ke >0
%(t.e. f-ya vozrastaet) i
%proizvodnaya v (i+1)-u to4ke <0
%(t.e. f-ya ybuvaet) i lokalnuu
% max ne nauden, to
xmax1=Fx(i); %zapomnit zna4enie ots4eta
ymax1=Fy(i); %i veli4inu (t.e. koordinatu
%t.(nach1,pmax1))
fl2=1; %%ystanovit flag max=1
end;
if and(and(Yd(i)<=0,Yd(i+1)>0),fl1==0)==1 %naxogdenie min.
%esli proizvodnaya v i-u to4ke <0
%(t.e. f-ya ybuvaet) i
%proizvodnaya v (i+1)-u to4ke >0
% (t.e. f-ya vozrastaet) i fl1==0
% (pri fl1==1 - min nauden)
% to
xmin=Fx(i); %zapomnit zna4enie ots4eta
ymin=Fy(i); %i veli4inu min (t.e. koordinatu
%t.(kon1,pmin))
fl1=1; %ystanovit flag min=1
end;
i=i+1; %priras4enie s4et4ika
end;
i=i-1; %vozvrat na wag(4tobu zafiksirovat
%t. min)
L1=sqrt((ymax1-ymin)^2+((xmin-xmax1)/20000)^2);%pas4et
%gipotenyzu(delim
%na 20000 dlya sootnoweniya
%razmernosteu)
t11=acos((xmin-xmax1)/(20000*L1)); %ras4et ygla(v radianax)
t1=180*t11/pi; %ras4et ygla(v gradysax)
