- •Определение порядков малости
- •Правая формула численного дифференцирования
- •Центральная формула численного дифференцирования
- •Формулы численного интегрирования методом прямоугольников
- •Формулы численного интегрирования методом трапеций
- •Программный способ нахождения порядков малости бесконечно малых величин
- •Численный анализ бесконечно малых величин
- •Численный анализ бесконечно большой величины
- •Дробные производные
- •Вычисление дробных производных
- •Вычисление дробных производных для дробной степени
- •Анализ бесконечно малых функций нескольких переменных
- •Вычисления для ортогонального вектора
- •Вычисление графика порядков малости
- •Программный анализ бесконечно малых
- •Тест анализатора бесконечно малых
- •Программный анализ алгоритма пузырьковой сортировки
- •Тест анализатора пузырьковой сортировки
- •Программный анализ БМФ многих переменных
- •Тест анализатора БМФ многих переменных
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