Bonjour,
Je travaille en ce moment sur le solveur de l'interpolation de Lagrange. Le polynôme est de degré variable, donc j'ai programmé un tableau qui s'adapte en fonction du nombre de points. J'ai donc une classe pour l'entrée des valeurs, et une classe pour la résolution de l'équation.
J'arrive à initialiser le nombre de points n, mais pas leurs coordonnées x[] et y[]. Voici le code pour que ce soit plus compréhensible.
Le code qui demande d'entrée les valeurs :
Le code qui résout l'équation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 using System; using System.Collections.Generic; using System.Text; namespace Lagrande_interpolation { public class Eq_values { public int i {get; set; } public int j { get; set; } public int n { get; set; } public float [] x { get; set; } public float [] y { get; set; } public Eq_values() { float[] x = new float[100]; float[] y = new float[100]; float xp, yp = 0, p, l, expd; Console.Write("Enter number of data : "); n = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Enter data : "); for (i = 0; i <= n - 1; i++) { Console.Write($"x[{i}] = "); x[i] = Convert.ToInt32(Console.ReadLine()); Console.Write($"y[{i}] = "); y[i] = Convert.ToInt32(Console.ReadLine()); } } } }
Le problème intervient à la ligne 15 de la class Program. J'arrive à initialiser i, j, n, mais mais pas les valeurs de x[]. Alors comment initialiser un tableau dans une autre classe ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 using System; namespace Lagrande_interpolation { class Program { static void Main(string[] args) { Eq_values eq_values; eq_values = new Eq_values(); int i = eq_values.i; int j = eq_values.j; int n = eq_values.n; float[] x = eq_values.[]x; Console.WriteLine("Enter interpolation point : "); xp = Console.Read(); /* Implementing Lagrange Interpolation */ for (i = 0; i <= n - 1; i++) { p = 1; for (j = 0; j <= n - 1; j++) { if (i != j) { p *= ((xp - x[j]) / (x[i] - x[j])); } } yp = yp + p * y[i]; } Console.WriteLine("Interpolated value at ", xp, " is ", yp); /* Calculus method */ for (i = 0; i <= n - 1; i++) { l = 0; // Equation form Console.Write($"l[{i}] = "); for (j = 0; j <= n - 1; j++) { if (i != j) { Console.Write($"((x - x[{j}]) / (x[{i}] - x[{j}]))"); } } Console.Write("\n"); // Equation values Console.Write($"l[{i}] = "); for (j = 0; j <= n - 1; j++) { if (i != j && x[j] > 0) { Console.Write($"((x - {x[j]}) / ({x[i]} - {x[j]}))"); } if (i != j && x[j] < 0) { Console.Write($"((x + {-x[j]}) / ({x[i]} + {-x[j]}))"); } } Console.Write("\n"); // Factored equation Console.Write($"l[{i}] = "); float eq = 1; for (j = 0; j <= n - 1; j++) { if (i != j) { eq *= (x[i] - x[j]); } } Console.Write(eq); for (j = 0; j <= n - 1; j++) { if (i != j && x[j] > 0) { Console.Write($"(x - {x[j]})"); } if (i != j && x[j] < 0) { Console.Write($"(x + {-x[j]})"); } } Console.Write("\n\n"); } } } }
J'en profite pour faire une parenthèse sur les lignes 28 et 30 de la class Eq_values. L'entrée de valeurs ne prend en compte que les entiers, comment faire pour que les float soient pris en compte ?
Merci à tous pour votre aide.
Partager