Soru sorİç içe for döngüsü ile iki matrisin elementlerini çarpmak
zynparslanturk tarafından 7 yıl önce soruldu

Merhaba,

 for k=1:5
          for i=1:6
          A(i,:)=Cust(i,:).*D(k,:)
          end
 end

D Matrisinin 1. Satırı; Cust Matrisinin her bir satırıyla tek tek çarpılarak 6 satırlık bir matris oluşturulsun. Daha sonra aynı işlem;
D Matrisinin 2. Satırı; Cust Matrisinin her bir satırıyla tek tek çarpılarak 6 satırlık bir matris oluşturulsun istiyorum.
Yukarıda yazdığım for döngüsü bana sadece 1 tane matris veriyor. Benim sonuçta elde etmek istediğim;
6'şar satırlık, toplam 5 matris. Nasıl yapabilirim?
Saygılarımla…

8 Cevap
sayginer Yönetici tarafından 7 yıl önce cevaplandı

Bu şu demek oluyor, D matrisinin satır numarasını her seferinde 1 arttıracaksınız. Aşağıdaki örnek kodu inceleyebilirsiniz.

for kk=1:5
for k=1:5
for i=1:6
A(i,:)=Cust(i,:).*D(k,kk)
end
end
end
zynparslanturk tarafından 7 yıl önce cevaplandı

Tam olarak istediğimi elde edemedim. 
D =
1    1    0    1    1             %A1'i elde etmek için kullanılacak satır.
0    0    1    0    1              %A2'i elde etmek için kullanılacak satır.
1    1    1    1    0              %A3'i elde etmek için kullanılacak satır.
0    0    0    1    0               %A4'i elde etmek için kullanılacak satır.
1    1    0    0    0               %A5'i elde etmek için kullanılacak satır.

Cust =
2       3     6       7      1
0       5     8       4      12
11     6     14     5       8
19    18    21    16      13
3      9      8       7       10
4      7      9       6        0
Yapmak istediğim;
A1= D'nin ilk satırı X(çarpı) tek tek Cust'ın tüm satırları
1 1 0 1 1 .* 2 3 6 7 1
1 1 0 1 1 .* 0 5 8 4 12
1 1 0 1 1 .* 11 6 14 5 8
1 1 0 1 1 .* 19 18 21 16 13
1 1 0 1 1 .* 3 9 8 7 10
1 1 0 1 1 .* 4 7 9 6 0
A1=    2     3     0      7    1
          0      5    0      4    12
          11    6    0      5    8
          19   18   0     16   13
          3      9    0      7    10
          4      7    0      6     0
 
A2=  
0    0    1    0    1 .* 2       3     6       7      1 
0    0    1    0    1 .* 0       5     8       4      12
0    0    1    0    1 .* 11     6     14     5       8
0    0    1    0    1 .* 19    18    21    16      13
0    0    1    0    1 .* 3      9      8       7       10
0    0    1    0    1 .* 4      7      9       6        0
 
A2=    0     0      6      0      1
          0     0      8      0      12
          0     0     14     0       8
          0     0      21    0      13
          0     0      8      0       10
          0     0      9      0        0
 
Benzer şekilde A3,A4 ve A5'i hesaplasın istiyorum.
 
Saygılarımla…

sayginer Yönetici tarafından 7 yıl önce cevaplandı

Merhaba,
Aşağıdaki örneği inceleyebilirsiniz,

%Rastgele Ornek D ve Cust matrislerini uretelim
D = randi([1 10],6,6)
Cust = randi([1 10],6,6)

for i =1:6; %D'nin satirlarini degistirecek
    for s = 1:6; %Cust satirlarini degistirecek     
        A(s,:,i)=D(i,:).*Cust(s,:); %Carpmayi yaparak sonuclari A'da depolayacak  
    end    
end
zynparslanturk tarafından 7 yıl önce cevaplandı

Çok fazla meşgul ettiğim için özür dileyerek;

A(s,:,i)=D(i,:).*Cust(s,:); satırı için hata veriyor.

sayginer Yönetici tarafından 7 yıl önce cevaplandı

Ne hatası alıyorsunuz? Ben yukarıdaki örneği 6ya6lık matrisler için verdim. Eğer sizin matrisleriniz (A ve Cust) 6ya6lık değil ise i ve s değerlerini ona göre değiştirmelisiniz.
Lütfen sormaktan çekinmeyin.

zynparslanturk tarafından 7 yıl önce cevaplandı

Boyut uyuşmazlığı hatası veriyor. Ben önce sizin yazdığınız kodu çalıştırdım. Daha sonra kendi i ve s değerlerimi ekleyecektim. Sonuç şu şekilde;

>> sdsf

D =

7 2 4 3 3 1
4 5 4 3 8 2
3 4 2 5 1 2
6 5 3 2 4 3
9 9 1 5 1 2
5 5 5 8 3 2

Cust =

6 6 10 8 4 10
10 3 5 7 9 10
10 1 10 6 9 6
3 5 8 3 5 4
5 2 1 8 4 9
4 1 7 3 7 5

Subscripted assignment dimension mismatch.

Error in sdsf (line 7)
A(s,:,i)=D(i,:).*Cust(s,:); %Carpmayi yaparak sonuclari A'da
depolayacak

sayginer Yönetici tarafından 7 yıl önce cevaplandı

Bir yerlerde yanlışlık yaptığınızı düşünüyorum. Kod aşağıdaki gibi hata vermeden çalışmaktadır.
 

%D ve Cust matrislerini uretelim
D = [7 2 4 3 3 1;
    4 5 4 3 8 2;
    3 4 2 5 1 2;
    6 5 3 2 4 3;
    9 9 1 5 1 2;
    5 5 5 8 3 2];


Cust = [6 6 10 8 4 10;
    10 3 5 7 9 10;
    10 1 10 6 9 6;
    3 5 8 3 5 4;
    5 2 1 8 4 9;
    4 1 7 3 7 5];

for i =1:6; %D'nin satirlarini degistirecek
    for s = 1:6; %Cust satirlarini degistirecek
        A(s,:,i)=D(i,:).*Cust(s,:); %Carpmayi yaparak sonuclari A'da depolayacak
    end
end

A Matrisinin çıktısı da aşağıdaki gibidir:
 

val(:,:,1) =
42 12 40 24 12 10
70 6 20 21 27 10
70 2 40 18 27 6
21 10 32 9 15 4
35 4 4 24 12 9
28 2 28 9 21 5

val(:,:,2) =
24 30 40 24 32 20
40 15 20 21 72 20
40 5 40 18 72 12
12 25 32 9 40 8
20 10 4 24 32 18
16 5 28 9 56 10

val(:,:,3) =
18 24 20 40 4 20
30 12 10 35 9 20
30 4 20 30 9 12
9 20 16 15 5 8
15 8 2 40 4 18
12 4 14 15 7 10

val(:,:,4) =
36 30 30 16 16 30
60 15 15 14 36 30
60 5 30 12 36 18
18 25 24 6 20 12
30 10 3 16 16 27
24 5 21 6 28 15

val(:,:,5) =
54 54 10 40 4 20
90 27 5 35 9 20
90 9 10 30 9 12
27 45 8 15 5 8
45 18 1 40 4 18
36 9 7 15 7 10

val(:,:,6) =
30 30 50 64 12 20
50 15 25 56 27 20
50 5 50 48 27 12
15 25 40 24 15 8
25 10 5 64 12 18
20 5 35 24 21 10

zynparslanturk tarafından 7 yıl önce cevaplandı

Evet bu haliyle çalıştı ve istediğim sonucu alabildim. Çok teşekkür ederim.
Saygılarımla