CellPrint[TextCell[Manipulate[If[MatrixQ[MatrixA,NumericQ]&&MemberQ[Flatten[MatrixA],Null]==False,If[MemberQ[ToCharacterCode[ToString[MatrixA]],62760]==False,If[VectorQ[MatrixB,NumericQ],If[MemberQ[MatrixB,Null]==False,If[Dimensions[MatrixA][[1]]==Dimensions[MatrixA][[2]]&&Dimensions[MatrixA][[1]]==Length[MatrixB],If[Det[MatrixA]!=0,If[VectorQ[{numeroItera,vtolerancia},NumericQ],If[numeroItera>0&&vtolerancia>0,Style[Column[{Row[{"Se parte del sistema: ",If[!tolerancia,MetodoJacobi[MatrixA,MatrixB,numeroIteraciones,reordenar][[1]]//MatrixForm,If[ToString[MetodoJacobiCota1[MatrixA,MatrixB,valortolerancia]]!=ToString[Null],MetodoJacobiCota1[MatrixA,MatrixB,valortolerancia][[1]]//MatrixForm,""]]}],Row[{"Estrictamente diagonalmente dominante (EDD): ",If[!tolerancia,MetodoJacobi[MatrixA,MatrixB,numeroIteraciones,reordenar][[2]],If[ToString[MetodoJacobiCota1[MatrixA,MatrixB,valortolerancia]]!=ToString[Null],MetodoJacobiCota1[MatrixA,MatrixB,valortolerancia][[2]],""]]}],If[!tolerancia,MetodoJacobi[MatrixA,MatrixB,numeroIteraciones,reordenar][[3]],""],If[tolerancia&&tolerancia1,If[ToString[MetodoJacobiCota1[MatrixA,MatrixB,valortolerancia]]!=ToString[Null],MetodoJacobiCota1[MatrixA,MatrixB,valortolerancia][[3]]],""],If[tolerancia&&tolerancia2,MetodoJacobiCota2[MatrixA,MatrixB,valortolerancia],""],If[tolerancia&&tolerancia3,MetodoJacobiCota3[MatrixA,MatrixB,valortolerancia],""]},Center],10],Text[Style["Error en los datos",12]]],Text[Style["Error en los datos",12]]],Text[Style["Error en los datos",12]]],Text[Style["Error en los datos",12]]],Text[Style["Error en los datos",12]]],Text[Style["Error en los datos",12]]],Text[Style["Error en los datos",12]]],Text[Style["Error en los datos",12]]],Style["Propósito: implementa el método de Jacobi (se asume Det[A]≠0).",Bold,10],Spacer[{400,2}],{{MatrizA,{{0,1,-1,1,5},{0,1,1,4,-1},{-2,0,-10,5,0},{-1,10,5,0,3},{10,1,-3,0,1}},"A="}},{{MatrizB,{1,0,-1,-1,1},"B="}},{{reordenar,False,"Reordenar el sistema (EDD)"},{True,False}},Delimiter,{{numeroItera,6,"Iteraciones (k)"},Enabled->!tolerancia},Delimiter,{{tolerancia,False,"Tolerancia"},{True,False}},{{vtolerancia,(10^(-3)),"Valor de precisión"},Enabled->tolerancia},OpenerView[{"Criterio para detener las iteraciones (ξ>0):",Column[{Control[{{tolerancia1,True,"\[LeftDoubleBracketingBar](x^((k)))-(x^((k - 1)))\[RightDoubleBracketingBar]<ξ"},{True,False},Enabled->tolerancia}],Control[{{tolerancia2,False,"\[LeftDoubleBracketingBar](x^((k)))-(x^((k - 1)))\[RightDoubleBracketingBar]/\[LeftDoubleBracketingBar](x^((k)))\[RightDoubleBracketingBar]<ξ"},{True,False},Enabled->tolerancia}],Control[{{tolerancia3,False,"\[LeftDoubleBracketingBar](Ax^((k)))-B\[RightDoubleBracketingBar]<ξ"},{True,False},Enabled->tolerancia}]}]},Dynamic[tolerancia]],Delimiter,Button["Calcular las iteraciones",MatrixA=If[Det[MatrizA]!=0,If[MemberQ[Diagonal[MatrizA],0],MatrizA=RandomChoice[Permutations[Join[MatrizA,Transpose[{MatrizB}],2]]];While[MemberQ[Diagonal[MatrizA[[All,1;;Dimensions[MatrizA][[1]]]]],0],MatrizA=RandomChoice[Permutations[MatrizA]]];MatrizB=MatrizA[[All,Dimensions[MatrizA][[2]]]];MatrizA=MatrizA[[All,1;;Dimensions[MatrizA][[1]]]],MatrizA],MatrizA];MatrixB=MatrizB;numeroIteraciones=numeroItera;valortolerancia=vtolerancia],Alignment->Center,Deployed->False,AppearanceElements->"ResetButton",LocalizeVariables->True,ContinuousAction->True,ControlPlacement->Top,FrameLabel->{{None,None},{Column[{,Row[{Style["Autores: Juan Félix Ávila Herrera y Enrique Vílchez Quesada",Bold,10,RGBColor[0,0,0.5]]}],Row[{Style["Escuela de Informática | Universidad Nacional de Costa Rica",Bold,10,RGBColor[0.5,0.1,0]]}]},Center],Style["Método de Jacobi", Bold,14, RGBColor[0,0.33,0.33]]}},Initialization:>(Clear[MatrixA,MatrixB,numeroIteraciones,valortolerancia];MatrixA=If[Det[MatrizA]!=0,If[MemberQ[Diagonal[MatrizA],0],MatrizA=RandomChoice[Permutations[Join[MatrizA,Transpose[{MatrizB}],2]]];While[MemberQ[Diagonal[MatrizA[[All,1;;Dimensions[MatrizA][[1]]]]],0],MatrizA=RandomChoice[Permutations[MatrizA]]];MatrizB=MatrizA[[All,Dimensions[MatrizA][[2]]]];MatrizA=MatrizA[[All,1;;Dimensions[MatrizA][[1]]]],MatrizA],MatrizA];MatrixB=MatrizB;numeroIteraciones=numeroItera;valortolerancia=vtolerancia;EDiagonalmenteDomiQ[MatrizC_List]:=Module[{n=Dimensions[MatrizC][[1]],M=Abs[MatrizC],MAux,vectAux,diagonal=Abs[Diagonal[MatrizC]],valorLogico=True,vecti},MAux=ReplacePart[M,{vecti_,vecti_}->0];vectAux=Table[Total[MAux[[vecti,All]]]>=diagonal[[vecti]],{vecti,n}];If[MemberQ[vectAux,True],valorLogico=False];valorLogico];ReordenarSistema[MatrizAumentada_List,ValorBooleano_]:=Module[{n=Dimensions[MatrizAumentada][[1]],M=Abs[MatrizAumentada],MAux,vectAux,vecti,valorLogico,QuitarRepetidos},QuitarRepetidos[vector_List]:=Module[{L=vector,faltantes,pi,pj,valorn},valorn=Length[L];faltantes=Complement[Range[valorn],DeleteDuplicates[L]];For[pi=2,pi<=valorn,For[pj=1,pj<pi,If[L[[pi]]==L[[pj]],L[[pi]]=faltantes[[1]];faltantes=Complement[faltantes,{L[[pi]]}]];pj++];pi++];L];valorLogico=EDiagonalmenteDomiQ[MatrizAumentada[[All,1;;n]]];If[valorLogico||!ValorBooleano,MatrizAumentada,MAux=MatrizAumentada;vectAux=Table[Position[M[[vecti,1;;n]],Max[M[[vecti,1;;n]]]][[1,1]],{vecti,n}];If[Length[DeleteDuplicates[vectAux]]<Length[vectAux],vectAux=QuitarRepetidos[vectAux]];For[vecti=1,vecti<=Length[vectAux],If[vectAux[[vecti]]!=vecti,MAux[[vectAux[[vecti]],All]]=MatrizAumentada[[vecti,All]]];vecti++];If[MemberQ[Diagonal[MAux],0],MatrizAumentada,MAux]]];MetodoJacobi[A_List,B_List,numeroIter_,reorden_]:=Module[{Respuesta={},n=Dimensions[A][[1]],M=Join[A,Transpose[{B}],2],diagonal,x,NA,mi,NB,vectItera},M=ReordenarSistema[M,reorden];Respuesta=Append[Respuesta,M];Respuesta=Append[Respuesta,EDiagonalmenteDomiQ[M[[All,1;;n]]]];diagonal=Diagonal[M];NA=ReplacePart[M[[All,1;;n]],{vecti_,vecti_}->0];NB=M[[All,n+1]];For[mi=1,mi<=n,NA[[mi,All]]=-diagonal[[mi]]^(-1)*NA[[mi,All]];NB[[mi]]=diagonal[[mi]]^(-1)*NB[[mi]];mi++];x=Transpose[{ConstantArray[0,n]}];vectItera=Append[{Prepend[ConstantArray[0,n],"(x^((0)))"]}];For[mi=1,mi<=numeroIter,x=NA.x+Transpose[{NB}];vectItera=Append[vectItera,Prepend[Transpose[x][[1]],StringTemplate["(x^((`1`)))"][mi]]];mi++];Respuesta=Append[Respuesta,Style[Grid[vectItera//N,Frame-> All,Alignment->Left],10]]];MetodoJacobiCota1[A_List,B_List,vtoleran_]:=Module[{Respuesta={},n=Dimensions[A][[1]],M=Join[A,Transpose[{B}],2],diagonal,x,xAux,NA,NB,vectItera,mi},M=ReordenarSistema[M,True];If[EDiagonalmenteDomiQ[M[[All,1;;n]]],Respuesta=Append[Respuesta,M];Respuesta=Append[Respuesta,True];diagonal=Diagonal[M];NA=ReplacePart[M[[All,1;;n]],{vecti_,vecti_}->0];NB=M[[All,n+1]];For[mi=1,mi<=n,NA[[mi,All]]=-diagonal[[mi]]^(-1)*NA[[mi,All]];NB[[mi]]=diagonal[[mi]]^(-1)*NB[[mi]];mi++];mi=2;x=Transpose[{ConstantArray[0,n]}];vectItera=Append[{Prepend[ConstantArray[0,n],"(x^((0)))"]}];
xAux=NA.x+Transpose[{NB}];vectItera=Append[vectItera,Prepend[Transpose[xAux][[1]],StringTemplate["(x^((`1`)))"][1]]];While[Norm[xAux-x]>=vtoleran,x=xAux;xAux=NA.x+Transpose[{NB}];vectItera=Append[vectItera,Prepend[Transpose[xAux][[1]],StringTemplate["(x^((`1`)))"][mi]]];mi++];Respuesta=Append[Respuesta,Style[Grid[vectItera//N,Frame-> All,Alignment->Left],11]]]];MetodoJacobiCota2[A_List,B_List,vtoleran_]:=Module[{n=Dimensions[A][[1]],M=Join[A,Transpose[{B}],2],diagonal,x,xAux,NA,NB,vectItera,mi},M=ReordenarSistema[M,True];If[EDiagonalmenteDomiQ[M[[All,1;;n]]],diagonal=Diagonal[M];NA=ReplacePart[M[[All,1;;n]],{vecti_,vecti_}->0];NB=M[[All,n+1]];For[mi=1,mi<=n,NA[[mi,All]]=-diagonal[[mi]]^(-1)*NA[[mi,All]];NB[[mi]]=diagonal[[mi]]^(-1)*NB[[mi]];mi++];mi=2;x=Transpose[{ConstantArray[0,n]}];vectItera=Append[{Prepend[ConstantArray[0,n],"(x^((0)))"]}];
xAux=NA.x+Transpose[{NB}];vectItera=Append[vectItera,Prepend[Transpose[xAux][[1]],StringTemplate["(x^((`1`)))"][1]]];While[Norm[xAux-x]/Norm[xAux]>=vtoleran,x=xAux;xAux=NA.x+Transpose[{NB}];vectItera=Append[vectItera,Prepend[Transpose[xAux][[1]],StringTemplate["(x^((`1`)))"][mi]]];mi++];Style[Grid[vectItera//N,Frame-> All,Alignment->Left],11]]];MetodoJacobiCota3[A_List,B_List,vtoleran_]:=Module[{n=Dimensions[A][[1]],M=Join[A,Transpose[{B}],2],diagonal,x,NA,NB,vectItera,mi},M=ReordenarSistema[M,True];If[EDiagonalmenteDomiQ[M[[All,1;;n]]],diagonal=Diagonal[M];NA=ReplacePart[M[[All,1;;n]],{vecti_,vecti_}->0];NB=M[[All,n+1]];For[mi=1,mi<=n,NA[[mi,All]]=-diagonal[[mi]]^(-1)*NA[[mi,All]];NB[[mi]]=diagonal[[mi]]^(-1)*NB[[mi]];mi++];mi=1;x=Transpose[{ConstantArray[0,n]}];vectItera=Append[{Prepend[ConstantArray[0,n],"(x^((0)))"]}];
While[Norm[M[[All,1;;n]].x-Transpose[{M[[All,n+1]]}]]>=vtoleran,x=NA.x+Transpose[{NB}];vectItera=Append[vectItera,Prepend[Transpose[x][[1]],StringTemplate["(x^((`1`)))"][mi]]];mi++];Style[Grid[vectItera//N,Frame-> All,Alignment->Left],11]]])],"Text"]]