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

Файл-процедура для нахождения локального минимума

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;

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