📄 alg096_mas.bak
字号:
<?xml version="1.0" encoding="UTF-8"?>
<Worksheet><Version major="6" minor="1"/><View-Properties><Zoom percentage="100"/></View-Properties><Styles><Layout alignment="left" linebreak="space" name="Warning"/><Layout name="Normal"/><Layout alignment="centred" linespacing="0.5" name="Maple Output"/><Layout alignment="left" linebreak="any" name="_pstyle6"/><Font background="[0,0,0]" family="Monospaced" foreground="[0,0,255]" name="Line Printed Output" readonly="true" size="10"/><Font background="[0,0,0]" bold="true" executable="true" family="Monospaced" foreground="[255,0,0]" name="Maple Input"/><Font background="[0,0,0]" family="Times New Roman" name="Page Number" underline="false"/><Font background="[0,0,0]" family="Monospaced" foreground="[0,0,255]" name="Warning" readonly="true" size="10"/><Font background="[0,0,0]" family="Times New Roman" foreground="[0,0,255]" name="2D Output" underline="false"/><Font background="[0,0,0]" family="Monospaced" foreground="[0,0,255]" name="_pstyle6" readonly="true" size="10"/></Styles><Page-Numbers enabled="false" first-number="1" first-numbered-page="1" horizontal-location="right" style="Page Number" vertical-location="bottom"/><Group><Input><Text-field layout="Normal" prompt="> " style="Maple Input">restart;</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="> " style="Maple Input"># QR ALGORITHM 9.6</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="> " style="Maple Input">#</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="> " style="Maple Input"># To obtain the eigenvalues of a symmetric, tridiagonal n by n matrix</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="> " style="Maple Input">#</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="> " style="Maple Input"># a(1) b(2)</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="> " style="Maple Input"># b(2) a(2) b(3)</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="> " style="Maple Input"># . . .</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="> " style="Maple Input"># . . .</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="> " style="Maple Input"># . . .</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="> " style="Maple Input"># b(n-1) a(n-1) b(n)</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="> " style="Maple Input"># b(n) a(n)</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="> " style="Maple Input">#</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="> " style="Maple Input"># INPUT: n; A(1),...,A(n) (diagonal of A); B(2),...,B(n)</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="> " style="Maple Input"># (off-diagonal of A); maximum number of iterations M, </Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="> " style="Maple Input"># tolerance TOL.</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="> " style="Maple Input">#</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="> " style="Maple Input"># OUTPUT: Eigenvalues of A or recommended splitting of A, or a </Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="> " style="Maple Input"># message that the maximum number of iterations was </Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="> " style="Maple Input"># exceeded.</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="> " style="Maple Input">alg096 := proc() local OK, AA, NAME, INP, N, I, A, B, TOL, L, FLAG, OUP, SHIFT, K, J, M, B1, C1, D1, X1, X2, D, X, Y, Z, C, S, Q, R, MM;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">printf(`This is the QR Method.\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">OK := FALSE;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">printf(`The tridiagonal symmetric array A will be input from `);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">printf(`a text file in the order:\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">printf(` (diagonal): A(1), A(2), ..., A(n),\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">printf(` (subdiagonal): B(2), B(3), ..., B(n).\n\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">printf(`Place as many entries as desired on each line, but separate `);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">printf(`entries with\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">printf(`at least one blank.\n\n\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">printf(`Has the input file been created? - enter Y or N.\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">AA := scanf(`%c`)[1];</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">if AA = "Y" or AA = "y" then</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">printf(`Input the file name in the form - drive:\\name.ext\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">printf(`for example: A:\\DATA.DTA\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">NAME := scanf(`%s`)[1];</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">INP := fopen(NAME,READ,TEXT);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">OK := FALSE;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">while OK = FALSE do</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">printf(`Input the dimension n.\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">N := scanf(`%d`)[1];</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">if N > 1 then</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">for I from 1 to N do</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">A[I-1] := fscanf(INP, `%f`)[1];</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">od;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">for I from 2 to N do</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">B[I-1] := fscanf(INP, `%f`)[1];</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">od;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">OK := TRUE;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">else</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">printf(`Dimension must be greater then 1.\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fi;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">od;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">OK := FALSE;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">while OK = FALSE do</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">printf(`Input the tolerance.\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">TOL := scanf(`%f`)[1];</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">if TOL > 0 then</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">OK := TRUE;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">else</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">printf(`Tolerance must be a positive real number.\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fi;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">od;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">OK := FALSE;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">while OK = FALSE do</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">printf(`Input the maximum number of iterations.\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">L := scanf(`%d`)[1];</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">if L > 0 then</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">OK := TRUE;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">else</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">printf(`The number must be a positive integer.\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fi;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">od;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fclose(INP);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">else</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">printf(`The program will end so the input file can be created.\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fi;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">if OK = TRUE then</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">printf(`Choice of output method:\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">printf(`1. Output to screen\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">printf(`2. Output to text file\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">printf(`Please enter 1 or 2.\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">FLAG := scanf(`%d`)[1];</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">if FLAG = 2 then</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">printf(`Input the file name in the form - drive:\\name.ext\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">printf(`for example A:\\OUTPUT.DTA\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">NAME := scanf(`%s`)[1];</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">OUP := fopen(NAME,WRITE,TEXT);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">else</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">OUP := default;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fi;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fprintf(OUP, `QR METHOD\n\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input"># STEP 1 */</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">SHIFT := 0;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">K := 1;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input"># STEP 2 */</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">while K <= L and OK = TRUE do</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fprintf(OUP, `Iteration number %d N = %d\n`, K, N);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fprintf(OUP, `The array A is now as follows:\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fprintf(OUP, `Diagonal:\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">for I from 1 to N do</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fprintf(OUP, ` %11.8f`, A[I-1]);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">od;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fprintf(OUP, `\nOff diagonal:\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">for I from 2 to N do</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fprintf(OUP, ` %11.8f`, B[I-1]);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">od;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fprintf(OUP, `\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input"># Steps 3-7 test for success */</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input"># STEP 3 */</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">if abs(B[N-1]) <= TOL then</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">A[N-1] := A[N-1] + SHIFT;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fprintf(OUP, `Eigenvalue = %12.8f\n`, A[N-1]);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">N := N-1;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fi;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input"># STEP 4*/</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">if abs(B[1]) <= TOL then</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">A[0] := A[0]+SHIFT;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fprintf(OUP, `Eigenvalue = %12.8f\n`, A[0]);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">N := N-1;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">A[0] := A[1];</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">for J from 2 to N do</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">A[J-1] := A[J];</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">B[J-1] := B[J];</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">od;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fi;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input"># STEP 5 */</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">if N = 0 then</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">OK := FALSE;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fi;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input"># STEP 6*/</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">if N = 1 then</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">A[0] := A[0] + SHIFT;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fprintf(OUP,`Eigenvalue = %12.8f\n`, A[0]);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">OK := FALSE;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fi;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input"># STEP 7 */</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">if OK = TRUE then</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">M := N-1;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">if M >= 2 then</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">for I from 2 to M do</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">if abs(B[I-1]) <= TOL then</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">OK := FALSE;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">J := I;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fi;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">od;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">if OK = FALSE then</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fprintf(OUP, `Split the matrix into\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">for I from 1 to J-1 do</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fprintf(OUP,`%11.8f`,A[I-1]);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">od;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fprintf(OUP,`\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">for I from 2 to J-1 do</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fprintf(OUP,`%11.8f`,B[I-1]);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">od;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fprintf(OUP,`\n and \n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">for I from J to N do</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fprintf(OUP,`%11.8f`,A[I-1]);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">od;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fprintf(OUP,`\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">for I from J+1 to N do</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fprintf(OUP,`%11.8f`,B[I-1]);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">od;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fprintf(OUP,`\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fi;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fi;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fi;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">if OK = TRUE then</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input"># STEP 8 */</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input"># compute shift */</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">B1 := -(A[N-1]+A[N-2]);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">C1 := A[N-1]*A[N-2]-B[N-1]*B[N-1];</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">D1 := B1*B1-4*C1;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">if D1 < 0 then</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fprintf(OUP, `Problem with complex roots, D1 = %.8e\n`, D1);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">OK := FALSE;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">else</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">D1 := sqrt(D1);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input"># STEP 9*/</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">if B1 > 0 then</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">X1 := -2*C1/(B1+D1);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">X2 := -(B1+D1)/2;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">else</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">X1 := (D1-B1)/2;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">X2 := 2*C1/(D1-B1);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fi;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input"># if N := 2 then the 2 eigenvalues have been computed */</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input"># STEP 10 */</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">if N = 2 then</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">X1 := X1+SHIFT;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">X2 := X2+SHIFT;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fprintf(OUP, `The last two eigenvalues are: %12.8f%11.8f\n`,X1, X2);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">OK := FALSE;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">else</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input"># STEP 11 */</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">if abs(A[N-1]-X1) > abs(A[N-1]-X2) then</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">X1 := X2;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fi;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input"># STEP 12 */</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input"># accumulate shift */</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">SHIFT := SHIFT+X1;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input"># STEP 13*/</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input"># perform shift */</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">for I from 1 to N do</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">D[I-1] := A[I-1]-X1;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">od;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input"># STEP 14 and 15 compute R(K) */</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input"># STEP 14 */</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">X[0] := D[0];</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">Y[0] := B[1];</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input"># STEP 15 */</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">for J from 2 to N do</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">Z[J-2] := sqrt((X[J-2]*X[J-2])+(B[J-1]*B[J-1]));</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">C[J-1] := X[J-2]/Z[J-2];</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">S[J-1] := B[J-1]/Z[J-2];</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">Q[J-2] := C[J-1]*Y[J-2]+S[J-1]*D[J-1];</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">X[J-1] := C[J-1]*D[J-1]-S[J-1]*Y[J-2];</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">if J <> N then</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">R[J-2] := S[J-1]*B[J];</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">Y[J-1] := C[J-1]*B[J];</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fi;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">od;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">M := N-1;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">MM := N-2;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input"># Steps 16-18 compute A(K+1) */</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input"># STEP 16 */</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">Z[N-1] := X[N-1];</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">A[0] := C[1]*Z[0]+S[1]*Q[0];</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">B[1] := S[1]*Z[1];</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input"># STEP 17 */</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">if N > 2 then</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">for J from 2 to M do</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">A[J-1] := C[J]*C[J-1]*Z[J-1]+S[J]*Q[J-1];</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">B[J] := S[J]*Z[J];</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">od;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fi;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input"># STEP 18 */</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">A[N-1] := C[N-1]*Z[N-1];</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fi;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fi;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fi;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input"># STEP 19 */</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">K := K+1;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">od;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input"># STEP 20 */</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">if OK = TRUE and K > L then</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fprintf(OUP, `Maximum Number of Iterations Exceeded.\n`);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fi;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input"># the process is complete */</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">if OUP <> default then</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fclose(OUP):</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">printf(`Output file %s created successfully`,NAME);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fi;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">fi;</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">RETURN(0);</Text-field><Text-field layout="Normal" prompt="> " style="Maple Input">end;</Text-field></Input><Output><Text-field layout="Warning" style="Warning">Warning, imaginary unit `I` used as a local variable in procedure alg096</Text-field></Output><Output><Text-field layout="Maple Output" style="2D Output"><Equation>NiM+SSdhbGcwOTZHNiJmKkYlNkBJI09LR0YlSSNBQUdGJUklTkFNRUdGJUkkSU5QR0YlSSJOR0YlSSJJR0YlSSJBR0YlSSJCR0YlSSRUT0xHRiVJIkxHRiVJJUZMQUdHRiVJJE9VUEdGJUkmU0hJRlRHRiVJIktHRiVJIkpHRiVJIk1HRiVJI0IxR0YlSSNDMUdGJUkjRDFHRiVJI1gxR0YlSSNYMkdGJUkiREdGJUkiWEdGJUkiWUdGJUkiWkdGJUkiQ0dGJUkiU0dGJUkiUUdGJUkiUkdGJUkjTU1HRiVGJUYlQzAtSSdwcmludGZHRiU2I0k4VGhpc35pc350aGV+UVJ+TWV0aG9kLnwrR0YlPjgkSSZGQUxTRUdGJS1GSDYjSVZUaGV+dHJpZGlhZ29uYWx+c3ltbWV0cmljfmFycmF5fkF+d2lsbH5iZX5pbnB1dH5mcm9tfkdGJS1GSDYjSTthfnRleHR+ZmlsZX5pbn50aGV+b3JkZXI6fCtHRiUtRkg2I0lFfihkaWFnb25hbCk6fkEoMSksfkEoMiksfi4uLix+QShuKSx8K0dGJS1GSDYjSUl+KHN1YmRpYWdvbmFsKTp+QigyKSx+QigzKSx+Li4uLH5CKG4pLnwrfCtHRiUtRkg2I0lnblBsYWNlfmFzfm1hbnl+ZW50cmllc35hc35kZXNpcmVkfm9ufmVhY2h+bGluZSx+YnV0fnNlcGFyYXRlfkdGJS1GSDYjSS5lbnRyaWVzfndpdGh8K0dGJS1GSDYjSTdhdH5sZWFzdH5vbmV+YmxhbmsufCt8K3wrR0YlLUZINiNJUkhhc350aGV+aW5wdXR+ZmlsZX5iZWVufmNyZWF0ZWQ/fi1+ZW50ZXJ+WX5vcn5OLnwrR0YlPjglJi1JJnNjYW5mR0YlNiNJIyVjR0YlNiMiIiJAJTUvRmFvUSJZRiUvRmFvUSJ5RiVDLS1GSDYjSVNJbnB1dH50aGV+ZmlsZX5uYW1lfmlufnRoZX5mb3Jtfi1+ZHJpdmU6XG5hbWUuZXh0fCtHRiUtRkg2I0k7Zm9yfmV4YW1wbGU6fn5BOlxEQVRBLkRUQXwrR0YlPjgmJi1GZG82I0kjJXNHRiVGZ28+OCctSSZmb3BlbkdGJTYlRmdwSSVSRUFER0YlSSVURVhUR0YlRks/KEYlRmhvRmhvRiUvRkxGTUMlLUZINiNJOElucHV0fnRoZX5kaW1lbnNpb25+bi58K0dGJT44KCYtRmRvNiNJIyVkR0YlRmdvQCUyRmhvRmpxQyU/KDgpRmhvRmhvRmpxSSV0cnVlR0kqcHJvdGVjdGVkR0Zlcj4mOCo2IywmRmNyRmhvISIiRmhvJi1JJ2ZzY2FuZkdGJTYkRl1xSSMlZkdGJUZnbz8oRmNyIiIjRmhvRmpxRmRyPiY4K0ZpckZccz5GTEklVFJVRUdGJS1GSDYjSUNEaW1lbnNpb25+bXVzdH5iZX5ncmVhdGVyfnRoZW5+MS58K0dGJUZLPyhGJUZob0Zob0YlRmRxQyUtRkg2I0k2SW5wdXR+dGhlfnRvbGVyYW5jZS58K0dGJT44LCYtRmRvNiNGYHNGZ29AJTIiIiFGYXRGZnMtRkg2I0lLVG9sZXJhbmNlfm11c3R+YmV+YX5wb3NpdGl2ZX5yZWFsfm51bWJlci58K0dGJUZLPyhGJUZob0Zob0YlRmRxQyUtRkg2I0lJSW5wdXR+dGhlfm1heGltdW1+bnVtYmVyfm9mfml0ZXJhdGlvbnMufCtHRiU+OC1GW3JAJTJGZ3RGYXVGZnMtRkg2I0lIVGhlfm51bWJlcn5tdXN0fmJlfmF+cG9zaXRpdmV+aW50ZWdlci58K0dGJS1JJ2ZjbG9zZUdGJTYjRl1xLUZINiNJWFRoZX5wcm9ncmFtfndpbGx+ZW5kfnNvfnRoZX5pbnB1dH5maWxlfmNhbn5iZX5jcmVhdGVkLnwrR0YlQCQvRkxGZ3NDLi1GSDYjSTpDaG9pY2V+b2Z+b3V0cHV0fm1ldGhvZDp8K0dGJS1GSDYjSTUxLn5PdXRwdXR+dG9+c2NyZWVufCtHRiUtRkg2I0k4Mi5+T3V0cHV0fnRvfnRleHR+ZmlsZXwrR0YlLUZINiNJNlBsZWFzZX5lbnRlcn4xfm9yfjIufCtHRiU+OC5GW3JAJS9GXXdGYnNDJkZgcC1GSDYjSTxmb3J+ZXhhbXBsZX5+QTpcT1VUUFVULkRUQXwrR0YlRmZwPjgvLUZfcTYlRmdwSSZXUklURUdGJUZicT5GZXdJKGRlZmF1bHRHRiUtSShmcHJpbnRmR0YlNiRGZXdJLFFSfk1FVEhPRHwrfCtHRiU+ODBGZ3Q+ODFGaG8/KEYlRmhvRmhvRiUzMUZieEZhdUZedkMwLUZceDYmRmV3STxJdGVyYXRpb25+bnVtYmVyfiVkfk5+PX4lZHwrR0YlRmJ4RmpxLUZceDYkRmV3SUBUaGV+YXJyYXl+QX5pc35ub3d+YXN+Zm9sbG93czp8K0dGJS1GXHg2JEZld0krRGlhZ29uYWw6fCtHRiU/KEZjckZob0Zob0ZqcUZkci1GXHg2JUZld0kofiUxMS44ZkdGJUZnci1GXHg2JEZld0kwfCtPZmZ+ZGlhZ29uYWw6fCtHRiU/KEZjckZic0Zob0ZqcUZkci1GXHg2JUZld0ZjeUZkcy1GXHg2JEZld0kifCtHRiVAJDEtSSRhYnNHRmVyNiMmRmVzNiMsJkZqcUZob0Zbc0Zob0ZhdEMlPiZGaHJGY3osJkZnekZob0ZgeEZoby1GXHg2JUZld0k1RWlnZW52YWx1ZX49fiUxMi44ZnwrR0YlRmd6PkZqcUZkekAkMS1GYHo2IyZGZXNGZ29GYXRDJz4mRmhyNiNGZ3QsJkZkW2xGaG9GYHhGaG8tRlx4NiVGZXdGW1tsRmRbbEZcW2w+RmRbbCZGaHJGZ28/KDgyRmJzRmhvRmpxRmRyQyQ+JkZocjYjLCZGXFxsRmhvRltzRmhvJkZocjYjRlxcbD4mRmVzRmBcbCZGZXNGY1xsQCQvRmpxRmd0RktAJC9GanFGaG9DJUZjW2xGZ1tsRktAJEZedkMkPjgzRmR6QCQxRmJzRl9dbEMkPyhGY3JGYnNGaG9GX11sRmRyQCQxLUZgejYjRmRzRmF0QyRGSz5GXFxsRmNyQCRGZHFDKy1GXHg2JEZld0k3U3BsaXR+dGhlfm1hdHJpeH5pbnRvfCtHRiU/KEZjckZob0Zob0ZhXGxGZHItRlx4NiVGZXdJJyUxMS44ZkdGJUZnckZqeT8oRmNyRmJzRmhvRmFcbEZkci1GXHg2JUZld0ZiXmxGZHMtRlx4NiRGZXdJKHwrfmFuZH58K0dGJT8oRmNyRlxcbEZob0ZqcUZkckZgXmxGank/KEZjciwmRlxcbEZob0Zob0Zob0Zob0ZqcUZkckZkXmxGanlAJEZedkMmPjg0LCZGZ3pGW3MmRmhyNiMsJkZqcUZobyEiI0Zob0Zbcz44NSwmKiZGZ3pGaG9GYV9sRmhvRmhvKiZGYnpGaG9GYnpGaG9GW3M+ODYsJiomRl9fbEZob0ZfX2xGaG9GaG9GZl9sISIlQCUyRltgbEZndEMkLUZceDYlRmV3SUdQcm9ibGVtfndpdGh+Y29tcGxleH5yb290cyx+RDF+PX4lLjhlfCtHRiVGW2BsRktDJT5GW2BsLUklc3FydEdGJTYjRltgbEAlMkZndEZfX2xDJD44NywkKiZGZl9sRmhvLCZGX19sRmhvRltgbEZob0Zbc0ZkX2w+ODgsJkZfX2wjRltzRmJzRltgbEZlYWxDJD5GXmFsLCZGW2BsI0Zob0Zic0ZfX2xGZWFsPkZjYWwsJComRmZfbEZobywmRltgbEZob0ZfX2xGW3NGW3NGYnNAJS9GanFGYnNDJj5GXmFsLCZGXmFsRmhvRmB4RmhvPkZjYWwsJkZjYWxGaG9GYHhGaG8tRlx4NiZGZXdJTFRoZX5sYXN0fnR3b35laWdlbnZhbHVlc35hcmU6fiUxMi44ZiUxMS44ZnwrR0YlRl5hbEZjYWxGS0MvQCQyLUZgejYjLCZGZ3pGaG9GY2FsRltzLUZgejYjLCZGZ3pGaG9GXmFsRltzPkZeYWxGY2FsPkZgeEZiYmw/KEZjckZob0Zob0ZqcUZkcj4mODlGaXIsJkZnckZob0ZeYWxGW3M+Jjg6RmVbbCZGZmNsRmVbbD4mODtGZVtsRmFbbD8oRlxcbEZic0Zob0ZqcUZkckMoPiY4PDYjLCZGXFxsRmhvRmRfbEZoby1GaGBsNiMsJiomJkZqY2xGZGRsRmhvRmpkbEZob0ZobyomRmVcbEZob0ZlXGxGaG9GaG8+Jjg9RmBcbComRmpkbEZob0ZiZGxGW3M+Jjg+RmBcbComRmVcbEZob0ZiZGxGW3M+Jjg/RmRkbCwmKiZGXWVsRmhvJkZeZGxGZGRsRmhvRmhvKiZGYWVsRmhvJkZmY2xGYFxsRmhvRmhvPiZGamNsRmBcbCwmKiZGXWVsRmhvRltmbEZob0ZobyomRmFlbEZob0ZpZWxGaG9GW3NAJDBGXFxsRmpxQyQ+JjhARmRkbComRmFlbEZob0ZmXGxGaG8+JkZeZGxGYFxsKiZGXWVsRmhvRmZcbEZob0ZeXWw+OEFGY19sPiZGY2RsRmN6JkZqY2xGY3o+RmRbbCwmKiYmRl5lbEZnb0ZobyZGY2RsRmVbbEZob0ZobyomJkZiZWxGZ29GaG8mRmZlbEZlW2xGaG9GaG8+RmFbbComRmZnbEZobyZGY2RsRmdvRmhvQCQyRmJzRmpxPyhGXFxsRmJzRmhvRl9dbEZkckMkPkZfXGwsJiooJkZeZWxGY1xsRmhvRl1lbEZobyZGY2RsRmBcbEZob0ZobyomJkZiZWxGY1xsRmhvJkZmZWxGYFxsRmhvRmhvPkZmXGwqJkZlaGxGaG8mRmNkbEZjXGxGaG8+Rmd6KiYmRl5lbEZjekZob0ZeZ2xGaG8+RmJ4LCZGYnhGaG9GaG9GaG9AJDNGXnYyRmF1RmJ4LUZceDYkRmV3SUhNYXhpbXVtfk51bWJlcn5vZn5JdGVyYXRpb25zfkV4Y2VlZGVkLnwrR0YlQCQwRmV3Rmp3QyQtRmh1NiNGZXctRkg2JElET3V0cHV0fmZpbGV+JXN+Y3JlYXRlZH5zdWNjZXNzZnVsbHlHRiVGZ3AtSSdSRVRVUk5HRmVyRmVbbEYlRiVGJQ==</Equation></Text-field></Output></Group><Group><Input><Text-field layout="Normal" prompt="> " style="Maple Input">alg096();</Text-field></Input><Output><Text-field layout="Normal" style="Line Printed Output">This is the QR Method.
The tridiagonal symmetric array A will be input from a text file in the order:
(diagonal): A(1), A(2), ..., A(n),
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -