-
Notifications
You must be signed in to change notification settings - Fork 0
/
func.h
66 lines (53 loc) · 1.3 KB
/
func.h
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
#include <math.h>
/* Returns value of function for passed variables x_i,
* dim is equal to number of those variables/dimension of
* resolved problem
*/
float function(float *x, int dim){
/* sum is the first element of equation and + 1
* multiplication is the multiplication over n
*/
float sum=0.0, multiplication=1.0;
for(int i=0; i<dim; i++)
{
sum += x[i]*x[i];
multiplication *= cos(x[i]/(i+1));
}
sum /= 40.0;
sum += 1.0;
return sum - multiplication;
}
float simpleFunction() {
}
float gradient_norm(float *dx, int dim)
{
float sum = 0.0;
for(int i=0; i<dim; i++)
{
sum += dx[i]*dx[i];
}
return sqrt(sum);
}
/* Returns value of gradient in position given by x vector
* It equals to sum of partial derrivatives of all function variables
* @ x - vector of variables
* @ dx - partial derivative
* @ dimension - dimension of space, also x/dx size
*/
int gradient(float *x, float *dx, int dimension)
{
int dim = dimension;
for(int i=0; i < dim; i++)
{
dx[i] = -1.0 / (i+1.0) * sin( x[i] / (i+1.0) );
for(int j=0; j < dim; j++)
{
if(j != i)
{
dx[i] *= cos(x[j]/(j+1.0));
}
}
dx[i] += 2.0 * x[i] / 40.0;
}
return 0;
}