2017-04-26 14 views
0

は、私はこれを取得したい:意味別の行列対角に等しい行列の対角を作る方法は?

a=1 2 3 
4 5 6 
7 8 9 i want a at the end to be 

            a= 1 6 9 
            12 25 18 
            49 24 81 

が..私は私が3でそれらをmultppliedマトリックスでも反対の対角線 およびその他のelemnts広場でそれをやった対角線ので、私が持っている 場合この今のところ:

a=rand(n) 
c=fliplr(diag(diag(a)).^2)+(tril(a,-1)+triu(a,1)*3) 
i=(diag(diag(fliplr(a)))).^2 
c(1:n+1:n^2)=0 
result=fliplr(c+i) 

私はCOMANDウィンドウでそれを行う場合は、この作品が、私はとしてそれを書きたいです0機能!前もって感謝します。

+0

あなたの整形は少しクレイジーで、考える[編集]適切 –

答えて

0

で新しいファイルを開く論理インデックスを使用してより短いと計算が速く代替は、要素ごとの乗算と要素単位の力を使用することであろう。

% function b = myfun(a) 
n = 10000 
a = randi(10,n); 
I = eye(size(a,1),'logical'); 
b = a.^2.*I + a.*3.*~I; 
% end 
1

論理インデックスを使用する方が簡単です。あなたは関数として、それを使用したい場合は、単にfunction A = myfunc(A)

% random matrix 
n = 5; 
A = randi(10,n); 
% here you can do: 
% function A = myfunc(A) 

% diagonal indexes 
diagIdxs1 = eye(size(A),'logical'); 
diagIdxs2 = fliplr(diagIdxs1); 
diagIdxs = diagIdxs1 | diagIdxs2; 
% do operations on diagonals and on non-diagonals 
A(diagIdxs) = A(diagIdxs).^2; 
A(~diagIdxs) = A(~diagIdxs).*3; 
+0

をポストをINGの私は関数の中で書いたものを入れた場合、それが線c(1のbacause動作しません:N + 1:N^2 )= 0そしてそれは私の問題です! – lia

関連する問題