Vektör MATLAB'da sözdizimi Matrix

oy
2

MATLAB'te 2 vektörleri birleştirmek için bir yol var mı öyle ki:

mat = zeros(length(C),length(S));
for j=1:length(C)
    mat(j,:)=C(j)*S;
end

Normal MATLAB sözdizimi benzer kullanma:

mat = C * S(1:length(S))

Bu normal matris işlemlerini yapmaya çalışıyor çünkü İç matris boyutları hatasını kabul etmelidir verir. Bu yüzden doğru MATLAB'da bunu nasıl ifade edeceğini emin değilim standart Lineer Cebir operasyon değil, ama MATLAB'te aşırı yavaş bir döngü, gerektirmeden mümkün olmalıdır gibi görünüyor.

Oluştur 23/06/2009 saat 16:23
kaynak kullanıcı
Diğer dillerde...                            


6 cevaplar

oy
4

MATLAB'te bu yürütme deneyin:

mat = C*S'

De olduğu gibi:

C = [1; 2; 3];
S = [2; 2; 9; 1];

mat = zeros(length(C),length(S));
for j=1:length(C)
    mat(j,:)=C(j)*S;
end

% Equivalent code:
mat2 = C*S';

myDiff = mat - mat2
Cevap 23/06/2009 saat 16:35
kaynak kullanıcı

oy
5

Senin açıklamalardan, basit bir matris operasyonu gibi geliyor. Sadece sizin için doğru boyutlara sahip emin olmak gerekir C ve S . kolon vektörü olmalıdır ( uzunluğu (C) -by-1) ve S bir satır vektörü olmalıdır (1-yan uzunluğu (S) ). Varsayarsak doğru ölçüler sadece aşağıdakileri yapın şunlardır:

mat = C*S;

Onların boyutları emin değilseniz, bu çalışması gerekir:

mat = (C(:))*(S(:)');

DÜZENLEME: Aslında parantez ile biraz deli gitti. Hiçbir düzen-of-operasyon endişeler vardır çünkü Bazıları, gereksizdir. İşte daha temiz bir sürümü:

mat = C(:)*S(:)';

AÇIKLAMA:

Matris çarpım operatörü MATLAB bir ya üretecek iç ürünü (bir sabit değere ile sonuçlanan) ya da dış bir ürün , uygulandığı vektörlerin boyutlarına bağlı olarak (bir matris içinde elde edilen).

Son denklem nedeniyle, yukarıda kullanımının bir dış ürünü üreten kolon operatörü vektör bağımsız değişken boyutları yeniden şekillendirmek için. Sözdizimi C (:) içeriğini yeniden şekillendirir C , tek bir sütun vektörüne. Sözdizimi , S (:)' içeriğini yeniden şekillendirir S , daha sonra bir sütun vektörüne bir sıra vektörü içine aktarır. Çarpıldığında, bu boyuttaki bir matris ile sonuçlanır ( uzunluğu (C) -by- uzunluğu (S) ).

Not: kolon operatörü bu kullanımı vektörleri ve herhangi bir boyut matrisleri için geçerlidir, (gösterildiği gibi, daha kolay bazı işlemleri yapar, tek kolonlu bir vektör içine içeriklerini yeniden şekillendirmek için izin bu diğer çok soru ).

Cevap 23/06/2009 saat 16:35
kaynak kullanıcı

oy
0

meshgrid kullanmayı deneyin:

[Cm, Sm] = meshgrid(C, S);
mat = Cm .* Sm;

düzenleme: Nevermind, matris çarpım çok yapacağız. Sadece Ardından C * S. do bir sütun vektörü C ve bir satır vektörü S. gerek

Cevap 23/06/2009 saat 16:36
kaynak kullanıcı

oy
1

Ben ne yaptığını tamamen açık değilim - sonuçta belirlenen matris oluşacak gibi görünüyor length(C)sıralar, iinci satır vektörü Starafından ölçekli iinci girişi C(bir vektör subscripting bir skalar verir beri). Bu durumda, böyle bir şey yapabilirsiniz

mat = repmat(C,[1 length(S)]) .* repmat(S, [length(C) 1])

nerede size kiremit Csütunlarında ve Ssatırlar aşağı.

Cevap 23/06/2009 saat 16:40
kaynak kullanıcı

oy
2

aşağıdakileri ifade ediyor mu?

mat = zeros(length(C),length(S));
for j=1:length(C)
    mat(j,:)=C(j)*S;
end

Eğer öyleyse, sadece matris çarpım var:

C' * S    % if C and S are row vectors
C * S'    % if C and S are column vectors

Eğer olup olmadığını bilmiyorsanız Cve Ssatır vektörleri veya sütun vektörleri, daha sonra, sütun vektörleri bunları açmak aktarması bir hile kullanabilirsiniz Sonları çarpılarak önce:

C(:) * S(:)'
Cevap 23/06/2009 saat 16:41
kaynak kullanıcı

oy
1

Bunu dene:

C = 1: 3 S = 1: 5 Mat1 = C '* S

mat2 = bsxfun (@times, C', S)

(İhtiyacınız işlev değil daha basit MATLAB notasyonu olduğunda esp. Iyi)

--Loren

Cevap 24/06/2009 saat 14:07
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more