- •Определение порядков малости
- •Правая формула численного дифференцирования
- •Центральная формула численного дифференцирования
- •Формулы численного интегрирования методом прямоугольников
- •Формулы численного интегрирования методом трапеций
- •Программный способ нахождения порядков малости бесконечно малых величин
- •Численный анализ бесконечно малых величин
- •Численный анализ бесконечно большой величины
- •Дробные производные
- •Вычисление дробных производных
- •Вычисление дробных производных для дробной степени
- •Анализ бесконечно малых функций нескольких переменных
- •Вычисления для ортогонального вектора
- •Вычисление графика порядков малости
- •Программный анализ бесконечно малых
- •Тест анализатора бесконечно малых
- •Программный анализ алгоритма пузырьковой сортировки
- •Тест анализатора пузырьковой сортировки
- •Программный анализ БМФ многих переменных
- •Тест анализатора БМФ многих переменных
AПрограммный анализ бесконечно малых
1using static System.Math;
2using System;
3
4namespace MathUtilities
5{
6
7
8
9
///<summary>
///Исследует бесконечно малые функции.
///</summary>
public class InfinitesimalAnalyzer
10{
11/// <summary>
12/// Степени десятки для составления табличного вида БМФ.
13/// </summary>
14private static readonly double[] PowersOfTen = new double[]{
15 |
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 |
16 |
}; |
17
18/// <summary>
19/// Функция для исследования.
20/// </summary>
21public Func<double, double> Function { get; set; }
22
23/// <summary>
24/// Типичный конструктор для создания новой функции.
25/// </summary>
26/// <param name="function">функция для исследования</param>
27public InfinitesimalAnalyzer(Func<double, double> function)
28{
29 |
Function = function; |
30 |
} |
31
32/// <summary>
33/// Определяет, является ли функция бесконечно малой.
34/// </summary>
35/// <returns>истина, если функция бесконечно мала</returns>
36public bool IsInfinitesimal() =>
37 |
Function(0) == 0; |
38
39/// <summary>
40/// Определяет табличный вид функции, в том числе логарифмическую
,! таблицу.
41/// </summary>
42/// <param name="start">с какой позиции начинать</param>
15
43/// <param name="amount">количество ячеек; не более 16; start + amount <= ,! 16</param>
44/// <returns>массив с ячейками</returns>
45public TableItem[] GetTableRepresentation(uint start = 0, uint amount =
|
,! 16) |
46 |
{ |
47 |
if (amount > 16) |
48 |
throw new ArgumentException("количетсво ячеек не более 16"); |
49 |
|
50
51
52
if (start + amount > 16)
throw new ArgumentException("нельзя пытаться вылезти за 16");
53
54
55
// 16 степеней десятки у нас есть
var answer = new TableItem[amount - start];
56 |
// все степени |
и значения функции при этих аргументах добавляем в |
|
,! массив |
|
57 |
for (int i = (int) start; i < amount; i++) |
|
58 |
answer[i - |
start] = new TableItem{ |
59 |
Input |
= PowersOfTen[i], |
60 |
Output = Function(PowersOfTen[i]) |
|
61 |
}; |
|
62 |
|
|
63
64
65
66
67
68
69
70
71
return answer;
}
///<summary>
///Определяет асимптоту lg-графика.
///</summary>
public Asymptote GetAsymptote() => new Asymptote(Function);
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
///<summary>
///Определяет коэффициент `C` БМФ.
///</summary>
public double GetCoefficient() => Pow(10, GetAsymptote().K);
}
///<summary>
///Представляет собой ячейку в табличном виде функции.
///</summary>
public struct TableItem
{
///<summary>
///Аргумент функции.
///</summary>
16
87
88
public double Input { get; set; }
89
90
91
92
93
///<summary>
///Значение функции.
///</summary>
public double Output { get; set; }
94
95
96
97
98
///<summary>
///Десятичный логарифм аргумента функции.
///</summary>
public double LgInput { get => Log10(Input); }
99/// <summary>
100/// Десятичный логарифм значения функции.
101/// </summary>
102/// <remark>
103/// Вычисляет логарифм значения по модулю.
104/// </remark>
105public double LgOutput { get => Log10(Abs(Output)); }
106}
107
108
109
110
111
112
113
114
115
116
117
///<summary>
///Представляет собой асимптоту lg-графика.
///</summary>
public class Asymptote
{
///<summary>
///Коэфициент при X.
///</summary>
public double Alpha { get; set; }
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
///<summary>
///Свободный член.
///</summary>
public double K { get; set; }
///<summary>
///Создаёт асимптоту
///</summary>
///<param name="function"></param>
public Asymptote(Func<double, double> function)
{
//по сути, коэф находится там, где
//если хотя бы два отрезка представляют собой прямую линию;
//но предположим, контрольная точка находится на точке lg(h) = -4
var left = Pow(10, -4);
var right = Pow(10, -4.001);
17
134 |
|
135 |
Alpha = LogOfAbs(function(right) / function(left)) / Log10(right / |
|
,! left); |
136 |
K = -1 * Log10(right) * LogOfAbs(function(left) / function(right)) / |
|
,! Log10(left / right) + LogOfAbs(function(right)); |
137 |
} |
138 |
|
139 |
private double LogOfAbs(double a) => |
140 |
Log10(Abs(a)); |
141}
142}
18