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

📄 ls_temp.m

📁 用matlab编写的基于局部线形化方法的软件可靠性预测方法
💻 M
字号:
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)';
% for KK = 1:length(s1)
s = s1{1};
% 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 = 14;
k = 20;
T = 1;
t = 0;
start_number = length(s)-50;
end_number = length(s);
for test_number = start_number:end_number                           % ---------------------------------------------------- 1 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';
%     mean_Y = mean(Y);
%     Y = (Y - mean_Y)';
%     for I = 1:k
%         X(I,:) = X(I,:) - mean(X);
%     end
    
%   w denote the estimate parameter.  
    w = (inv(X'*X))*X'*Y;
    t = t + 1;
    Yt(t) = Xt*w ;%+ mean_Y;
%     if t>1
%     Yt1(t) = Yt(t) - Yt(t-1);
%     else
%    disp(sprintf('The value of test_number is %.3f',test_number));
%     Yt1(t) = Yt(t) - cums(test_number - 1);
%     end
%     Yt1(t) = Yt(t) - cums(test_number - 1);
    clear X Y 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 value of time between failures must be positive.
    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
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)));
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]);
% end
% end
% end
% disp(sprintf('The mean of the RMSE is %.3f',mean(RMSE_tr)));

⌨️ 快捷键说明

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