Файл-процедура для нахождения точек
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; Результаты работы программы для обнаружения границ фаз в термическом анализаторе алюминиевых сплавов при помощи четкой логики. Результаты работы программы для разных участков кривой представлены на рисунках 7.1-7.5. Рисунок 7.1 – Участок кривой №11
Рисунок 7.3 – Участок кривой №13
Рисунок 7.5 – Участок кривой №40
Рисунок 7.2 – Участок кривой №12
Рисунок 7.4 – Участок кривой №39
Для нечеткой логики
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|