Andrew Sommese 2004restart;N := 4;h:=1.0/(N+1);NiM+SSJORzYiIiIlNiM+SSJoRzYiJCIrKysrKz8hIzU=with(LinearAlgebra):lower:= x -> exp(x)*cos(0);upper := x -> exp(x)*cos(1.0);left := y -> cos(y);right := y -> exp(1.0)*cos(y);NiM+SSZsb3dlckc2ImYqNiNJInhHRiVGJTYkSSlvcGVyYXRvckdGJUkmYXJyb3dHRiVGJSomLUkkZXhwR0YlNiM5JCIiIi1JJGNvc0dGJTYjIiIhRjFGJUYlRiU=NiM+SSZ1cHBlckc2ImYqNiNJInhHRiVGJTYkSSlvcGVyYXRvckdGJUkmYXJyb3dHRiVGJSomLUkkZXhwR0YlNiM5JCIiIi1JJGNvc0dGJTYjJCIjNSEiIkYxRiVGJUYlNiM+SSVsZWZ0RzYiZio2I0kieUdGJUYlNiRJKW9wZXJhdG9yR0YlSSZhcnJvd0dGJUYlLUkkY29zR0YlNiM5JEYlRiVGJQ==NiM+SSZyaWdodEc2ImYqNiNJInlHRiVGJTYkSSlvcGVyYXRvckdGJUkmYXJyb3dHRiVGJSomLUkkZXhwR0YlNiMkIiM1ISIiIiIiLUkkY29zR0YlNiM5JEYzRiVGJUYlH := Matrix(N+2,N+2,0): trueSol := Matrix(N+2,N+2): for i from 0 to N+1 do for j from 0 to N+1 do trueSol[i+1,j+1]:=exp(i*h)*cos(j*h);od:od:trueSol;NiMtSSdSVEFCTEVHNiI2JSIoI1JxNi1JJ01BVFJJWEdGJTYjNyg3KCQiIiIiIiEkIit5ZG0rKSohIzUkIitTKjQxQCpGMiQiK1xoTmAjKUYyJCIrJDRucSdwRjIkIitmSS0uYUYyNygkIitlRlNANyEiKiQiK0BnMCg+IkY+JCIrUWspXDciRj4kIisnPm4hMzVGPiQiK2pcZjQmKUYyJCIrbXNFKmYnRjI3KCQiKylwQz1cIkY+JCIrRXYzaTlGPiQiK1I6MXU4Rj4kIithZ0RKN0Y+JCIrd1VPUjVGPiQiK1ZLT2chKUYyNygkIisrKT1AIz1GPiQiK1B4eiZ5IkY+JCIrYERHeTtGPiQiK1MmZlFdIkY+JCIrJFIjW3A3Rj4kIiskKilcXCUpKkYyNygkIitHNGFEQUY+JCIrIkd5Nj0jRj4kIitSKmUpXD9GPiQiKyE+PW8kPUY+JCIrJ0hcMGIiRj4kIismKltZLTdGPjcoJCIrRz1HPUZGPiQiK3ByNGtFRj4kIitpTHEuREY+JCIrL1tcVkFGPiQiKyg9WFEqPUY+JCIrU1JwbzlGPkknTWF0cml4RzYkSSpwcm90ZWN0ZWRHRmlwSShfc3lzbGliR0Ylfor i from 1 to N+2 do H[i,1] := lower((i-1)*h); od:for i from 1 to N+2 do H[i,N+2] := upper((i-1)*h); od:for j from 1 to N+2 do H[N+2,j] := right((j-1)*h); od:for j from 1 to N+2 do H[1,j] := left((j-1)*h); od:aver:= (H,i,j) -> (H[i-1,j]+H[i+1,j]+H[i,j+1]+H[i,j-1])/(4);NiM+SSVhdmVyRzYiZio2JUkiSEdGJUkiaUdGJUkiakdGJUYlNiRJKW9wZXJhdG9yR0YlSSZhcnJvd0dGJUYlLComOSQ2JCwmOSUiIiIhIiJGNDkmI0Y0IiIlJkYwNiQsJkYzRjRGNEY0RjZGNyZGMDYkRjMsJkY2RjRGNEY0RjcmRjA2JEYzLCZGNkY0RjVGNEY3RiVGJUYlGSRedBlack := proc(H,N,NumberOfIter) local i,j,k; for k from 1 to NumberOfIter dofor j from 1 to N dofor i from 1 to N do if ((i+j) mod 2 =1) then H[i+1,j+1] := aver(H,i+1,j+1) fi; od:od:for j from 1 to N do for i from 1 to N do if ((i+j) mod 2 =0) then H[i+1,j+1] := aver(H,i+1,j+1) fi; od:od:od:return(H);end proc;NiM+SStHU1JlZEJsYWNrRzYiZio2JUkiSEdGJUkiTkdGJUktTnVtYmVyT2ZJdGVyR0YlNiVJImlHRiVJImpHRiVJImtHRiVGJUYlQyQ/KDgmIiIiRjI5JkkldHJ1ZUdJKnByb3RlY3RlZEdGNUMkPyg4JUYyRjI5JUY0Pyg4JEYyRjJGOUY0QCQvLUkkbW9kR0YlNiQsJkY7RjJGOEYyIiIjRjI+JjkkNiQsJkY7RjJGMkYyLCZGOEYyRjJGMi1JJWF2ZXJHRiU2JUZFRkdGSD8oRjhGMkYyRjlGND8oRjtGMkYyRjlGNEAkL0Y+IiIhRkNPRkVGJUYlRiU=GSRedBlack(H,N,1);NiMtSSdSVEFCTEVHNiI2JSIoJSkpcDYtSSdNQVRSSVhHRiU2IzcoNygkIiIiIiIhJCIreWRtKykqISM1JCIrUyo0MUAqRjIkIitcaE5gIylGMiQiKyQ0bnEncEYyJCIrZkktLmFGMjcoJCIrZUZTQDchIiokIisnKm9zNnFGMiQiKyZbX0VJI0YyJCIrYiEpKm9bJEYyJCIrKmUkZSJSJEYyJCIrbXNFKmYnRjI3KCQiKylwQz1cIkY+JCIrWDxjSFBGMiQiK2ROMDM6RjJGLyQiK3dnSHlNRjIkIitWS09nISlGMjcoJCIrKyk9QCM9Rj4kIitZN3JWJilGMkYvJCIrP09cPD9GMiQiK3R1QmhDRjIkIiskKilcXCUpKkYyNygkIitHNGFEQUY+JCIrQyY0Q0EiRj4kIitabXVyNUY+JCIrNXF0M2NGMiQiK0UpbyNlKCpGMiQiKyYqW1ktN0Y+NygkIitHPUc9RkY+JCIrcHI0a0VGPiQiK2lMcS5ERj4kIisvW1xWQUY+JCIrKD1YUSo9Rj4kIitTUnBvOUY+SSdNYXRyaXhHNiRJKnByb3RlY3RlZEdGZXBJKF9zeXNsaWJHRiU=GSRedBlack(H,N,9);NiMtSSdSVEFCTEVHNiI2JSIoJSkpcDYtSSdNQVRSSVhHRiU2IzcoNygkIiIiIiIhJCIreWRtKykqISM1JCIrUyo0MUAqRjIkIitcaE5gIylGMiQiKyQ0bnEncEYyJCIrZkktLmFGMjcoJCIrZUZTQDchIiokIisxY1YnPSJGPiQiK1E7Yy42Rj4kIismKW8peSEqKkYyJCIrX0RBeCQpRjIkIittc0UqZidGMjcoJCIrKXBDPVwiRj4kIitfOXJTOUY+JCIrKFE5aE0iRj4kIitZX2AnPiJGPiQiKylHJTRBNUY+JCIrVktPZyEpRjI3KCQiKyspPUAjPUY+JCIrODxrbzxGPiQiKzgjXE9rIkY+JCIrTiFSZloiRj4kIitETDNbN0Y+JCIrJCopXFwlKSpGMjcoJCIrRzRhREFGPiQiKylRKDNvQEY+JCIrIjNLRi4jRj4kIitlJClbOj1GPiQiK1UvKCpSOkY+JCIrJipbWS03Rj43KCQiK0c9Rz1GRj4kIitwcjRrRUY+JCIraUxxLkRGPiQiKy9bXFZBRj4kIisoPVhRKj1GPiQiK1NScG85Rj5JJ01hdHJpeEc2JEkqcHJvdGVjdGVkR0ZpcEkoX3N5c2xpYkdGJQ==Norm(MatrixAdd(H,-trueSol));NiMkIjNFKCoqKioqPi05ODUhIz0=GSRedBlack(H,N,20); Norm(MatrixAdd(H,-trueSol));NiMtSSdSVEFCTEVHNiI2JSIoJSkpcDYtSSdNQVRSSVhHRiU2IzcoNygkIiIiIiIhJCIreWRtKykqISM1JCIrUyo0MUAqRjIkIitcaE5gIylGMiQiKyQ0bnEncEYyJCIrZkktLmFGMjcoJCIrZUZTQDchIiokIiszck0oPiJGPiQiK2s5UUQ2Rj4kIitdNlczNUY+JCIrUmsvNyYpRjIkIittc0UqZidGMjcoJCIrKXBDPVwiRj4kIitLd2BpOUY+JCIrIylHb3U4Rj4kIit5RyU9QiJGPiQiK3F5dVI1Rj4kIitWS09nISlGMjcoJCIrKyk9QCM9Rj4kIis9QEkneSJGPiQiK2EmcCp5O0Y+JCIrcyg0WF0iRj4kIitNdyEqcDdGPiQiKyQqKVxcJSkqRjI3KCQiK0c0YURBRj4kIisnWyNlIj0jRj4kIisxT1JdP0Y+JCIrQSE+dCQ9Rj4kIislPSUpM2IiRj4kIismKltZLTdGPjcoJCIrRz1HPUZGPiQiK3ByNGtFRj4kIitpTHEuREY+JCIrL1tcVkFGPiQiKyg9WFEqPUY+JCIrU1JwbzlGPkknTWF0cml4RzYkSSpwcm90ZWN0ZWRHRmlwSShfc3lzbGliR0YlNiMkIjMtIXoqKioqKlwmb0UjISM/GSRedBlack(H,N,20); Norm(MatrixAdd(H,-trueSol));NiMtSSdSVEFCTEVHNiI2JSIoJSkpcDYtSSdNQVRSSVhHRiU2IzcoNygkIiIiIiIhJCIreWRtKykqISM1JCIrUyo0MUAqRjIkIitcaE5gIylGMiQiKyQ0bnEncEYyJCIrZkktLmFGMjcoJCIrZUZTQDchIiokIit6JFx0PiJGPiQiKzFnUUQ2Rj4kIitEW1czNUY+JCIrOFgyNyYpRjIkIittc0UqZidGMjcoJCIrKXBDPVwiRj4kIit1QGFpOUY+JCIrRykpb3U4Rj4kIitILSY9QiJGPiQiK1g6dlI1Rj4kIitWS09nISlGMjcoJCIrKyk9QCM9Rj4kIisjejBqeSJGPiQiKy9wKCp5O0Y+JCIrPWReLzpGPiQiK3hAIipwN0Y+JCIrJCopXFwlKSpGMjcoJCIrRzRhREFGPiQiKyNIJmUiPSNGPiQiKyFHKFJdP0Y+JCIra05LUD1GPiQiK2NrKTNiIkY+JCIrJipbWS03Rj43KCQiK0c9Rz1GRj4kIitwcjRrRUY+JCIraUxxLkRGPiQiKy9bXFZBRj4kIisoPVhRKj1GPiQiK1NScG85Rj5JJ01hdHJpeEc2JEkqcHJvdGVjdGVkR0ZpcEkoX3N5c2xpYkdGJQ==NiMkIjMtXycqKioqKnpPKUcjISM/N := 8;h:=1.0/(N+1);H := Matrix(N+2,N+2,0): trueSol := Matrix(N+2,N+2): for i from 0 to N+1 do for j from 0 to N+1 do trueSol[i+1,j+1]:=exp(i*h)*cos(j*h);od:od:for i from 1 to N+2 do H[i,1] := lower((i-1)*h); od:for i from 1 to N+2 do H[i,N+2] := upper((i-1)*h); od:for j from 1 to N+2 do H[N+2,j] := right((j-1)*h); od:for j from 1 to N+2 do H[1,j] := left((j-1)*h); od:GSRedBlack(H,N,40): Norm(MatrixAdd(H,-trueSol));NiM+SSJORzYiIiIpNiM+SSJoRzYiJCIrNjY2NjYhIzU=NiMkIjNHbSoqKio0OGE3ISohIz4=GSRedBlack(H,N,40): Norm(MatrixAdd(H,-trueSol));NiMkIjMtViEpKioqKio+VVsoISNAGSRedBlack(H,N,80): Norm(MatrixAdd(H,-trueSol));NiMkIjNjJVErKz9hK00iISM/N := 20;h:=1.0/(N+1);H := Matrix(N+2,N+2,0): trueSol := Matrix(N+2,N+2): for i from 0 to N+1 do for j from 0 to N+1 do trueSol[i+1,j+1]:=exp(i*h)*cos(j*h);od:od:for i from 1 to N+2 do H[i,1] := lower((i-1)*h); od:for i from 1 to N+2 do H[i,N+2] := upper((i-1)*h); od:for j from 1 to N+2 do H[N+2,j] := right((j-1)*h); od:for j from 1 to N+2 do H[1,j] := left((j-1)*h); od:GSRedBlack(H,N,40): Norm(MatrixAdd(H,-trueSol));NiM+SSJORzYiIiM/NiM+SSJoRzYiJCIraVohPnclISM2NiMkIjNLKytnTEpedzchIzs=GSRedBlack(H,N,40): Norm(MatrixAdd(H,-trueSol));NiMkIjMrKytnJTRQWT4mISM8GSRedBlack(H,N,80): Norm(MatrixAdd(H,-trueSol));NiMkIjNZLisrKCoqUSQpZSkhIz0=GSRedBlack(H,N,160): Norm(MatrixAdd(H,-trueSol));NiMkIjN2LCsrIT5IW0kjISM+GSRedBlack(H,N,160): Norm(MatrixAdd(H,-trueSol));NiMkIjNLJkhBKytddSUpKiEjQQ==TTdSMApJNFJUQUJMRV9TQVZFLzExNzAzOTJYLCUpYW55dGhpbmdHNiI2IltnbCEiJSEhISNFIiciJyQiIiIiIiEkIitlRlNANyEiKiQiKylwQz1cCiJGLCQiKyspPUAjPUYsJCIrRzRhREFGLCQiK0c9Rz1GRiwkIit5ZG0rKSohIzUkIitAZzAoPiJGLCQiK0V2M2k5RiwkIitQeHomeSJGLCQKIisiR3k2PSNGLCQiK3ByNGtFRiwkIitTKjQxQCpGNyQiK1FrKVw3IkYsJCIrUjoxdThGLCQiK2BER3k7RiwkIitSKmUpXD9GLCQiK2lMcQouREYsJCIrXGhOYCMpRjckIisnPm4hMzVGLCQiK2FnREo3RiwkIitTJmZRXSJGLCQiKyE+PW8kPUYsJCIrL1tcVkFGLCQiKyQ0bnEncEY3CiQiK2pcZjQmKUY3JCIrd1VPUjVGLCQiKyRSI1twN0YsJCIrJ0hcMGIiRiwkIisoPVhRKj1GLCQiK2ZJLS5hRjckIittc0UqZidGNyQiK1YKS09nISlGNyQiKyQqKVxcJSkqRjckIismKltZLTdGLCQiK1NScG85RixGJgo=TTdSMApJNFJUQUJMRV9TQVZFLzExNjk4ODRYLCUpYW55dGhpbmdHNiI2IltnbCEiJSEhISNFIiciJyQiIiIiIiEkIitlRlNANyEiKiQiKylwQz1cCiJGLCQiKyspPUAjPUYsJCIrRzRhREFGLCQiK0c9Rz1GRiwkIit5ZG0rKSohIzUkIit6JFx0PiJGLCQiK3VAYWk5RiwkIisjejBqeSJGLCQKIisjSCZlIj0jRiwkIitwcjRrRUYsJCIrUyo0MUAqRjckIisxZ1FENkYsJCIrRykpb3U4RiwkIisvcCgqeTtGLCQiKyFHKFJdP0YsJCIraQpMcS5ERiwkIitcaE5gIylGNyQiK0RbVzM1RiwkIitILSY9QiJGLCQiKz1kXi86RiwkIitrTktQPUYsJCIrL1tcVkFGLCQiKyQ0bnEncEY3CiQiKzhYMjcmKUY3JCIrWDp2UjVGLCQiK3hAIipwN0YsJCIrY2spM2IiRiwkIisoPVhRKj1GLCQiK2ZJLS5hRjckIittc0UqZidGNyQiK1YKS09nISlGNyQiKyQqKVxcJSkqRjckIismKltZLTdGLCQiK1NScG85RixGJgo=TTdSMApJNFJUQUJMRV9TQVZFLzExNjk4ODRYLCUpYW55dGhpbmdHNiI2IltnbCEiJSEhISNFIiciJyQiIiIiIiEkIitlRlNANyEiKiQiKylwQz1cCiJGLCQiKyspPUAjPUYsJCIrRzRhREFGLCQiK0c9Rz1GRiwkIit5ZG0rKSohIzUkIit6JFx0PiJGLCQiK3VAYWk5RiwkIisjejBqeSJGLCQKIisjSCZlIj0jRiwkIitwcjRrRUYsJCIrUyo0MUAqRjckIisxZ1FENkYsJCIrRykpb3U4RiwkIisvcCgqeTtGLCQiKyFHKFJdP0YsJCIraQpMcS5ERiwkIitcaE5gIylGNyQiK0RbVzM1RiwkIitILSY9QiJGLCQiKz1kXi86RiwkIitrTktQPUYsJCIrL1tcVkFGLCQiKyQ0bnEncEY3CiQiKzhYMjcmKUY3JCIrWDp2UjVGLCQiK3hAIipwN0YsJCIrY2spM2IiRiwkIisoPVhRKj1GLCQiK2ZJLS5hRjckIittc0UqZidGNyQiK1YKS09nISlGNyQiKyQqKVxcJSkqRjckIismKltZLTdGLCQiK1NScG85RixGJgo=TTdSMApJNFJUQUJMRV9TQVZFLzExNjk4ODRYLCUpYW55dGhpbmdHNiI2IltnbCEiJSEhISNFIiciJyQiIiIiIiEkIitlRlNANyEiKiQiKylwQz1cCiJGLCQiKyspPUAjPUYsJCIrRzRhREFGLCQiK0c9Rz1GRiwkIit5ZG0rKSohIzUkIit6JFx0PiJGLCQiK3VAYWk5RiwkIisjejBqeSJGLCQKIisjSCZlIj0jRiwkIitwcjRrRUYsJCIrUyo0MUAqRjckIisxZ1FENkYsJCIrRykpb3U4RiwkIisvcCgqeTtGLCQiKyFHKFJdP0YsJCIraQpMcS5ERiwkIitcaE5gIylGNyQiK0RbVzM1RiwkIitILSY9QiJGLCQiKz1kXi86RiwkIitrTktQPUYsJCIrL1tcVkFGLCQiKyQ0bnEncEY3CiQiKzhYMjcmKUY3JCIrWDp2UjVGLCQiK3hAIipwN0YsJCIrY2spM2IiRiwkIisoPVhRKj1GLCQiK2ZJLS5hRjckIittc0UqZidGNyQiK1YKS09nISlGNyQiKyQqKVxcJSkqRjckIismKltZLTdGLCQiK1NScG85RixGJgo=TTdSMApJNFJUQUJMRV9TQVZFLzExNjk4ODRYLCUpYW55dGhpbmdHNiI2IltnbCEiJSEhISNFIiciJyQiIiIiIiEkIitlRlNANyEiKiQiKylwQz1cCiJGLCQiKyspPUAjPUYsJCIrRzRhREFGLCQiK0c9Rz1GRiwkIit5ZG0rKSohIzUkIit6JFx0PiJGLCQiK3VAYWk5RiwkIisjejBqeSJGLCQKIisjSCZlIj0jRiwkIitwcjRrRUYsJCIrUyo0MUAqRjckIisxZ1FENkYsJCIrRykpb3U4RiwkIisvcCgqeTtGLCQiKyFHKFJdP0YsJCIraQpMcS5ERiwkIitcaE5gIylGNyQiK0RbVzM1RiwkIitILSY9QiJGLCQiKz1kXi86RiwkIitrTktQPUYsJCIrL1tcVkFGLCQiKyQ0bnEncEY3CiQiKzhYMjcmKUY3JCIrWDp2UjVGLCQiK3hAIipwN0YsJCIrY2spM2IiRiwkIisoPVhRKj1GLCQiK2ZJLS5hRjckIittc0UqZidGNyQiK1YKS09nISlGNyQiKyQqKVxcJSkqRjckIismKltZLTdGLCQiK1NScG85RixGJgo=