-
Notifications
You must be signed in to change notification settings - Fork 1
/
main.cpp
128 lines (97 loc) · 3.78 KB
/
main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
//
// Created by zahorack on 10/15/19.
//
#include "examples/include/lecture_1.h"
#include "examples/include/project_1.h"
#include "examples/include/project_2.h"
#include "symbolicc++.h"
#include "optimization/include/NewtonRaphson.h"
#include "optimization/include/LevenbergMarquardt.h"
#include "optimization/include/NelderMead.h"
#include "optimization/include/GoldenSectionSearch.h"
#include "optimization/include/DavidonSearch.h"
#include "numerical_computing/include/Plot.h"
#include "numerical_computing/include/Function.h"
#include "numerical_computing/include/TransferFunction.h"
#include "numerical_control/include/SystemModel.h"
#include "QuadraticEquation.h"
#include "LinearEquationsSystem.h"
static void optimization_example()
{
// static const Symbolic x("x"), y("y");
using namespace TwoDimensional;
Point StartPoint(1.5, 5.0);
Function func(((x - 2)*(x - 2) + (y - x*x)*(y - x*x)));
Plot::function(func.getSymbolic());
Optimization::NewtonRaphson methodOne(func, StartPoint, 0.001);
methodOne.findMinimum();
Optimization::LevenbergMarquardt methodTwo(func, StartPoint, 0.01);
methodTwo.findMinimum();
Optimization::NelderMead methodThree(func, StartPoint, 0.05, 2.5);
methodThree.findMinimum();
}
static void one_dimensional_problem()
{
OneDimensional::Function func(x*x*x*x - 3*x*x*x + x +7 );
Optimization::GoldenSectionSearch goldSel(func, 1, 3);
goldSel.findMinimum();
Optimization::DavidonSearch davidon(SearchMode::Minimization, func, 1, 3, 0.0001);
davidon.findMinimum();
}
static void control_system_example()
{
FirstOrder::SystemModel system(TransferFunction(1.5, (28*s + 0.3)));
cout<<"Gain:"<<system.getGain()<<"\n";
cout<<"Time:"<<system.getTimeConstant()<<"\n";
cout<<"Roots:"<<system.getRoots()<<"\n";
cout<<"transition func:"<<system.transitionFunction()<<"\n";
cout<<"impulse func:"<<system.impulseFunction()<<"\n";
Plot::systemModel(system);
}
static void quadratic_equations_example()
{
QuadraticEquation equation(50*s*s -20*s + 100, Symbolic(s));
QuadraticEquationResult result = equation.solve();
if(result.root1.isValid) {
cout << "root1: " << result.root1.real << " + " <<result.root1.imaginary << "i\n";
}
if(result.root2.isValid) {
cout << "root2: " << result.root2.real << " + " <<result.root2.imaginary << "i\n";
}
}
static void linear_equations_system_example()
{
Symbolic equation1 = x + 2*y - z - 2;
Symbolic equation2 = x - y + 2*z - 5;
Symbolic equation3 = 2*x + 2*y + 2*z - 12;
ThreeDimensional::LinearEquationsSystem system(equation1, equation2, equation3, x, y, z);
ThreeDimensional::LinearEquationsSystemResult result(system.solve());
cout<<"root1 = "<<result.root1<<"\n";
cout<<"root2 = "<<result.root2<<"\n";
cout<<"root3 = "<<result.root3<<"\n";
}
int main() {
// examples::lectureOne::taskOne();
// examples::lectureOne::taskTwo();
// examples::lectureOne::taskThree();
// optimization_example();
// one_dimensional_problem();
// TwoDimensional::Function myFunction((x - 2)*(x + 5) + y*y);
// Plot::function(myFunction.getSymbolic());
// control_system_example();
linear_equations_system_example();
// SecondOrder::SystemModel system(TransferFunction(1, (0.1*s*s + 2.4*s + 8.0)));
// system.partialFractionsSolution();
// cout<<"\n Gain:"<<system.getGain()<<"\n";
// Symbolic left = ((Symbolic(1),Symbolic(2),Symbolic(3)),
// (Symbolic(4),Symbolic(5),Symbolic(6)),
// (Symbolic(7),Symbolic(8),Symbolic(9)));
//
// Symbolic right = ( (Symbolic(1)),
// (Symbolic(2)),
// (Symbolic(3)));
//
// ThreeDimensional::LinearEquationsSystem system(left, right);
// system.solve();
return 0;
}