some fixes
This commit is contained in:
parent
37e951cf33
commit
46db2e59cd
@ -1,8 +1,9 @@
|
|||||||
# Лабораторная работа 1
|
# Лабораторная работа 1
|
||||||
Дисциплина "Вычислительная математика"
|
Дисциплина "Вычислительная математика"
|
||||||
## Авторы:
|
## Авторы:
|
||||||
ПИбд-33 Борщевская
|
ПИбд-33 Борщевская, Прыткина
|
||||||
### Вариант 7
|
### Вариант 7
|
||||||
|
Имеется два вида корма P1 и P2, содержащие питательные вещества (витамины) S1, S2, S3. Необходимо составить дневной рацион, имеющий минимальную стоимость, в котором содержание каждого вида питательных веществ было бы не менее установленного предела.
|
||||||
Целевая функция: F = 4x+6y->min
|
Целевая функция: F = 4x+6y->min
|
||||||
Ограничения:
|
Ограничения:
|
||||||
1) 3x+y>=9
|
1) 3x+y>=9
|
||||||
|
@ -0,0 +1,7 @@
|
|||||||
|
package ru.uni.symplex_method;
|
||||||
|
|
||||||
|
public class SimplexException extends Exception {
|
||||||
|
public SimplexException(String error) {
|
||||||
|
super(error);
|
||||||
|
}
|
||||||
|
}
|
@ -38,9 +38,9 @@ public class SimplexMatrix {
|
|||||||
return currentRowCount;
|
return currentRowCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addRow(double[] coefficients) throws SymplexException {
|
public void addRow(double[] coefficients) throws SimplexException {
|
||||||
if (isFill()) {
|
if (isFill()) {
|
||||||
throw new SymplexException("Матрица уже заполнена!!!");
|
throw new SimplexException("Матрица уже заполнена!!!");
|
||||||
}
|
}
|
||||||
matrix[currentRowCount] = coefficients;
|
matrix[currentRowCount] = coefficients;
|
||||||
currentRowCount++;
|
currentRowCount++;
|
||||||
@ -63,13 +63,13 @@ public class SimplexMatrix {
|
|||||||
|
|
||||||
System.out.print("Базис\t");
|
System.out.print("Базис\t");
|
||||||
System.out.print("b\t\t");
|
System.out.print("b\t\t");
|
||||||
for (int i = 1; i <= numCols-1; i++) {
|
for (int i = 1; i <= numCols - 1; i++) {
|
||||||
System.out.print("x" + i +"\t\t\t");
|
System.out.print("x" + i + "\t\t\t");
|
||||||
}
|
}
|
||||||
System.out.println();
|
System.out.println();
|
||||||
|
|
||||||
for (int i = 0; i < matrix.length; i++) {
|
for (int i = 0; i < matrix.length; i++) {
|
||||||
if(i != matrix.length-1) {
|
if (i != matrix.length - 1) {
|
||||||
System.out.printf("%4s\t", basis.get(i));
|
System.out.printf("%4s\t", basis.get(i));
|
||||||
} else {
|
} else {
|
||||||
System.out.printf("%4s\t", "D");
|
System.out.printf("%4s\t", "D");
|
||||||
|
@ -70,7 +70,7 @@ public class SimplexService {
|
|||||||
printMatrix();
|
printMatrix();
|
||||||
try {
|
try {
|
||||||
doIter();
|
doIter();
|
||||||
} catch (SymplexException exception) {
|
} catch (SimplexException exception) {
|
||||||
System.out.println("Произошла ошибка при выполнении: " + exception.getMessage());
|
System.out.println("Произошла ошибка при выполнении: " + exception.getMessage());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -91,17 +91,17 @@ public class SimplexService {
|
|||||||
return Arrays.stream(matrix).allMatch(x -> x[0] >= 0);
|
return Arrays.stream(matrix).allMatch(x -> x[0] >= 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void doIter() throws SymplexException {
|
private void doIter() throws SimplexException {
|
||||||
var matrix = simplexMatrix.getMatrix();
|
var matrix = simplexMatrix.getMatrix();
|
||||||
// поиск разрешающей строки и столбца
|
// поиск разрешающей строки и столбца
|
||||||
int indexRow = findRowIndex(matrix);
|
int indexRow = findRowIndex(matrix);
|
||||||
if (indexRow == -1) {
|
if (indexRow == -1) {
|
||||||
throw new SymplexException("Разрешающая строка не найдена");
|
throw new SimplexException("Разрешающая строка не найдена");
|
||||||
}
|
}
|
||||||
var row = matrix[indexRow];
|
var row = matrix[indexRow];
|
||||||
int indexColumn = findColIndex(row);
|
int indexColumn = findColIndex(row);
|
||||||
if (indexColumn == -1) {
|
if (indexColumn == -1) {
|
||||||
throw new SymplexException("Разрешающий столбец не найден");
|
throw new SimplexException("Разрешающий столбец не найден");
|
||||||
}
|
}
|
||||||
double element = row[indexColumn];
|
double element = row[indexColumn];
|
||||||
|
|
||||||
@ -125,7 +125,7 @@ public class SimplexService {
|
|||||||
private int findRowIndex(double[][] matrix) {
|
private int findRowIndex(double[][] matrix) {
|
||||||
int index = -1;
|
int index = -1;
|
||||||
double maxAbs = -1;
|
double maxAbs = -1;
|
||||||
for (int i = 0; i < matrix.length-1; i++) {
|
for (int i = 0; i < matrix.length - 1; i++) {
|
||||||
if (matrix[i][0] < 0) {
|
if (matrix[i][0] < 0) {
|
||||||
var value = Math.abs(matrix[i][0]);
|
var value = Math.abs(matrix[i][0]);
|
||||||
if (value > maxAbs) {
|
if (value > maxAbs) {
|
||||||
|
@ -1,7 +0,0 @@
|
|||||||
package ru.uni.symplex_method;
|
|
||||||
|
|
||||||
public class SymplexException extends Exception {
|
|
||||||
public SymplexException(String error) {
|
|
||||||
super(error);
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user