Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа 1. 6 вар. Трофимов-2019.pdf
Скачиваний:
285
Добавлен:
19.02.2020
Размер:
175.99 Кб
Скачать

BТест анализатора бесконечно малых

1using NUnit.Framework;

2

3namespace MathUtilities.Tests

4{

5

6

7

8

[TestFixture]

[TestOf(typeof(InfinitesimalAnalyzer))] public class InfinitesimalAnalyzerTest

{

9private static double[] ExpectedTableInputs = new double[]{

10

1, 1E-01, 1E-02, 1E-03, 1E-04, 1E-05, 1E-06, 1E-07, 1E-08, 1E-09,

 

,! 1E-10, 1E-11, 1E-12, 1E-13, 1E-14, 1E-15

11

};

12

 

13

private static double[] ExpectedTableOutputs = new double[]{

14

1E+01, 1, 1E-01, 1E-02, 1E-03, 1E-04, 1E-05, 1E-06, 1E-07, 1E-08,

 

,! 1E-09, 1E-10, 1E-11, 1E-12, 1E-13, 1E-14

15

};

16

 

17

18

19

20

private static double[] ExpectedTableLgInputs = new double[]{

0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15

};

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

private static double[] ExpectedTableLgOutputs = new double[]{

1, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14

};

[Test]

public void InfinitesimalTest()

{

var ia = new InfinitesimalAnalyzer(Function); var got = ia.IsInfinitesimal(); Assert.IsTrue(got);

}

[Test]

public void NotInfinitesimalTest()

{

var ia = new InfinitesimalAnalyzer(NotInfinitesimalFunction); var got = ia.IsInfinitesimal();

Assert.IsFalse(got);

}

[Test]

public void TableRepresentationTest()

{

19

44

45

46

var ia = new InfinitesimalAnalyzer(Function); var got = ia.GetTableRepresentation();

47

for (int i = 0; i < 16; i++)

48

{

49

Assert.AreEqual(ExpectedTableInputs[i], got[i].Input);

50

Assert.IsTrue(Math.Equals(ExpectedTableOutputs[i],

 

,! got[i].Output));

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

Assert.AreEqual(ExpectedTableLgInputs[i], got[i].LgInput); Assert.AreEqual(ExpectedTableLgOutputs[i], got[i].LgOutput);

}

}

[Test]

public void AsymptoteTest()

{

var ia = new InfinitesimalAnalyzer(Function); var got = ia.GetAsymptote(); Assert.AreEqual(got.Alpha, 1); Assert.AreEqual(got.K, 1);

}

[Test]

public void CoefficientTest()

{

var ia = new InfinitesimalAnalyzer(Function); var got = ia.GetCoefficient(); Assert.AreEqual(got, 10);

}

public double Function(double x) => 10 * x;

76

public double NotInfinitesimalFunction(double x) =>

77

x + 1;

78

}

79

 

80[TestFixture]

81[TestOf(typeof(TableItem))]

82public class TableItemTest

83{

84[Test]

85[TestCase(1E-4, -4)]

86public void TestLgInput(double input, double expected)

87{

88

89

var ti = new TableItem{Input = input}; var got = ti.LgInput;

20

90

 

91

Assert.AreEqual(expected, got);

92

}

93

94[Test]

95[TestCase(1E-4, -4)]

96public void TestLgOutput(double output, double expected)

97{

98

99

100

var ti = new TableItem{Output = output}; var got = ti.LgOutput;

101

Assert.AreEqual(expected, got);

102}

103}

104

105

106

107

108

109

110

111

112

113

114

115

116

[TestFixture]

[TestOf(typeof(Asymptote))] public class AsymptoteTest

{

[Test]

public void TestAlpha()

{

var a = new Asymptote(Function); var expectedAlpha = 1;

Assert.AreEqual(expectedAlpha, a.Alpha);

}

117

118

119

120

121

122

123

124

[Test]

public void TestK()

{

var a = new Asymptote(Function); var expectedK = 1; Assert.AreEqual(expectedK, a.K);

}

125

private double Function(double x) =>

126

10 * x;

127}

128}

21

CПрограммный анализ алгоритма пузырьковой сортировки

1using System;

2using static System.Math;

3

4namespace MathUtilities

5{

6

7

8

9

10

11

12

13

14

15

///<summary>

///Реализация алгоритма анализа ББФ с помощью БМФ.

///</summary>

public class InfiniteAnalyzer

{

///<summary>

///Анализатор бесконечно малой величины.

///</summary>

private readonly InfinitesimalAnalyzer _analyzer;

16/// <summary>

17/// Собственно, сортировка.

18/// </summary>

19/// <remark>

20/// Вместо неё может быть любая ББФ, которая по методу `Sort` возвратит

,! число.

21/// </remark>

22private readonly ISort _sort;

23

24public InfiniteAnalyzer()

25{

26

// ББФ := 1

/ БМФ(1 / x)

27

_analyzer =

new InfinitesimalAnalyzer((x) => (1.0 /

 

,! IterationsAmount((int) Round(1 / x))));

28

_sort = new BubbleSort();

29

}

 

30

31/// <summary>

32/// Табличный вид функции.

33///

34/// Определяется с 10 до 10^6. На больших числах выполняется слишком

 

,!

долго.

35

///

</summary>

36

/// <returns>табличный вид функции</returns>

37

public TableItem[] GetTableRepresentation() =>

38

 

_analyzer.GetTableRepresentation(1, 6);

39

 

 

40

 

 

22

41/// <summary>

42/// Рассчитывает ассимптоту lg-графика БМФ, которая задана вместо ББФ.

43/// </summary>

44/// <returns>асимптота графика</returns>

45public Asymptote GetAsymptote() =>

46

_analyzer.GetAsymptote();

47

48/// <summary>

49/// Рассчитывает коэффициент `C` БМФ, которая задана вместо ББФ.

50/// </summary>

51/// <returns></returns>

52public double GetCoefficient() =>

53

_analyzer.GetCoefficient();

54

55/// <summary>

56/// Считает количество перестановок для массива.

57/// </summary>

58/// <param name="itemsAmount">количество элементов массива</param>

59/// <returns>количество перестановок в массиве</returns>

60private int IterationsAmount(int itemsAmount)

61{

62

// пустой массив

63

var arr = new int[itemsAmount];

64

// заполняем массив наихудшим случаем

65

for (int i = 0; i < itemsAmount; i++)

66

arr[i] = i;

67

// запускаем сортировку и передаём количество перестановок

68

return _sort.Sort(arr);

69}

70}

71

72/// <summary>

73/// Интерфейс сортировки.

74/// </summary>

75public interface ISort

76{

77/// <summary>

78/// Количество перестановок, произведённых для сортировки.

79/// </summary>

80/// <param name="arr">массив для сортировки</param>

81/// <returns>количество перестановок, произведённых для

,! сортировки</returns>

82int Sort(int[] arr);

83}

84

85

86

23

87/// <summary>

88/// Реализация пузырьковой сортировки.

89/// </summary>

90public class BubbleSort : ISort

91{

92/// <summary>

93/// Собственно сама сортировка.

94/// </summary>

95/// <remark>

96/// Атрибуция:

,! https://ru.wikibooks.org/wiki/Примеры_реализации_сортировки_пузырьком

97/// </remark>

98/// <param name="arr">массив, который нужно отсортировать</param>

99/// <returns>количество перестановок</returns>

100public int Sort(int[] arr)

101{

102

// изначально перестановок нет

103

int counter = 0;

104

for (int i = 0; i < arr.Length - 1; i++)

105

{

106

for (int j = 0; j < arr.Length - i - 1; j++)

107

{

108

if (arr[j+1] > arr[j])

109

{

110

swap(ref arr[j], ref arr[j+1]);

111

counter++;

112

}

113

}

114

}

115

// передать количество перестановок

116

return counter;

117

}

118

 

119/// <summary>

120/// Типичная перестановка значений переменных.

121/// </summary>

122/// <param name="a">первая переменная</param>

123/// <param name="b">вторая переменная</param>

124private static void swap(ref int a, ref int b)

125{

126

b += a;

127

a -=

b;

128

b -=

a;

129}

130}

131}

24