2016-08-11 2 views
1

Schreiben möchte ich eine n-by-n erstellen, die wie folgt aussieht:eine N-ter Ordnung Matrix

enter image description here

Wo die Koeffizienten a1, a2, ...... an im Voraus bekannt sind, und im Grunde die Reihenfolge der Matrix n ist nichts als length(a).

paar Beispiele dafür, was ich meine:

enter image description here

enter image description here

Die einzige Bedingung n >= 2 zu sein, denn wenn n == 1, dann das ganze Konzept auseinander fällt.

EDIT: Ich möchte eine Variable mit der letzten Zeile der Matrix multiplizieren, aber die Reihenfolge der Variablen ist abhängig von der Reihenfolge der Matrix.

Angenommen, ich möchte die Variable x mit der letzten Zeile multiplizieren.

enter image description here

Beispiel:

enter image description here

enter image description here

Antwort

3

Sie können tun, wie diese

N = 5;      % size 
last_row = rand(1,N);  % last row (a_1,a_2,...,a_n) 

A = diag(ones(N-1,1),1); % place upper diagonal 
A(N,:) = last_row;   % place last row 

diag(vector, k) erzeugen eine Matrix mit Nullen gefüllt und k 'aus der Diagonale als vector, in Ihrem Fall 1.

Dann können Sie die letzte Zeile als bekannte Werte ersetzen.

Das Ergebnis ist

0 1 0 0 0 
0 0 1 0 0 
0 0 0 1 0 
0 0 0 0 1 
a b c d e 

wo a,b,c,d,e sind Zufallszahlen in last_row enthalten.

+0

Dies ist genau das, was ich gesucht habe! mein Retter – Ashok

+0

Können Sie bitte die Bearbeitung überprüfen. – Ashok

+0

Überprüfen Sie den Operator, der mit '.' beginnt. In Ihrem Fall können Sie 'last_row = (x.^(1: n)) verwenden. * Last_row' – Dohyun

1

Eine kleine Variation auf 김도현 ‚s Antwort, mit eye und circshift:

N = 5;    % same as before 
last_row = rand(1,N); % same as before 

% Option 1 
A = circshift(eye(N),1,2); 
A(N,:) = last_row; % same as before 

Ein paar mehr Optionen, falls Sie Ihre Ausgabe sparse zu sein (wenn Sie nicht vertraut sind mit sparseMATLAB's documentation on their advantages sehen):

% Option 2 (sparse) 
A = gallery('tridiag', zeros(1,N-1), zeros(1,N), ones(1,N-1)); 
A(N,:) = last_row; % same as before 

% Option 3 (sparse, all-in-one, using the syntax "S = sparse(i,j,v)") 
A = sparse([1:N-1, N*ones(1,N)], [2:N, 1:N], [ones(1,N-1) last_row]); 

Betrachten Sie auch: spdiags und speye.

+0

Auch wenn Ihre Antwort sauberer aussieht; Ich bevorzuge @ 김도현 Antwort. es ist leicht zu verstehen – Ashok

+2

@Ashok Ich habe nicht gesagt 김도현 's Antwort war schlecht, ich biete nur einen anderen Ansatz. –

+0

Ja, da ich 2 Antworten nicht akzeptieren kann, habe ich nur den Grund angegeben, warum ich deine Antwort nicht akzeptiert habe. – Ashok