Міністерство освіти і науки України
Національний університет «Львівська політехнвка»
Кафедра АСУ
Розрахункова робота
з надійності систем
Виконав:
Ст. гр. ІУС-11м
Перевірила:
Кустра Н.О.
Львів 2009
Завдання:
- інтенсивність відмови системи за заданого стануготовності к, де 0<k<a1 та за умови, що ймовірність безвідмовної роботивихідних елементів описуєится екпоненційним законом, обчислюється за формулою:
, де
- коефіцієнт готовності системи, імовірність того, що працюють не менше як k вихідних елементів, де 0<k<a1 та за умови, що ймовірність безвідмовної роботивихідних елементів описуєится екпоненційним законом, обчислюється за формулою:
- частота відмови системи за заданого стану готовності к, де 0<k<a1 та за умови, що ймовірність безвідмовної роботивихідних елементів описуєится екпоненційним законом, - дорівнює похідній від коефіцієту готовності, взятий з протилежним знаком:
Звідси:
Текст програми, яка обчислює :
package program.core;
import java.util.ArrayList;
import java.util.List;
public class SystemReliability {
private double lam0 = 0;
private double lam1 = 0;
public SystemReliability(double lam0, double lam1) {
this.lam0 = lam0;
this.lam1 = lam1;
}
public double getP0(int t) {
double p0 = Math.exp((-1) * lam0 * t);
return p0;
}
public double getP1(int t) {
double p1 = Math.exp((-1) * lam1 * t);
return p1;
}
public double getKh1(int k, int a1, int step) {
double kh1 = 0;
double p0 = 0;
double p1 = 0;
double q1 = 0;
double c = 0;
p0 = getP0(step);
for (int x1 = k; x1 <= a1; x1++) {
c = (faktorial(a1) / (faktorial(x1) * faktorial(a1 - x1)));
p1 = Math.pow(getP1(step), x1);
q1 = Math.pow((1 - getP1(step)), (a1 - x1));
kh1 += c * p1 * q1;
}
kh1 *= p0;
return kh1;
}
public double getA(int k, int a1, int step) {
double c = 0, p1 = 0, q1 = 0, c1 = 0;
double a = 0;
double firstSum = 0, secondSum = 0;
for (int x1 = k; x1 <= a1; x1++) {
for (int j = 0; j <= (a1 - x1); j++) {
c = faktorial(a1 - x1)
/ (faktorial(j) * faktorial(a1 - x1 - j));
p1 = Math.pow(-1, j) * (lam0 + lam1 * x1 + lam1 * j);
q1 = Math.exp((-1) * (lam0 + lam1 * x1 + lam1 * j)
* step);
secondSum += c * p1 * q1;
}
c1 = faktorial(a1) / (faktorial(x1) * faktorial(a1 - x1));
c1 *= secondSum;
firstSum += c1;
secondSum = 0;
}
a = firstSum;
return a;
}
public double getLam(int k, int a1, int step) {
double lam = 0;
lam = getA(k, a1, step)/getKh1(k, a1, step);
return lam;
}
public List<Double> getLam(int k, int a1, int step, int t) {
List<Double> lams = new ArrayList<Double>();
for (int i = 0; i <= t; i += step) {
lams.add(this.getLam(k, a1, i));
}
return lams;
}
private int faktorial(int k) {
int rez = 1;
for (int i = 1; i <= k; i++) {
rez *= i;
}
return rez;
}
}
package program;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import program.core.SystemReliability;
public class Application {
private static double lam0 = 0.0001;
private static double lam1 = 0.001;
private static int k = 6;
private static int t = 20000;
private static int a1 = 7;
/**
* @param args
*/
public static void main(String[] args) {
SystemReliability reliability = new SystemReliability(lam0, lam1);
try {
File file = new File("data.txt");
FileWriter writer = new FileWriter(file);
BufferedWriter bufferedWriter = new BufferedWriter(writer);
for (int i = 0; i <= t; i += 100) {
bufferedWriter.write(i + "\t\t\t" + reliability.getLam(k, a1, i));
bufferedWriter.newLine();
}
bufferedWriter.close();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Графік залежності від t: