Міністерство освіти і науки України
Національний університет «Львівська політехнвка»
Кафедра АСУ
Розрахункова робота
з надійності систем
Виконав:
Ст. гр. ІУС-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: