how do i delete questions?
    3 ビュー (過去 30 日間)
  
       古いコメントを表示
    
I do not want to use assignin,evalin or eval. If you run the code you'll see that at the bottom the matrices for M_A, M_B, M_C and M_D are displayed. Please can you show me how I can have these variables as outputs and their matrices in the workspace? So far only the first output value (M_A)is showing up as an output, as "ans". I'd like it to say M_A, and same for the others (M_B, M_C and M_D). Please help 
function [M_A, M_B, M_C, M_D] = DiagDom
A =  [ 1 4 0 1 1; -1 -5 9 -20 2 ; 15 1 4 5 1 ; 2 2 -5 0 0; 0 2 -3 1 -9];
B= [ 9 3 3; 12 3 2; 1 3 5];
C= [ 1 13 2; 1 3 9; -12 2 -1];
D= [ 5 -2 4 2; 0 3 -1 -1; 3 3 9 -5;1 1 1 5];
oldA =  [ 1 4 0 1 1; -1 -5 9 -20 2 ; 15 1 4 5 1 ; 2 2 -5 0 0; 0 2 -3 1 -9];
oldB= [ 9 3 3; 12 3 2; 1 3 5];
oldC= [ 1 13 2; 1 3 9; -12 2 -1];
oldD= [ 5 -2 4 2; 0 3 -1 -1; 3 3 9 -5;1 1 1 5];
M = {A,B,C,D}; 
for i=1:numel(M)
    count = 0;
    while(1) % Perform infinite loop, till you find the diagonally dominant matrix
        if itisDiagDom (M{i}) % If this is diagonally dominant, disp and break the loop
            disp (['Matrix M is diagonally-dominant']);
            celldisp(M) ; 
            disp([count]);
            break;
        else
            M{i} = M{i}(randperm(size(M{i}, 1)), :);
            count= count+1 ;
             disp([count]); 
         if count > 500
           if itisDiagDom (M{1})
               M_A = M{1}
           else 
               M_A = oldA
           end
           if itisDiagDom (M{2})
               M_B= M{2}
           else
               M_B= oldB
           end
           if itisDiagDom (M{3})
               M_C= M{3}
           else
               M_C= oldC
           end
           if itisDiagDom (M{4})
               M_D= M{4}
           else
               M_D= oldD
           end
          break ; 
         end
             % Randomly swaps rows
        end
    end
end
end 
function [isdom] = itisDiagDom( A ) 
isdom = true;
for r = 1:size(A,1)
    rowdom = 2 * abs(A(r,r)) > sum(abs(A(r,:)));
    isdom = isdom && rowdom;
end
if isdom == 0
    disp (['Matrix']);
    disp([A]);
    disp([' is not diagonally-dominant']);
elseif isdom == 1
        disp (['Matrix is diagonally-dominant']);
         disp([A]);
end
end
5 件のコメント
採用された回答
  Stephen23
      
      
 2020 年 5 月 3 日
        
      編集済み: Stephen23
      
      
 2020 年 5 月 3 日
  
      You need to call the function with all of its output arguments, e.g. (pick the names to suit your needs):
[A,B,C,D] = DiagDom();
Very basic MATLAB concepts, e.g. how to call functions with multiple output arguments, are explained in the introductory tutorials:
4 件のコメント
  Tommy
      
 2020 年 5 月 3 日
				
      編集済み: Tommy
      
 2020 年 5 月 3 日
  
			"Reason: Another answer is better"
alroyp10, only one answer was posted in response to the question, and it did sufficiently answer what was asked.
"how do i delete questions?"
See the third paragraph here:
The first paragraph here:
And many of the responses here:
その他の回答 (0 件)
参考
カテゴリ
				Help Center および File Exchange で Construct and Work with Object Arrays についてさらに検索
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




