#maple
Вопрос:
Я пишу программу, которая решает систему уравнений с использованием метода Гаусса, но я получаю ошибку, связанную с рекурсией, но в моем коде нет рекурсии, как я могу это исправить?
n := 12; k := 2; A := Matrix([[1, 2, 1], [4, 5, 6], [7, 8, n]]); B := Vector([2, n, n^2]) Ao = Matrix([A, B]); n1 := 3; s := 0; for k from 1 to n1-1 do; for j from k to n1 do; s := s abs(A[j, k]); end do; if s = 0 then print("Error") end if; for j from k 1 to 3 do; m := Ao[j, k]/Ao[k, k]; for p from k 1 to 4 do; Ao[j, p] := -m*Ao[k, p] Ao[j, p]; end do;end do;end do; if Ao[n1,n1] = 0 then print("Error") else x[n] := (Ao[n1,n1 1])/(Ao[n1,n1]); end if; for i from n1 by -1 to 1 do; sums := 0; for j from i 1 to n1 do; sums := sums Ao[i, j]*x[j];end do; x[i] := (Ao[i, n1 1]-sums)/Ao[i, i]; end do; print("x1" = x[1], "x2" = x[2], "x3" = x[3]);
Ответ №1:
У тебя есть линия,
Ao = Matrix([A, B]);
который создает уравнение, но не выполняет задание.
Правильный синтаксис для присвоения был бы,
Ao := Matrix([A, B]);
С Ao
неназначенным (как у вас есть) следующая строка представляет собой рекурсивное указание на неинициализированную индексированную ссылку Ao[j,p]
Ao[j, p] := -m*Ao[k, p] Ao[j, p];
Если вы исправите строку, чтобы выполнить фактическое назначение, то код вычислит результат, соответствующий решению из,
LinearAlgebra:-LinearSolve(A,B);