Skip to content
Snippets Groups Projects
Commit f186c315 authored by ExtraDev's avatar ExtraDev
Browse files

create group structur and can pass number point wanted. Problem in point > 39. To fix... :D

parent 10c03d06
Branches
No related tags found
No related merge requests found
No preview for this file type
No preview for this file type
No preview for this file type
#include "equation.h" #include "equation.h"
double get_random() { double get_random() {
return ((double)(rand() % (RND_MAX + 1 - RND_MIN) + RND_MIN))/10; return ((double)(rand() % (RND_MAX + 1 - RND_MIN) + RND_MIN))/1;
} }
void generate_points() { void generate_points(point_t* points, int N) {
for(int i = 0; i < NB_POINTS; i++){ for(int i = 0; i < N; i++){
point_t pt; point_t pt;
pt.x = i * GRAPH_X / NB_POINTS; pt.x = i * GRAPH_X / NB_POINTS;
pt.y = EQUATION_PENTE * pt.x + EQUATION_ORDO + get_random(); pt.y = EQUATION_PENTE * pt.x + EQUATION_ORDO + get_random();
printf("points[%d] = (point_t){.x=%f, .y=%f};\n", i, pt.x, pt.y); // printf("points[%d] = (point_t){.x=%f, .y=%f};\n", i, pt.x, pt.y);
points[i] = pt;
} }
} }
void derive() { void split_point_into_groups(point_t* points, point_t** groups, int n_points, int n_groups) {
// y = c * x + d + r int cpt = 0;
for (int i = 0; i < n_points; i++) {
if(i % n_groups-1 == 0) {
cpt++;
}
groups[cpt][i] = points[i];
}
}
void create_group(group_t *group, point_t* points, int n_points, int n_groups) {
group->n_points = n_points;
group->n_groups = n_groups;
group->points = malloc(sizeof(point_t*) * n_groups);
for (int i = 0; i < group->n_groups; i++) {
group->points[i] = malloc(sizeof(point_t) * (int)(n_points/n_groups));
}
int cpt = 0;
int cpt2 = 0;
for (int i = 0; i < n_points; i++) {
if(i % (int)(n_points/n_groups) == 0) {
cpt++;
cpt2 = 0;
}
group->points[cpt-1][cpt2] = points[i];
cpt2++;
}
}
void print_group(group_t *group){
for (int i = 0; i < group->n_groups; i++)
{
for (int j = 0; j < (int)(group->n_points/group->n_groups); j++)
{
printf("[%d:%d] = %f,%f\n", i, j, group->points[i][j].x, group->points[i][j].y);
}
}
}
void destroy_group(group_t *group) {
for (int i = 0; i < group->n_groups; i++)
{
free(group->points[i]);
}
free(group);
} }
...@@ -41,8 +91,7 @@ vector_t descente_radian(point_t* points, int N) ...@@ -41,8 +91,7 @@ vector_t descente_radian(point_t* points, int N)
double C = 0; double C = 0;
double D = 0; double D = 0;
for(int i = 0; i < N; i++) for(int i = 0; i < N; i++) {
{
A += points[i].x * points[i].x; A += points[i].x * points[i].x;
B += points[i].x; B += points[i].x;
C += points[i].x * points[i].y; C += points[i].x * points[i].y;
...@@ -58,7 +107,7 @@ vector_t descente_radian(point_t* points, int N) ...@@ -58,7 +107,7 @@ vector_t descente_radian(point_t* points, int N)
double y = 0.001; //0,000296189 double y = 0.001; //0,000296189
int cpt = 0; int cpt = 0;
while(norme(soustraction_vecteur(vnew,vold)) > y) //0.00001 while(norme(soustraction_vecteur(vnew,vold)) > 0.001) //0.00001
{ {
vold.x = vnew.x; vold.x = vnew.x;
vold.y = vnew.y; vold.y = vnew.y;
...@@ -68,6 +117,7 @@ vector_t descente_radian(point_t* points, int N) ...@@ -68,6 +117,7 @@ vector_t descente_radian(point_t* points, int N)
//print_vector(vnew); //print_vector(vnew);
cpt++; cpt++;
} }
printf("\n%d\n",cpt); printf("\n%d\n",cpt);
return vnew; return vnew;
} }
......
#ifndef _EQUATION_H #ifndef _EQUATION_H
#define _EQUATION_H #define _EQUATION_H
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include <math.h> #include <math.h>
#define GRAPH_X 10 #define GRAPH_X 10
...@@ -20,8 +21,8 @@ typedef struct _point_t { ...@@ -20,8 +21,8 @@ typedef struct _point_t {
} point_t; } point_t;
typedef struct _group_t { typedef struct _group_t {
int n_group; int n_points, n_groups;
point_t* points; point_t **points;
} group_t; } group_t;
typedef struct _vector_t { typedef struct _vector_t {
...@@ -32,7 +33,9 @@ typedef struct _vector_t { ...@@ -32,7 +33,9 @@ typedef struct _vector_t {
double get_random(); double get_random();
void generate_points(); void generate_points(point_t* points, int N);
void split_point_into_groups(point_t* points, point_t** groups, int n_points, int n_groups);
vector_t descente_radian(point_t* points, int N); vector_t descente_radian(point_t* points, int N);
...@@ -43,6 +46,11 @@ double erreur_quadratique(double a, double b, point_t* points, int nb_points); ...@@ -43,6 +46,11 @@ double erreur_quadratique(double a, double b, point_t* points, int nb_points);
double f(vector_t x); // test double f(vector_t x); // test
double fd(vector_t x); // test double fd(vector_t x); // test
// Gestion des groupes
void create_group(group_t *group, point_t* points, int n_points, int n_groups);
void print_group(group_t *group);
void destroy_group(group_t *group);
// Arithmétique de vecteurs // Arithmétique de vecteurs
vector_t print_vector(vector_t vec); vector_t print_vector(vector_t vec);
vector_t produit_scalaire(double scalaire, vector_t a); vector_t produit_scalaire(double scalaire, vector_t a);
......
...@@ -5,8 +5,19 @@ ...@@ -5,8 +5,19 @@
#include "vector.h" #include "vector.h"
#include "equation.h" #include "equation.h"
int main(int argc, char **argv[]) { int main(int argc, char* argv[]) {
point_t* points = malloc(sizeof(point_t)*NB_POINTS); srand( time( NULL ) );
point_t* points;
int nb_points = NB_POINTS;
if (argc > 1) {
nb_points = atoi(argv[1]);
points = malloc(sizeof(point_t)*nb_points);
generate_points(points, nb_points);
} else {
points = malloc(sizeof(point_t)*NB_POINTS);
points[0] = (point_t){.x=0.000000, .y=0.600000}; points[0] = (point_t){.x=0.000000, .y=0.600000};
points[1] = (point_t){.x=0.000000, .y=1.000000}; points[1] = (point_t){.x=0.000000, .y=1.000000};
points[2] = (point_t){.x=0.000000, .y=0.600000}; points[2] = (point_t){.x=0.000000, .y=0.600000};
...@@ -37,29 +48,35 @@ int main(int argc, char **argv[]) { ...@@ -37,29 +48,35 @@ int main(int argc, char **argv[]) {
points[27] = (point_t){.x=9.000000, .y=10.000000}; points[27] = (point_t){.x=9.000000, .y=10.000000};
points[28] = (point_t){.x=9.000000, .y=9.300000}; points[28] = (point_t){.x=9.000000, .y=9.300000};
points[29] = (point_t){.x=9.000000, .y=10.000000}; points[29] = (point_t){.x=9.000000, .y=10.000000};
}
group_t groups;
create_group(&groups, points, nb_points, 3);
print_group(&groups);
vector_t resAB = descente_radian(points, nb_points);
vector_t resAB = descente_radian(points,NB_POINTS);
point_t* AB = malloc(sizeof(point_t)); point_t* AB = malloc(sizeof(point_t));
*AB = (point_t){resAB.x, resAB.y}; *AB = (point_t){resAB.x, resAB.y};
print_vector(resAB); print_vector(resAB);
double_vector_t *X = create_vector_x(points, NB_POINTS); double_vector_t *X = create_vector_x(points, nb_points);
double_vector_t *Y = create_vector_y(points, NB_POINTS); double_vector_t *Y = create_vector_y(points, nb_points);
double_vector_t *A = create_vector_x(AB, 1); double_vector_t *A = create_vector_x(AB, 1);
double_vector_t *B = create_vector_y(AB, 1); double_vector_t *B = create_vector_y(AB, 1);
export_vector("../X.vec", X); export_vector("../X.vec", X);
export_vector("../Y.vec", Y); export_vector("../Y.vec", Y);
export_vector("../A.vec", A); export_vector("../A.vec", A);
export_vector("../B.vec", B); export_vector("../B.vec", B);
free(points); free(points);
//free(groups);
free(AB); free(AB);
destroy_vector(&X); destroy_vector(&X);
destroy_vector(&Y); destroy_vector(&Y);
destroy_vector(&A); destroy_vector(&A);
destroy_vector(&B); destroy_vector(&B);
// destroy_group(&groups);
} }
\ No newline at end of file
...@@ -12,9 +12,9 @@ B = load_vector("../B.vec") # ...@@ -12,9 +12,9 @@ B = load_vector("../B.vec") #
# Nuage de points # Nuage de points
type_of_data = 'cure' # curve = point connecté type_of_data = 'cure' # curve = point connecté
if type_of_data == 'curve': if type_of_data == 'curve':
plt.plot(X_nuage_point, Y_nuage_point, label="my curve") plt.plot(X_nuage_point, Y_nuage_point, label="Points")
else: else:
plt.scatter(X_nuage_point, Y_nuage_point, marker='x', label="my points") plt.scatter(X_nuage_point, Y_nuage_point, marker='x', label="Points")
# Meilleure droite # Meilleure droite
...@@ -23,13 +23,13 @@ y = x * A + B ...@@ -23,13 +23,13 @@ y = x * A + B
type_of_data = 'curve' # curve = point connecté type_of_data = 'curve' # curve = point connecté
if type_of_data == 'curve': if type_of_data == 'curve':
plt.plot(x, y, label="my curve") plt.plot(x, y, label="Meilleure droite")
else: else:
plt.scatter(x, y, marker='x', label="my points") plt.scatter(x, y, marker='x', label="Meilleure droite")
plt.title("My data") plt.title("Optimisation")
plt.xlabel("X") plt.xlabel("X")
plt.ylabel("Y") plt.ylabel("Y")
plt.legend(loc="upper right") plt.legend(loc="lower right")
plt.show() plt.show()
No preview for this file type
No preview for this file type
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment