Sei sulla pagina 1di 28

<?

php
/*
*Calculadoradematrices
*/
if(isset($_REQUEST['filas'])&&
is_numeric($_REQUEST['filas']))
$filas=$_REQUEST['filas'];
else
$filas=3;
if(isset($_REQUEST['columnas'])&&
is_numeric($_REQUEST['columnas']))
$columnas=$_REQUEST['columnas'];
else
$columnas=3;
?>
<html>
<head>

<metahttpequiv="ContentType"
content="text/html;charset=UTF8"/>
</head>
<body>
<?php
if(isset($_REQUEST['ayuda'])){
?>
Estableceeltamaoylosdatosdelamatrizypulsa
analizarparaobtenerlosresultados.Segneltamaodela
matriz,tedevolverunosdatosuotros:
<br>
<ul>
<li>Silamatrizescuadrada(mismasfilasy
columnas),tedevolvereldeterminante,elrango,la
inversayla
traspuesta.
</li>
<li>Silamatriztieneunacolumnamasquefilas,se
entenderquelamatrizeslamatrizampliadadeunsistema
deecuaciones,ytedevolverelresultadode
aplicarlaregladeCrameraesamatriz,elrangoyla

traspuesta.
</li>
<li>Silamatriznocumpleningunadelasdos,te
devolverelrangoylatraspuesta.</li>
</ul>
Aceptaelempleodematricesconincgnitasyparamtros
paraalgunosdelosanlisis,comolosdeterminanteso
Cramer.
<br><br>
<h2>Algunosejemplos</h2>
<ahref="/matrices.php?
filas=3&columnas=4&0,0=3&0,1=5&0,2=2&0,3=1&1,0=1&1,1=
1&1,2=1&1,3=0&2,0=2&2,1=3&2,2=4&2,3=2">Matriz
de3x4resolubleporCramer</a><br>
<ahref="/matrices.php?filas=4&columnas=4&0,0=
2&0,1=0&0,2=1&0,3=2&1,0=1&1,1=2&1,2=1&1,3=1&2,0=3&2,1=1&2,2=
2&2,3=0&3,0=5&3,1=1&3,2=3&3,3=4">Matriz
de4x4quepermitecalculardeterminante,rangoe
inversa.</a>
<?php
exit;
}
if(isset($_REQUEST['descargar'])){
highlight_file(__FILE__);
echo'</body></html>';
exit;
}
?>
<h1>Clculodematricespasoapaso</h1>
<p>Necesitasayuda?Pulsa<ahref="/matrices.php?ayuda"
onclick="return!window.open(this.href);">aqu</a></p>
<p><ahref="?descargar"rel="nofollow">Descargaelcodigo
fuente</a></p>
<formmethod="POST"action="/matrices.php">
Tamaodelamatriz:<br>
<label>Filas:&nbsp;<inputtype="text"name="filas"
value="<?phpecho$filas?>"></label>
<label>Columnas:&nbsp;<inputtype="text"name="columnas"
value="<?phpecho$columnas?>"></label>

<br><br>
<table>
<?php
for($fila=0;$fila<$filas;$fila++){
echo'<tr>';
for($columna=0;$columna<$columnas;
$columna++){
$nombre="$fila,$columna";
if(isset($_REQUEST[$nombre]))
$valor=$_REQUEST[$nombre];
else
$valor='';
echo"<td><inputtype='text'size='3'
name='$fila,$columna'value='$valor'></td>";
}
echo'</tr>';
}
?>
</table>
<br>
<inputtype="submit"value="Analizar">
</form>
</body>
</html>
<?php
if(!empty($_REQUEST)){//Procesardatos
$array=array();
for($fila=0;$fila<$filas;$fila++){
for($columna=0;$columna<$columnas;$columna++)
{
$nombre="$fila,$columna";
if(isset($_REQUEST[$nombre])&&
strlen($_REQUEST[$nombre])>0)
$array[$fila][$columna]=new
Monomio($_REQUEST[$nombre]);
else
$array[$fila][$columna]=null;
}

}
$matriz=newMatriz($array);
if($matriz>Filas==0){
exit;
}
echo"<h2>Anlisisdelamatriz</h2>".$matriz
>Dibujar()."<br>";
if($matriz>EsCuadradada()){
$determinante=$matriz>Determinante();
echo"Matrizcuadradadade<strong>{$matriz
>Filas}x{$matriz>Columnas}</strong><strong>Matrizde
orden{$matriz>Filas}</strong><br>";
echo"Determinante:<strong>".$determinante
>Mostrar(false)."</strong>";
}
else
echo"Matrizde<strong>{$matriz>Filas}x{$matriz
>Columnas}</strong><br>";
if($matriz>EsCuadradada())
$matriz>DesarrolloDeterminante();
$matriz>DesarrolloCramer();
$matriz>DesarrolloRango();
$matriz>DesarrolloInversa();
$traspuesta=$matriz>Traspuesta();
echo"<h2>Matriztraspuesta</h2>Seobtieneal
intercambiarlasfilasdelamatrizporcolumnas.El
resultadoes:<br><br>".$traspuesta>Dibujar();
}

