1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
| program test
implicit none
integer, dimension( : , : ), allocatable :: mat1, tmat
integer, dimension( : ), allocatable :: u,y, pmv,z,w
integer :: i,n,ps,ps1
print*,'entrer une valeur de n: '
read*,n
allocate(mat1(1:7,2*n), tmat(1:7, 2*n), u(2*n), y(2*n), pmv(2*n),z(2*n), w(2*n) )
print*,'=================pmv= mat*u====================='
!affichage de a
mat1(:,:) = 0
mat1(1,n+3:2*n) = 5
mat1(2,n+2:2*n) = -4
mat1(3,n+1:2*n-1) = 4
mat1(4,n+1:2*n-2) = -5
mat1(6,1:n)=1
mat1(6,n+1:2*n)=2
mat1(5,n+2:2*n)=-3
mat1(7,n+1:2*n-1)=-3
print*, mat1
print*,'entrer un vacteur u de taille',2*n,': '
read*,u
do i =1,n
pmv(i) = mat1(6,i)*u(i)
end do
pmv(n+1) = mat1(1,n+3)*u(2) + mat1(2,n+2)*u(3) + 4*u(n) + mat1(6,n+1)*u(n+1) + mat1(7,n+1)*u(n+2)
pmv(n+2) = mat1(4,n+2)*u(1) + mat1(1,n+3)*u(3) + mat1(2,n+2)*u(4) + mat1(5,n+2)*u(n+1) + mat1(6,n+2)*u(n+2) + mat1(7,n+2)*u(n+3)
do i = n+3, 2*n-2
pmv(i) = mat1(3,i)*u(i-n-2) + mat1(4,i)*u(i-n-1) + mat1(1,i)*u(i-n+1) + mat1(2,i)*u(i-n+2) + mat1(5,i)*u(i-1)&
& + mat1(6,i)*u(i) + mat1(7,i)*u(i+1)
end do
pmv(2*n-1) = mat1(3,2*n-1)*u(n-3) + mat1(4,2*n-2)*u(n-2) + mat1(1,2*n-1)*u(n) + mat1(7,2*n-1)*u(2*n-2)&
& + mat1(6,2*n-1)*u(2*n-1) + mat1(5,2*n-1)*u(2*n)
pmv(2*n) = (-4)*u(1) + mat1(3,2*n-1)*u(n-2) + mat1(4,2*n-2)*u(n-1) + mat1(5,2*n) * u(2*n-1) + mat1(6,2*n)*u(2*n)
print*,'produit = ', pmv
print*,'===================matrice transposee======================'
tmat(:,:) = 0
tmat(1,1:n) = 1
tmat(1,n+1:2*n) = 2
tmat(2,2:n) = 4
tmat(3,3:n) = -5
tmat(4,1:n-1) = -4
tmat(5,1:n-2) = 5
tmat(6,n+1:2*n-1) = -3
tmat(7,n+2:2*n) = -3
print*,tmat
print*,'==================y=tmat*pmv============='
y(1) = tmat(1,1)*pmv(1)+ tmat(3,n)*pmv(n+2) + tmat(2,n)*pmv(n+3) + (-4)*pmv(2*n)
y(2) = tmat(1,2)*pmv(2) + tmat(5,n-2)*pmv(n+1) + tmat(3,n)*pmv(n+3) + tmat(2,n)*pmv(n+4)
do i = 3,n-2
y(i) = tmat(1,i)*pmv(i) + tmat(4,n-1)*pmv(n+i-2) + tmat(5,n-2)*pmv(n+i-1) + tmat(3,n)*pmv(n+i+1)&
& + tmat(2,n)*pmv(n+i+2)
end do
y(n-1) = tmat(1,n-1)*pmv(n-1) + tmat(4,n-1)*pmv(n+3) + tmat(5,n-2)*pmv(n+4) + tmat(3,n-1)*pmv(2*n)
y(n) = tmat(1,n)*pmv(n) + 4*pmv(n+1) + tmat(4,n-1)*pmv(2*n-2) + tmat(5,n-2)*pmv(2*n-1)
y(n+1) = tmat(1,n+1)*pmv(n+1) + tmat(6,n+2)*pmv(n+2)
do i = n+2, 2*n-1
y(i) = tmat(6,i-1)*pmv(i-1) + tmat(1,i)*pmv(i) + tmat(7,i+1)*pmv(i+1)
end do
y(2*n) = tmat(6,2*n-1)*pmv(2*n-1) + tmat(1,2*n)*pmv(2*n)
print*,'y =',y
print*,'==================ps=y*z============='
print*,'entrer un vecteur z de taille',2*n,': '
read*,z
ps = 0
do i =1,2*n
ps = ps+y(i)*z(i)
end do
print*,'produit scalaire = ', ps
print*,'==================w= mat*z============='
do i =1,n
w(i) = mat1(6,i)*z(i)
end do
w(n+1) = mat1(1,n+3)*z(2) + mat1(2,n+2)*z(3) + 4*z(n) + mat1(6,n+1)*z(n+1) + mat1(7,n+1)*z(n+2)
w(n+2) = mat1(4,n+2)*z(1) + mat1(1,n+3)*z(3) + mat1(2,n+2)*z(4) + mat1(5,n+2)*z(n+1) + mat1(6,n+2)*z(n+2) + mat1(7,n+2)*z(n+3)
do i = n+3, 2*n-2
w(i) = mat1(3,i)*z(i-n-2) + mat1(4,i)*z(i-n-1) + mat1(1,i)*z(i-n+1) + mat1(2,i)*z(i-n+2) + mat1(5,i)*z(i-1)&
& + mat1(6,i)*z(i) + mat1(7,i)*z(i+1)
end do
w(2*n-1) = mat1(3,2*n-1)*z(n-3) + mat1(4,2*n-2)*z(n-2) + mat1(1,2*n-1)*z(n) + mat1(7,2*n-1)*z(2*n-2)&
& + mat1(6,2*n-1)*z(2*n-1) + mat1(5,2*n-1)*z(2*n)
w(2*n) = (-4)*z(1) + mat1(3,2*n-1)*z(n-2) + mat1(4,2*n-2)*z(n-1) + mat1(5,2*n) * z(2*n-1) + mat1(6,2*n)*z(2*n)
print*,'produit = ', w
print*,'===========ps1=pmv*w================================'
ps1 = 0
do i =1,2*n
ps1 = ps1+pmv(i)*w(i)
end do
print*,'produit scalaire1 = ', ps1
end program test |
Partager