Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР2 майн.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
693 Кб
Скачать
☆

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)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]