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
|
//les constantes, simplifiées au max pour pouvoir faire les calculs à la main
const int nbre = 5; //sachant que deux n'interviendront pas dans les calculs mais seront toujours nuls
const decimal pasTemps = 0.1M;
const decimal v = 1;
const decimal pas = 1;
decimal[] t1 = new decimal[nbre];
decimal[] t2 = new decimal[nbre];
decimal[] t3 = new decimal[nbre];
// t3[i] = 2 * t2[i] - t1[i] + pasTemps² * v² / pas² * (t2[i + 1] + t2[i - 1] - 2 * t2[i])
decimal part1; // 2 * t2[i]
decimal part2; // pasTemps²
decimal part3; // v²
decimal part4; // pas²
decimal part5; // part2 * part3 (pasTemps² * v²)
decimal part6; // part5 / part4 (pasTemps² * v² / pas²)
decimal part7; // t2[i + 1] + t2[i - 1]
decimal part8; // part7 - part1 (t2[i + 1] + t2[i - 1] - 2 * t2[i])
decimal part9; // part6 * part8 ' pasTemps² * v² / pas² * (t2[i + 1] + t2[i - 1] - 2 * t2[i])
decimal part10; // part1 - t2[i] (2 * t2[i] - t1[i])
// t3[i] = part10 + part9
t1[nbre/2] = 1;
t2[nbre/2] = 1;//initialisation
for (int j = 0; j < 5; j++)
{
Console.WriteLine("Etape " +j);
for (int i = 1; i <nbre-1; i++) //on laisse tomber les extrémités, qui vaudront toujours 0
{
part1 = decimal.Multiply(2, t2[i]);
part2 = decimal.Multiply(pasTemps, pasTemps);
part3 = decimal.Multiply(v, v);
part4 = decimal.Multiply(pas, pas);
part5 = decimal.Multiply(part2, part3);
part6 = decimal.Divide(part5, part4);
part7 = decimal.Add(t2[i + 1], t2[i - 1]);
part8 = decimal.Subtract(part7, part1);
part9 = decimal.Multiply(part6, part8);
part10 = decimal.Subtract(part1, t1[i]);
t3[i] = decimal.Add(part10, part9);
Console.WriteLine(t3[i]);
}
// Ici, il y a une erreur
// tu passes les références
// t1 = t2 => veut dire que t1 et t2 ont le même pointeur
// donc les modifications de valeurs sur t2 seront affecté à t1 et reciproquement...
//t1 = t2; t2 = t3;//on échange et on recommence
// Tu peux faire comme ceci
Array.Copy(t2,0,t1,0,nbre);
Array.Copy(t3,0,t2,0,nbre);
// ou comme ceci
// for (int i = 0; i <nbre; i++)
// {
// t1(i) = t2(i);
// t2(i) = t3(i);
// }
}
Console.Read(); |
Partager