classMatriz{
public$Array;
public$Filas;
public$Columnas;

functionMatriz($array,$ajustar=true){
$this>Array=$array;
$this>Filas=count($array);
$keys=array_keys($array);
$this>Columnas=count($array[$keys[0]]);
if($ajustar)
$this>Ajustar();
}
functionEsCuadradada(){
return$this>Filas==$this>Columnas;
}
/**
*Desarrollaelcalculodeundeterminante
*
*@returnPolinomio
*/
functionDesarrolloDeterminante(){
if($this>EsCuadradada()){
$desarollo='<h2>Clculodel
determinante</h2>';

$resultado=$this>Determinante();
if($this>Filas==1){
$desarollo.='Alserunamatrizde1x1,el
determinanteeselnicovalordelamatriz.';
}elseif($this>Filas==2){
$desarollo.='Alserunamatrizde2x2,el
determinantequeseobtienees:<br><br>';
$this>ModoMultiplicacion=true;
$desarollo.=sprintf("%s%s%s%s",
$this>MostrarNumero(0,0),$this>MostrarNumero(1,1),
$this>MostrarNumero(0,1),$this>MostrarNumero(1,0));
$this>ModoMultiplicacion=false;
}elseif($this>Filas==3){

$desarollo.='Alserunamatrizde3x3,el
determinanteseobtienemediantelareglade
Sarrus:<br><br>';
$this>ModoMultiplicacion=true;
$desarollo.="[".$this>MostrarNumero(0,
0)."".$this>MostrarNumero(1,1)."".$this
>MostrarNumero(2,2)."+".$this>MostrarNumero(1,0).
"".$this>MostrarNumero(2,1)."".$this
>MostrarNumero(0,2)."+".$this>MostrarNumero(2,0).
"".$this>MostrarNumero(0,1)."".$this
>MostrarNumero(1,2)."]
[".$this>MostrarNumero(0,2)."".$this
>MostrarNumero(1,1)."".$this>MostrarNumero(2,0)."
".$this>MostrarNumero(1,2)."".$this
>MostrarNumero(2,1)."".$this>MostrarNumero(0,0)."
".$this>MostrarNumero(2,2)."".$this
>MostrarNumero(0,1)."".$this>MostrarNumero(1,0).
"]=<br>";
$this>ModoMultiplicacion=false;
$primer=
Polinomio::Multiplicar(Polinomio::Multiplicar($this
>Array[0][0],$this>Array[1][1]),$this>Array[2][2]);
$segundo=
Polinomio::Multiplicar(Polinomio::Multiplicar($this
>Array[1][0],$this>Array[2][1]),$this>Array[0][2]);
$tercero=
Polinomio::Multiplicar(Polinomio::Multiplicar($this
>Array[2][0],$this>Array[0][1]),$this>Array[1][2]);
$cuarto=
Polinomio::Multiplicar(Polinomio::Multiplicar($this
>Array[0][2],$this>Array[1][1]),$this>Array[2][0]);
$quinto=
Polinomio::Multiplicar(Polinomio::Multiplicar($this
>Array[1][2],$this>Array[2][1]),$this>Array[0][0]);
$sexto=
Polinomio::Multiplicar(Polinomio::Multiplicar($this
>Array[2][2],$this>Array[0][1]),$this>Array[1][0]);

$sumas=
Polinomio::Sumar(Polinomio::Sumar($primer,$segundo),
$tercero);
$restas=
Polinomio::Sumar(Polinomio::Sumar($cuarto,$quinto),
$sexto);
$desarollo.=sprintf('[%s%s%s][%s%s
%s]=',$this>MostrarNumero($primer),$this
>MostrarNumero($segundo),$this>MostrarNumero($tercero),
$this>MostrarNumero($cuarto),$this
>MostrarNumero($quinto),$this>MostrarNumero($sexto));
$desarollo.=$this>MostrarNumero($sumas).
"".$this>MostrarNumero($restas)."=";
$desarollo.=$resultado>Mostrar();
}else{
$desarollo.='Secalculaeldeterminante
porrecurrenciaatravsdesusmenoresyadjuntos(porla
primeracolumna):<br>';
$desarollo.='<table><tr>';
$desarrolloAdjunto='';
for($fila=0;$fila<$this>Filas;$fila+
+){
$menor=array();
for($fila2=0;$fila2<$this>Filas;
$fila2++){
if($fila==$fila2)
continue;
else
$menor[]=array_slice($this
>Array[$fila2],1);
}
$matrixMenor=newMatriz($menor,
false);

$multiplicador=
Polinomio::Multiplicar(newMonomio(pow(1,$fila)),$this
>Array[$fila][0]);

if($multiplicador>Numero()&&
$multiplicador>Valor()==0)
continue;
$determinanteMenor=$matrixMenor
>Determinante();
$desarollo.="<td>".$multiplicador
>Mostrar()."</td><td>".$matrixMenor>Dibujar().
"</td>";
$desarrolloAdjunto.="+".
$multiplicador>Mostrar(false,true).''.
$determinanteMenor>Mostrar(false,true);
}
$desarollo.='<td>=</td></tr></table><br>';
$desarollo.=$desarrolloAdjunto.'='.
$resultado>Mostrar();
}
$desarollo.="<h3>Resultado:".$resultado
>Mostrar(false)."</h3>";
echo$desarollo;
return$resultado;
}
returnnull;
}
/**
*Desarrollaelcalculodelrangodelamatriz
*
*@returnint
*/
functionDesarrolloRango(){
echo'<h2>Clculodelrangopordeterminantes</h2>';
$rango=0;
echo'Sevanbuscandomenoresqueseanigualesa0
parahallarelrango:<br><br>';
for($contador=0;$contador<min($this>Filas,

$this>Columnas);$contador++){
//Hallarunmenordedeterminantedistintode
cero
$menor=array();
for($fila=0;$fila<$this>Filas;$fila++){
$distintoCero=false;
for($columna=0;$columna<$this
>Columnas;$columna++){
if($fila+$contador+1<=$this
>Filas&&$columna+$contador+1<=$this>Columnas){
$menor=$this>ObtenerMenor($fila,
$columna,$contador+1);
$determinante=$menor
>Determinante();
$nulo=($determinante>Numero()&&
$determinante>Valor()==0);
echo"<table><tr><td>Menordeorden
".($contador+1)."</td><td>".$menor>Dibujar().
"</td><td>Determinante=".$determinante
>Mostrar(false).
($nulo?'=0&rarr;Buscarmenores
distintosdecero,sinohay,elrangoes'.$rango:'!=
0&rarr;Rango&ge;'.($contador+1)).
"</td></tr></table>";
if($nulo){
$distintoCero=false;
}else{//Pasaraunordenmayor
$rango=$contador+1;
$distintoCero=true;
break;
}
}
}
if($distintoCero)
break;
}

}
echo"<br>Portanto,elrangodelamatrizes:
<strong>$rango</strong>";
return$rango;
}
/**
*Obtieneunmenordeorden$ordenempezandodesdeuna
filaycolumnaespecificadas
*
*@returnMatriz
*/
functionObtenerMenor($filaInicio,$columnaInicio,
$orden){
$menor=array();
$contadorFila=0;
for($fila=$filaInicio;$fila<$this>Filas;
$fila++){
$contadorColumna=0;
for($columna=$columnaInicio;$columna<
$this>Columnas;$columna++){
$menor[$contadorFila][$contadorColumna]=
$this>Array[$fila][$columna];
if($contadorColumna+1>=$orden)
break;
else
$contadorColumna++;
}
if($contadorFila+1>=$orden)
break;
else
$contadorFila++;
}
returnnewMatriz($menor,false);
}
/**

*Desarrollaelcalculodelaregladecramerenla
matrizactual
*
*@returnPolinomio
*/
functionDesarrolloCramer(){
if($this>Filas+1==$this>Columnas){
echo'<h2>RegladeCramer</h2>';
//Obtenerlamatrizdelsistema
$array=array();
for($fila=0;$fila<$this>Filas;$fila++){
$array[$fila]=array_slice($this
>Array[$fila],0,$this>Columnas1);
}
$matrizSistema=newMatriz($array,false);
$determinanteSistema=$matrizSistema
>Determinante();
if($determinanteSistema>Numero()&&
$determinanteSistema>Valor()==0){
echo"Eldeterminantedelsistemaes0,por
tanto,noexistesolucinparalaecuacin";
return;
}
echo"Lamatrizasociadaalsistemaes:".
$matrizSistema>Dibujar()."<br>Ysudeterminante:".
$determinanteSistema>Mostrar(false)."<br><br>
Ahora,paracadaincgnita,secreaunamatriz
obtenidaalcambiarenlamatrizdelsistemalacolumnade
esaincgnitaporladetrminosindependientesysedivide
eldeterminantedeesamatrizporeldeterminantedela
matrizdelsistema:<br><br>";

for($incognita=0;$incognita<$this
>Columnas1;$incognita++){
//Obtenerlamatrizconlacolumnaactual
cambiadaporlacolumnafinaldelamatriz
$array=array();
for($fila=0;$fila<$matrizSistema
>Filas;$fila++){

for($columna=0;$columna<
$matrizSistema>Columnas;$columna++){
if($columna==$incognita)
//Cambiarestacolumnaporlaultima
$array[$fila][$columna]=$this
>Array[$fila][$this>Columnas1];
else
$array[$fila][$columna]=
$matrizSistema>Array[$fila][$columna];
}
}
$matrizIncognita=newMatriz($array,
false);
$determinanteIncognita=$matrizIncognita
>Determinante();
if($determinanteSistema>Numero()&&
$determinanteIncognita>Numero())
$resultado=$determinanteIncognita
>Valor()/$determinanteSistema>Valor();
echo'<table>
<tr>
<tdrowspan="2"><strong>Incgnita'.($incognita+1).
'</strong>:</td>
<td>1/'.$determinanteSistema>Mostrar(true,true).
'</td>
<tdrowspan="2">'.$matrizIncognita>Dibujar().
'</td>
<td>='.$determinanteIncognita>Mostrar(true,
true).'/'.$determinanteSistema>Mostrar(true,true).
(isset($resultado)?'=<strong>'.$resultado.
'</strong>':'').'</td>
</tr>
</table>';
}
}
}
/**

*Calculaeldeterminantedelamatriz
*
*@returnPolinomio
*/
functionDeterminante(){
$cuadrada=$this>EsCuadradada();
if($cuadrada){
if($this>Filas==1){
$res=newPolinomio();
$res>Monomios[]=$this>Array[0][0];
return$res;
}elseif($this>Filas==2){
return
Polinomio::Restar(Polinomio::Multiplicar($this>Array[0][0],
$this>Array[1][1]),Polinomio::Multiplicar($this>Array[0]
[1],$this>Array[1][0]));
}elseif($this>Filas==3){
$sumas=
Polinomio::Sumar(Polinomio::Sumar(Polinomio::Multiplicar(Pol
inomio::Multiplicar($this>Array[0][0],$this>Array[1][1]),
$this>Array[2][2]),
Polinomio::Multiplicar(Polinomio::Multiplicar($this
>Array[1][0],$this>Array[2][1]),$this>Array[0][2])),
Polinomio::Multiplicar(Polinomio::Multiplicar($this
>Array[2][0],$this>Array[0][1]),$this>Array[1][2]));
$restas=
Polinomio::Sumar(Polinomio::Sumar(Polinomio::Multiplicar(Pol
inomio::Multiplicar($this>Array[0][2],$this>Array[1][1]),
$this>Array[2][0]),
Polinomio::Multiplicar(Polinomio::Multiplicar($this
>Array[1][2],$this>Array[2][1]),$this>Array[0][0])),
Polinomio::Multiplicar(Polinomio::Multiplicar($this
>Array[2][2],$this>Array[0][1]),$this>Array[1][0]));
returnPolinomio::Restar($sumas,$restas);
}else{
$resultado=null;
for($fila=0;$fila<$this>Filas;$fila+
+){
$menor=array();

for($fila2=0;$fila2<$this>Filas;
$fila2++){
if($fila==$fila2)
continue;
else
$menor[]=array_slice($this
>Array[$fila2],1);
}
$matrixMenor=newMatriz($menor);
if(isset($resultado)){
$adjunto=
Polinomio::Multiplicar(Polinomio::Multiplicar($matrixMenor
>Determinante(),$this>Array[$fila][0]),newMonomio(pow(
1,$fila)));
$resultado=
Polinomio::Sumar($resultado,$adjunto);
}else{
$resultado=
Polinomio::Multiplicar(Polinomio::Multiplicar($matrixMenor
>Determinante(),$this>Array[$fila][0]),newMonomio(pow(
1,$fila)));
}
}
return$resultado;
}
}
returnnull;
}
/**
*Obtienelatraspuestadelamatrizactual
*
*@returnMatriz
*
*/
functionTraspuesta(){
$array=array();
for($fila=0;$fila<$this>Filas;$fila++){
for($columna=0;$columna<$this>Columnas;
$columna++){

$array[$columna][$fila]=$this
>Array[$fila][$columna];
}
}
returnnewMatriz($array,false);
}
/**
*Desarrollaelcalculodelamatrizinversadela
matrizactual
*
*@returnMatriz
*
*/
functionDesarrolloInversa(){
if($this>EsCuadradada()){
$traspuesta=$this>Traspuesta();
echo"<h2>Matrizinversa</h2>Primeroseobtiene
lamatriztraspuesta:".$traspuesta>Dibujar()."<br>
Ysecrealamatrizconlosadjuntosdela
traspuesta:";
//Obtenerlamatrizdeadjuntos
$arrayAdjuntos=array();
echo'<table>';
for($fila=0;$fila<$this>Filas;$fila++){
echo'<tr>';
for($columna=0;$columna<$this
>Columnas;$columna++){
$menor=$traspuesta>Menor($fila,
$columna);
echo'<td>'.$menor>Dibujar().
'</td>';
$determinanteMenor=$menor
>Determinante();
if($determinanteMenor!=null){
echo'<td>='.$determinanteMenor
>Mostrar().'</td>';

}
$arrayAdjuntos[$fila][$columna]=
Polinomio::Multiplicar($determinanteMenor,newMonomio(pow(
1,$fila+$columna)));
}
echo'</tr>';
}
echo'</table>';
$matrizAdjuntos=newMatriz($arrayAdjuntos,
false);
$determinante=$this>Determinante();
if($determinante>Numero()&&$determinante
>Valor()!=0)
$inverso=
Polinomio::Inverso($determinante);
else{
echo"Eldeterminantedelamatrizdel
sistemaes0,portanto,nosepuedecalcularlainversa.";
return;
}
echo"<br>Lamatrizdeadjuntosobtenidaes:".
$matrizAdjuntos>Dibujar()."<br><br>
Elresultadoeslamultiplicacinentrelamatrizde
adjuntosy1/".$determinante>Mostrar(false)."=".
$inverso>Mostrar(false);
if($inverso>Numero()||count($inverso
>Monomios)==1){
$resultado=$matrizAdjuntos
>Multiplicar($inverso>Monomios[0]);
echo"<br><h3>Resultado</h3>".$resultado
>Dibujar();
}
}
}
/**

*Multiplicalamatrizporunnumeroreal
*@paramMonomio$numero
*@returnMatriz
*/
functionMultiplicar($numero){
$array=array();
for($fila=0;$fila<$this>Filas;$fila++){
for($columna=0;$columna<$this>Columnas;
$columna++){
$array[$fila][$columna]=
Polinomio::Multiplicar($this>Array[$fila][$columna],
$numero);
}
}
returnnewMatriz($array,false);
}
/**
*Obtieneelmenordelamatrizcorrespondienteala
filaylacolumnaespecificada
*@returnMatriz
*/
functionMenor($fila,$columna){
$menor=array();
$filaArray=0;
for($filaR=0;$filaR<$this>Filas;$filaR++){
if($filaR==$fila)
continue;
for($columnaR=0;$columnaR<$this>Columnas;
$columnaR++){
if($columnaR==$columna)
continue;
else
$menor[$filaArray][]=$this
>Array[$filaR][$columnaR];
}
$filaArray++;
}

returnnewMatriz($menor,false);
}
/**
*Obtieneeladjuntodelamatrizcorrespondienteala
filaylacolumnaespecificada
*@returnMatriz
*/
functionAdjunto($fila,$columna){
$menor=$this>Menor($fila,$columna);
returnPolinomio::Multiplicar($menor
>Determinante(),newMonomio(pow(1,$fila+$columna)));
}
functionMostrarNumero($fila,$columna=null){
if(isset($columna))
$numero=$this>Array[$fila][$columna];
else
$numero=$fila;
if($this>ModoMultiplicacion)
return$numero>Mostrar(false,true);
else
return$numero>Mostrar();
}
functionDibujar(){
$link="filas=$this>Filas&columnas=$this
>Columnas";
for($fila=0;$fila<$this>Filas;$fila++){
for($columna=0;$columna<$this>Columnas;
$columna++){
if(!empty($this>Array[$fila][$columna])){
$link.="&$fila,$columna=".$this
>Array[$fila][$columna]>Mostrar(false,false);
}
}
}
$texto="<ahref='/matrices.php?$link'>";
$texto.="

<tableborder='1'style='textalign:center;vertical
align:middle;'>";
for($fila=0;$fila<$this>Filas;$fila++){
$texto.="<trstyle='height:30px;'>";
for($columna=0;$columna<$this>Columnas;
$columna++){
if(isset($this>Array[$fila][$columna]))
$valor=$this>Array[$fila][$columna];
if(!empty($valor))
$texto.="<tdstyle='width:30px;'>".
$valor>Mostrar(false,false)."</td>";
}
$texto.='</tr>';
}
$texto.='</table></a>';
return$texto;
}
functionAjustar(){
for($fila=$this>Filas;$fila>=0;$fila){
$filaVacia=true;
for($columna=0;$columna<$this>Columnas;
$columna++){
if(isset($this>Array[$fila][$columna])){
$filaVacia=false;
break;
}
}
if($filaVacia)
unset($this>Array[$fila]);
else
break;
}
for($columna=$this>Columnas1;$columna>=0;
$columna){
$columnaVacia=true;
for($fila=0;$fila<$this>Filas;$fila++){

if(isset($this>Array[$fila][$columna])){
$columnaVacia=false;
break;
}
}
if($columnaVacia){
for($fila=0;$fila<$this>Filas;$fila+
+){
unset($this>Array[$fila][$columna]);
}
}
else
break;
}
$this>Filas=count($this>Array);
$keys=array_keys($this>Array);
$this>Columnas=count($this>Array[$keys[0]]);

//Rellenarvaloresvacios
for($fila=0;$fila<$this>Filas;$fila++){
for($columna=0;$columna<$this>Columnas;
$columna++){
if(!isset($this>Array[$fila][$columna])){
$this>Array[$fila][$columna]=new
Monomio(0);
}
}
}
}
}
classMonomio{
functionMonomio($num){
if(isset($num)){
if(is_numeric($num)){
$this>TerminoIndependiente=true;
$this>Coeficiente=$num;

}else{
$this>TerminoIndependiente=false;
//Cadenadeltipo2x^2
$resultados=array();
$expresionRegular='/([azAZ])
(?:\^(\d+))?/';
if(preg_match($expresionRegular,$num,
$resultados)!=0){
$this>Incognita=$resultados[1];
if(!isset($resultados[2]))
$this>Grado=1;
else
$this>Grado=$resultados[2];
$num=preg_replace($expresionRegular,
'',$num);
}
if(preg_match('/[+]?[\d.,]*/',$num,
$resultados)!=0){
if($resultados[0]=='+'||
strlen($resultados[0])==0){
$this>Coeficiente=1;
}elseif($resultados[0]==''){
$this>Coeficiente=1;
}else{
$this>Coeficiente=(int)
$resultados[0];
}
}
$this>TerminoIndependiente=!isset($this
>Incognita);
}
}
}
/**
*Indicasielpolinomioactualestaformadoporun

solonumeroreal
*
*@varbool
*/
var$TerminoIndependiente;
var$Incognita;
var$Coeficiente;
var$Grado;
/**
*Representaelmonomioenformadecadena
*
*/
functionMostrar($mostrarMas=true,
$mostrarMenosSeparados=false){
$texto='';
if(isset($this>Coeficiente)){
if(isset($this>Incognita)&&($this
>Coeficiente==1||$this>Coeficiente==1)){
if($this>Coeficiente>0&&$mostrarMas)
$texto.='+';
elseif($this>Coeficiente<0)
$texto.='';
}
else{
if($this>Coeficiente==0)
$texto.=$this>Coeficiente;
elseif($this>Coeficiente>=0){
if($mostrarMas)
$texto.='+'.$this>Coeficiente;
else
$texto.=$this>Coeficiente;
}
else{
if($mostrarMenosSeparados)
$texto.="($this>Coeficiente)";
else
$texto.=$this>Coeficiente;
}
}
}

if(isset($this>Incognita))
$texto.=$this>Incognita;
if(isset($this>Grado)&&$this>Grado!=1)
$texto.="<sup>$this>Grado</sup>";
return$texto;
}
}
classPolinomio{
functionPolinomio(){
$this>Monomios=array();
}
var$Monomios;
/**
*Representaelpolinomioenformadecadena
*
*/
functionMostrar($mostrarMas=true,
$mostrarMenosSeparados=false){
$texto='';
if(isset($this>Monomios)){
$primero=true;
foreach($this>Monomiosas$monomio){
if($mostrarMas==false&&$primero==
false)
$mostrarMas=true;
$texto.=$monomio>Mostrar($mostrarMas,
$mostrarMenosSeparados);
$primero=false;
}
}
return$texto;
}

/**
*Devuelveunvalorqueindicasiestepolinomioesun
uniconumero
*
*/
functionNumero(){
$keys=array_keys($this>Monomios);
return(count($this>Monomios)==1&&$this
>Monomios[$keys[0]]>TerminoIndependiente);
}
/**
*Devuelveelvalornumericodeestepolinomiosiesun
Numero
*
*/
functionValor(){
$keys=array_keys($this>Monomios);
return$this>Monomios[$keys[0]]>Coeficiente;
}
/**
*Reducelosterminossemejantesdeunpolinomio
*
*@paramPolinomio$polinomio1
*@paramPolinomio$polinomio2
*
*@returnPolinomio
*/
functionSimplificar(){
foreach($this>Monomiosas$clave1=>$monomio1){
foreach($this>Monomiosas$clave2=>
$monomio2){
if($clave1==$clave2)
continue;
if($monomio1>TerminoIndependiente&&
$monomio2>TerminoIndependiente||
($monomio1>Incognita==$monomio2
>Incognita&&$monomio1>Grado==$monomio2>Grado)){

$suma=newMonomio(null);
$suma>TerminoIndependiente=$monomio1
>TerminoIndependiente;
$suma>Coeficiente=$monomio1
>Coeficiente+$monomio2>Coeficiente;
$suma>Incognita=$monomio1>Incognita;
$suma>Grado=$monomio1>Grado;
unset($this>Monomios[$clave1]);
unset($this>Monomios[$clave2]);
if($suma>Coeficiente!=0){
$this>Monomios[]=$suma;
}elseif(count($this>Monomios)==0){
$this>Monomios[]=newMonomio(0);
}
$this>Simplificar();
return;
}
}
}
}
/**
*Sumadospolinomios
*
*@paramPolinomio$polinomio1
*@paramPolinomio$polinomio2
*/
staticfunctionSumar($polinomio1,$polinomio2){
$resultado=newPolinomio();
if($polinomio1instanceofMonomio){
$polinomioT=newPolinomio();
$polinomioT>Monomios[]=$polinomio1;
$polinomio1=$polinomioT;
}
if($polinomio2instanceofMonomio){
$polinomioT=newPolinomio();
$polinomioT>Monomios[]=$polinomio2;

$polinomio2=$polinomioT;
}
$resultado>Monomios=array_merge($polinomio1
>Monomios,$polinomio2>Monomios);
$resultado>Simplificar();
return$resultado;
}
/**
*Restadospolinomios
*
*@paramPolinomio$polinomio1
*@paramPolinomio$polinomio2
*/
staticfunctionRestar($polinomio1,$polinomio2){
foreach(array_keys($polinomio2>Monomios)as
$clave){
$polinomio2>Monomios[$clave]>Coeficiente*=
1;
}
returnPolinomio::Sumar($polinomio1,$polinomio2);
}
/**
*Obtieneelinversodeestedeterminante
*@returnPolinomio
*/
staticfunctionInverso($polinomio){
$resultado=newPolinomio();
foreach($polinomio>Monomiosas$monomio1){
$inverso=newMonomio(null);
$inverso>Coeficiente=1/$monomio1
>Coeficiente;
$inverso>Grado=$monomio1>Grado;
$inverso>Incognita=$monomio1>Incognita;
$inverso>TerminoIndependiente=$monomio1
>TerminoIndependiente;

$resultado>Monomios[]=$inverso;
}
return$resultado;
}
/**
*Multiplicaunpolinomioporunmonomio
*
*@paramPolinomio$polinomio1
*@paramMonomio$polinomio2
*@returnPolinomio
*/
staticfunctionMultiplicar($polinomio,$monomio){
if($polinomioinstanceofMonomio){
$polinomio2=newPolinomio();
$polinomio2>Monomios[]=$polinomio;
$polinomio=$polinomio2;
}
if(is_array($polinomio>Monomios)){
foreach($polinomio>Monomiosas$clave1=>
$monomio1){
if($monomio1>Incognita==$monomio
>Incognita||$monomio>TerminoIndependiente||$monomio1
>TerminoIndependiente){
$mult=newMonomio(null);
$mult>Coeficiente=$monomio1
>Coeficiente*$monomio>Coeficiente;
$mult>Incognita=isset($monomio1
>Incognita)?$monomio1>Incognita:$monomio>Incognita;
if(isset($monomio1>Grado)||
isset($monomio>Grado))
$mult>Grado=$monomio1>Grado+
$monomio>Grado;
$mult>TerminoIndependiente=!
isset($mult>Incognita);

unset($polinomio>Monomios[$clave1]);
if($mult>Coeficiente!=0){

$polinomio>Monomios[]=$mult;
}elseif(count($polinomio>Monomios)==
0){
$polinomio>Monomios[]=new
Monomio(0);
}
}
}
}
return$polinomio;
}
}

Potrebbero piacerti anche