w09 b, Inżynierskie, Semestr III, Metody obliczeniowe, Wyklady

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
:=


>
>






  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • alter.htw.pl
  • Powered by WordPress, © Nie obrażaj więc mojej inteligencji poprzez czynione na pokaz zaniżanie własnej.