예제 #1
0
		public SistemaEcuaciones(params Ecuacion[] ValEcuaciones)
		{
			double[] Sols = null;
			double DetA = 0;
			int[] Columnas = null;
			Matriz Mat = null;
			Matriz MatOr = null;

			mEcuaciones = ValEcuaciones;
			mNumeroIncognitas = 0;
			mEsHomogeneo = TestHomogeneidad();

			for (int i = 0; i <= mEcuaciones.GetUpperBound(0); i++) {
				if (mNumeroIncognitas < mEcuaciones[i].NumeroVariables)
					mNumeroIncognitas = mEcuaciones[i].NumeroVariables;
			}

			if (mEsHomogeneo) {
				mMatrizPrincipal = Matriz.MatrizUnitaria(mNumeroIncognitas + 1);
				mMatrizAmpliada = Matriz.MatrizUnitaria(mNumeroIncognitas + 1);
				mRangoMatrizPrincipal = 0;
				mRangoMatrizAmpliada = 0;

				Sols = new double[mNumeroIncognitas];

				mSolucion = new SolucionSistema(Sols);
			} else {
				mMatrizAmpliada = new Matriz(mEcuaciones.GetUpperBound(0) + 1, mNumeroIncognitas + 1);

				for (int i = 0; i <= mEcuaciones.GetUpperBound(0); i++) {
					mMatrizAmpliada.EstablecerValoresPorFila(i, mEcuaciones[i].Variables);
				}

				mMatrizPrincipal = Matriz.SubMatrizPorColumna(mMatrizAmpliada, mNumeroIncognitas);

				mRangoMatrizAmpliada = Matriz.Rango(mMatrizAmpliada);
				mRangoMatrizPrincipal = Matriz.Rango(mMatrizPrincipal);

				if ((mRangoMatrizPrincipal == mRangoMatrizAmpliada)) {
					if (mRangoMatrizAmpliada == mNumeroIncognitas) {
						//RESOLUCION POR REGLA DE CRAMER:

						Sols = new double[mNumeroIncognitas];
						Columnas = new int[mMatrizPrincipal.Columnas];

						if (mMatrizPrincipal.EsCuadrada) {
							DetA = Matriz.CalculoDeterminante(mMatrizPrincipal);
							MatOr = mMatrizPrincipal.Copia();
						} else {
							MatOr = Matriz.SubMatrizPorTamaño(mMatrizPrincipal, mNumeroIncognitas, mNumeroIncognitas);
							DetA = Matriz.CalculoDeterminante(MatOr);
						}

						for (int i = 0; i <= mNumeroIncognitas - 1; i++) {
							Mat = MatOr.Copia();

							Mat.EstablecerValoresPorColumna(i, mMatrizAmpliada.ObtenerColumna(mNumeroIncognitas));

							Sols[i] = Matriz.CalculoDeterminante(Mat) / DetA;
						}

						mSolucion = new SolucionSistema(Sols);
					} else {
						mSolucion = new SolucionSistema(TipoSolucionSistema.SistemaCompatibleIndeterminado);
					}
				} else {
					mSolucion = new SolucionSistema(TipoSolucionSistema.SistemaIncompatible);
				}
			}
		}