⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 als_temp.m

📁 用matlab自编的基于自适应局部线形化的软件可靠性模型.效果非常良好.源程序和数据集都有,可以直接运行.
💻 M
字号:
% function [als] = als_temp_function();
clear all;
close all;
%load the data of time between failures,this mat file contain five
%datasets.
load timebetweenfailures;
s1{1} = SYS1(:,2)';
s1{2} = SS3(:,2)';
s1{3} = CSR1(:,2)';
s1{4} = CSR2(:,2)';
s1{5} = CSR3(:,2)';
M = 100;
% for KK = 1:length(s1)           %--------------------------------------------------------------------------------    the first  end
s = s1{5};
% load kekaoxing;
% load NewData;
% s = NewData(:,2)';

% m is the dimension of state space,k is the most kth near pointer ,T is
% the prediction step length.

%*****************************************************************
%convert the row data to cumulate data
%*****************************************************************
for I = 1:length(s)
    temps = 0;
    for J = 1:I
        temps = temps + s(J);
    end
    cums(I) = temps;
end

repeat_number = 0;
% for m = 2:5
%     for k = 7:25
m =2;
k = 20;
T = 1;
t = 0;
start_number = length(s)-20;
end_number = length(s)+1;
for test_number = start_number:end_number                           % ---------------------------------------------------- 1 end
    flag_m = 0;
    while flag_m == 0                                              % ------------------------------------------------------2 end
    %current value for prediction of X(t+T)
    for I = 1:m
        Xt(I) = cums(test_number-T+I-m);
    end
%     Xt = Xt - mean(Xt);

%**************************************************************************
%find the k most near Xt 
    for I = 1:test_number - T - m 
       tempdistance = 0;
        for J = 1:m
            tempdistance = tempdistance + (Xt(J) - cums(I+J-1))^2;
        end
        distance_v(I) = tempdistance;
    end
    [min_v,min_i] = sort(distance_v);
    
    for I = 1:k
        for J = 1:m
            X(I,J) = cums(min_i(I) + J -1);
        end
        Y(I) = cums(min_i(I) +(m-1)+  T );
    end
    Y = Y';

    
%   w denote the estimate parameter.  
   eigen = descending(sqrt(abs(eig(X'*X))));
    pos = poszero(eigen);
    tempvalue = eigen(pos);
    flag_m = 1;
    while (eigen(1)/tempvalue > M)
        pos = pos - 1;
        tempvalue = eigen(pos);
        flag_m = 0;
        m = pos;
    end
  if flag_m == 0
         clear X Y Xt distance_v min_i;  
  end
  end                                                  %------------------------------------------------------------------------2 end
 %   w denote the estimate parameter.  
    w = (inv(X'*X))*X'*Y;
    t = t + 1;
    Yt(t) = Xt*w ;%+ mean_Y;
    clear X Y Xt distance_v min_i;
end                                        % ------------------------------------------------------------------1 end

%**************************************************************************
%Convert the cumulate time to time between failures
%**************************************************************************
for i = 1:end_number - start_number 
    Yt1(i) = Yt(i+1) - Yt(i);
    %the number of Yt1(i) must be a positive number or zero.
    if Yt1(i) < 0
        Yt1(i) = 0;
    end
    cums1(i) = cums(i+start_number-1) - cums(i+start_number-2);
end
    
repeat_number = repeat_number + 1;
% RMSE_cum(repeat_number) = sqrt( ( Yt - cums(start_number:end_number) ) * ( Yt - cums(start_number:end_number ) )' / (end_number - start_number + 1) );
% disp(sprintf('Using the local linear method to predict,the RMSE of cumulate is %.3f',RMSE_cum(repeat_number)));
% for I = start_number:end_number
%     Yt1(I-start_number+1) = Yt(I-start_number+1) -cums(I-2)-1000 ;
% end
for i=2:length(Yt1)
    disp(sprintf('No %d the real value is %d the predicting relative error value is %.3f',i-1,s(start_number+i-1),abs(s(start_number+i-1)-Yt1(i))));
end

RMSE(repeat_number) = sqrt( ( Yt1 -  s(start_number:end_number-1) ) * ( Yt1 -  s(start_number:end_number-1 ) )' / (end_number - start_number ) );
MAE(repeat_number) = sum(abs(Yt1-s(start_number:end_number-1)))/(end_number - start_number );
disp(sprintf('Using the local linear method to predict,the RMSE is %.3f,the MAE is %.3f',RMSE(repeat_number),MAE(repeat_number),'Parent',handles.axes1));
% numbers = start_number:end_number-1;
% plot(numbers,Yt1(1:end_number - start_number),'.-',numbers,cums1(1 :end_number - start_number ),'r*');
% title('某软件故障故障间隔时间序列一步预测');
% legend('Predicting Data','Raw Data',2);
% xlabel('故障发生序号(无量纲)');ylabel('故障间隔时间(单位:S)');
% axis([100,135,-1000,8000]);

% plot(numbers,Yt(2:35),'.-',numbers,cums(start_number+1:end_number),'r.--');
% title('某嵌入式系统故障间隔时间序列一步预测');
% legend('Predicting Data','Raw Data',2);
% xlabel('故障发生序号(无量纲)');ylabel('累积运行时间(单位:S)');
% axis([100,135,-1000,9e+4]);
clear cums;
% end             %-----------------------------------------------------------------------------------------------------   the first  end                                                            
% end
% end
% disp(sprintf('The mean of the RMSE is %.3f',mean(RMSE_tr)));
% nn = 44;
% numbers = 1:400;
% plot(numbers,s1{1}(length(s1{1})-nn:length(s1{1})),numbers,s1{2}(length(s1{2})-nn:length(s1{2}))/1000,numbers,s1{3}(length(s1{3})-nn:length(s1{3})),numbers,s1{4}(length(s1{4})-nn:length(s1{4})),numbers,s1{5}(length(s1{5})-nn:length(s1{5})));


% 五个数据集的原始数据
% plot(1:length(s1{1}),s1{1},'k-',1:length(s1{2}),s1{2}./1000,'r*--',1:length(s1{3}),s1{3},'b:',1:length(s1{4}),s1{4},'xk-.',1:length(s1{5}),s1{5},'r-+');
% title('五个数据集的原始数据');
% legend('SYS1','SS3','CSR1','CSR2','CSR3');
% xlabel('故障发生序号(无量纲)');ylabel('故障间隔时间(单位:S)');
% xlabel('Failure number');ylabel('Time between failures--(S)');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -