public class ModeloTemperatura
private readonly double[] _meses;
private readonly double[] _temperaturas;
public ModeloTemperatura(double[] meses, double[] temperaturas)
_temperaturas = temperaturas;
public double[] AjustarModeloSenoidal()
double sumY = 0, sumSinX = 0, sumCosX = 0, sumYSinX = 0, sumYCosX = 0;
double sumSinXSquared = 0, sumCosXSquared = 0, sumSinXCosX = 0;
for (int i = 0; i < n; i++)
double sinX = Math.Sin(_meses[i]);
double cosX = Math.Cos(_meses[i]);
sumY += _temperaturas[i];
sumYSinX += _temperaturas[i] * sinX;
sumYCosX += _temperaturas[i] * cosX;
sumSinXSquared += sinX * sinX;
sumCosXSquared += cosX * cosX;
sumSinXCosX += sinX * cosX;
{ sumSinX, sumSinXSquared, sumSinXCosX },
{ sumCosX, sumSinXCosX, sumCosXSquared }
double[] B = { sumY, sumYSinX, sumYCosX };
double[] coeficientes = ResolverSistemaLineal(A, B);
private static double[] ResolverSistemaLineal(double[,] A, double[] B)
double[,] augmentedMatrix = new double[n, n + 1];
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
augmentedMatrix[i, j] = A[i, j];
augmentedMatrix[i, n] = B[i];
for (int i = 0; i < n - 1; i++)
for (int k = i + 1; k < n; k++)
double factor = augmentedMatrix[k, i] / augmentedMatrix[i, i];
for (int j = i; j <= n; j++)
augmentedMatrix[k, j] -= factor * augmentedMatrix[i, j];
double[] x = new double[n];
for (int i = n - 1; i >= 0; i--)
x[i] = augmentedMatrix[i, n];
for (int j = i + 1; j < n; j++)
x[i] -= augmentedMatrix[i, j] * x[j];
x[i] /= augmentedMatrix[i, i];
public static void Main()
double[] mesesNuevaYork = { 1, 3, 4, 5, 8, 10, 11 };
double[] temperaturasNuevaYork = { -8, 11, 23, 29, 35, 10, 2 };
double[] mesesSantiago = { 1, 2, 4, 6, 8, 10, 12 };
double[] temperaturasSantiago = { 25, 22, 16, 7, -2, 13, 21 };
ModeloTemperatura modeloNuevaYork = new ModeloTemperatura(mesesNuevaYork, temperaturasNuevaYork);
ModeloTemperatura modeloSantiago = new ModeloTemperatura(mesesSantiago, temperaturasSantiago);
double[] coeficientesNuevaYork = modeloNuevaYork.AjustarModeloSenoidal();
double[] coeficientesSantiago = modeloSantiago.AjustarModeloSenoidal();
Console.WriteLine("Modelo para Nueva York:");
Console.WriteLine($"f(x) = {coeficientesNuevaYork[0]} + {coeficientesNuevaYork[1]} * sin(x) + {coeficientesNuevaYork[2]} * cos(x)");
Console.WriteLine("Modelo para Santiago de Chile:");
Console.WriteLine($"f(x) = {coeficientesSantiago[0]} + {coeficientesSantiago[1]} * sin(x) + {coeficientesSantiago[2]} * cos(x)");