public static void Main()
double error_cuadrado_total, error_cuadrado_total_viejo,
variable_criterio = 0.0001;
double[] r = new double[18];
double[,] jacobiana = new double[18, 4];
double[,] matriz = { { 0, 0, 0, 0, 0 },
double[] temp = {65, 69, 76, 82, 89, 94, 96, 96, 92, 85, 76, 67, 58, 60, 70, 80, 82, 893};
double[] mes = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 };
double[] x = { 17, 0.5, 10.5, 77 };
error_cuadrado_total_viejo = variable_criterio * 2;
error_cuadrado_total = 0;
while (Math.Abs(error_cuadrado_total - error_cuadrado_total_viejo)
error_cuadrado_total_viejo = error_cuadrado_total;
error_cuadrado_total = 0;
for (int i = 0; i < 18; i = i + 1)
r[i] = x[0] * Math.Sin(x[1] * mes[i] + x[2]) + x[3] - temp[i];
error_cuadrado_total = error_cuadrado_total + r[i] * r[i];
jacobiana[i, 0] = Math.Sin(mes[i] * x[1] + x[2]);
jacobiana[i, 1] = mes[i] * x[0] * Math.Cos(mes[i] * x[1] + x[2]);
jacobiana[i, 2] = x[0] * Math.Cos(mes[i] * x[1] + x[2]);
for (int i = 0; i < 4; i = i + 1)
for (int j = 0; j < 4; j = j + 1)
for (int k = 0; k < 18; k = k + 1)
= matriz[i, j] + jacobiana[k, i] * jacobiana[k, j];
for (int i = 0; i < 4; i = i + 1)
for (int j = 0; j < 1; j = j + 1)
for (int k = 0; k < 18; k = k + 1)
matriz[i, 4] = matriz[i, 4] - r[k] * jacobiana[k, i];
for (int reng = 0; reng < 4; reng = reng + 1)
pivote = matriz[reng, reng];
for (int colu = 0; colu < 5; colu = colu + 1)
matriz[reng, colu] = matriz[reng, colu] / pivote;
for (int reng_elimi = 0; reng_elimi < 4; reng_elimi = reng_elimi + 1)
factor = matriz[reng_elimi, reng];
for (int colu_elimi = 0; colu_elimi < 5;
colu_elimi = colu_elimi + 1)
matriz[reng_elimi, colu_elimi]
= matriz[reng_elimi, colu_elimi]
- factor * matriz[reng, colu_elimi];
Console.WriteLine(x[0]+" "+x[1]+" "+x[2]+" "+x[3]
+" "+error_cuadrado_total);