Nie obrażaj więc mojej inteligencji poprzez czynione na pokaz zaniżanie własnej.
>
restart: Metody ścisłe rozwiązywania ukadów równań liniowych Generowanie liniowych równań niejednorodnych 20 x 1 + 4 x 2 − 3 x 3 = 19 − 3 x 1 + 40 x 2 + 2 x 3 = 83 4 x 1 + 3 x 2 + 20 x 3 = 70 1. Ręcznie > r1:=20*x[1]+4*x[2]-3*x[3]=19; := r1 20 x 1 + − 4 x 2 3 x 3 = 19 > r2:=-3*x[1]+40*x[2]+2*x[3]=83; := r2 − + + 3 x 1 40 x 2 2 x 3 = 83 > r3:=4*x[1]+3*x[2]+20*x[3]=70; := r3 4 x 1 + + 3 x 2 20 x 3 = 70 2. Za pomocą list uogólnionych > n:=3; n 3 > A:=array(1..n,1..n,[[20,4,-3],[-3,40,2],[4,3,20]]); := 20 4 -3 -3 40 2 430 A := > b:=array(1..n,[19,83,70]); 19 83 70 > for i to n do r||i:=add(A[i,j]*x[j],j=1..n)=b[i]; end do; := b [ := , , ] r1 20 x 1 + − 4 x 2 3 x 3 = 19 r2 := − + + 3 x 1 40 x 2 2 x 3 = 83 r3 := 4 x 1 + + 3 x 2 20 x 3 = 70 3. Za pomocą macierzy > A:=Matrix([[20,4,-3],[-3,40,2],[4,3,20]]); 20 4 -3 -3 40 2 430 A := > b:=Vector([19,83,70]); 19 83 70 b := > X:=Vector(n,symbol=x); x 1 x 2 x 3 > for i to n do r||i:=A[i,1..n].X=b[i] end do; := X := r1 20 x 1 + − 4 x 2 3 x 3 = 19 r2 := − + + 3 x 1 40 x 2 2 x 3 = 83 r3 := 4 x 1 + + 3 x 2 20 x 3 = 70 4 . Za pomocą komendy GenerateEquations > with(LinearAlgebra): > row:=GenerateEquations(A,[seq(x[i],i=1..n)],b); # lista równań := row [ 20 x 1 + − 4 x 2 3 x 3 = 19 , − + + 3 x 1 40 x 2 2 x 3 = 83 , 4 x 1 + + 3 x 2 20 x 3 = 70 ] > for i to n do r||i:=row[i]; end do; := r1 20 x 1 + − 4 x 2 3 x 3 = 19 r2 := − + + 3 x 1 40 x 2 2 x 3 = 83 r3 := 4 x 1 + + 3 x 2 20 x 3 = 70 > Metody rozwiązywania A = > A0:=Array([[20,4,-3],[-3,40,2],[4,3,20]]); x 20 4 -3 -3 40 2 430 A0 := > b0:=Array([19,83,70]); b0 [ := 19 83 70 , , ] a () , aa a k () = − ( 1) − ( 1) , k − = 1, 2,..., 1 1... ... n − ij ij a () , k j ik n =+ = a () , bb b () = − ( 1) − ( 1) k − jkn i i a () , k > for k to n-1 do for i from k+1 to n do for j from k+1 to n do A||(k)[i,j]:=A||(k-1)[i,j]-A||(k-1)[i,k]/A||(k-1)[k,k]*A||(k-1)[ k,j]; b||(k)[i]:=b||(k-1)[i]-A||(k-1)[i,k]/A||(k-1)[k,k]*b||(k-1)[k]; Metoda Gaussa b k ik − k k k kk − k ik − k k k kk − end do: end do: end do: 1 ∑ x = b (1) i − − a x i n n − , = − , 1, ...1 i a (1) i − i ij j ii ji 1 > for i from n by -1 to 1 do x[i]:=1/A||(i-1)[i,i]*(b||(i-1)[i]-add(A||(i-1)[i,j]*x[j],j=i+1. .n)): end do: > seq(x[i],i=1..n); 123 > x:='x'; := xx Metoda Jordana > r1;r2;r3; 20 x 1 + − 4 x 2 3 x 3 = 19 − + + 3 x 1 40 x 2 2 x 3 = 83 4 x 1 + + 3 x 2 20 x 3 = 70 > coeff(lhs(r||1),x[1]); 20 > for i to n do for j to n do r||i:=r||i/coeff(lhs(r||i),x[i]): if j<>i then r||j:=r||j-coeff(lhs(r||j),x[i])*r||i: end if; end do; end do; > for i to n do r||i end do; x 1 = 1 x 2 = 2 x 3 = 3 > x:='x': Rozwiązanie za pomoca wzorów Cramera > with(LinearAlgebra): > A,b; 20 4 -3 -3 40 2 430 19 83 70 , > Ap:=<A|b>; n i (1) =+ ,, 20 4 -3 19 -3 40 2 83 4 3 20 70 Ap := > W:=Determinant(A); :=W 16659 > for i to n do A||i:=ColumnOperation(Ap,[i,n+1]): x[i]:=Determinant(A||i[1..n,1..n])/W: end do: > for i to n do x[i] end do; 1 2 3 > x:='x': > Rozwiązanie za pomocą macierzy odwrotnej > x:=A^(-1).b; 1 2 3 x := > x:='x': Rozwiązanie za pomocą komendy solve > r1:=20*x[1]+4*x[2]-3*x[3]=19; r2:=-3*x[1]+40*x[2]+2*x[3]=83; r3:=4*x[1]+3*x[2]+20*x[3]=70; := r1 20 x 1 + − 4 x 2 3 x 3 = 19 r2 := − + + 3 x 1 40 x 2 2 x 3 = 83 4 x 1 3 x 2 20 x 3 70 > roz:=solve({r||(1..n)},{seq(x[i],i=1..n)}); := r3 := + + = roz { x 3 = 3 = , x 1 1 = , x 2 2 } Rozwiązanie za pomocą komendy LinearSolve > x:=LinearSolve(A,b); 1 2 3 x := > > |
Menu
|