Problem with matrix manipulation
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Assume user input data as below. I define my matrix is cost. The matrix i created is 3 by 3 matrix. So the matrix should form like this:
cost = [c11 c12 c13
c21 c22 c23
c31 c32 c33]
Since I want to display set of row, I do it like this:
c1 = cost(1,:); % it will become c1 = c11 c12 c13
c2 = cost(2,:); % it will become c2 = c21 c22 c23
c3 = cost(3,:); % it will become c3 = c31 c32 c33
Then I want the value in the matrix. I do it like this.
c11 = cost(1,1);
c12 = cost(1,2);
c13 = cost(1,3);
c21 = cost(2,1);
c22 = cost(2,2);
c23 = cost(2,3);
c31 = cost(3,1);
c32 = cost(3,2);
c33 = cost(3,3);
So this is the equation that I want to use for this type of matrix.
lambda = ((8*c13*c23*c33*Pdt)+(4*c12*c23*c33)+(4*c13*c22*c33)+(4*c13*c23*c32)) ./ (4*c23*c33)+(4*c13*c33)+(4*c13*c23));
So my problem is, if I want to make 4 by 3 matrix, and it would generate a matrix like this:
cost = [c11 c12 c13
c21 c22 c23
c31 c32 c33
c41 c42 c43]
The equation that I want to use for this matrix(4 by 3) is quite different. How can I do that? Do I need to use if else statement? Or do while? Can anyone help me solve this? Can anyone create the code?
0 commentaires
Réponse acceptée
Rob Graessle
le 10 Fév 2011
You can use the SIZE function to check how many rows are in the cost matrix, then use IF/ELSE to change the equation used for lambda.
if size(cost, 1) == 3
% Use lambda equation for 3 rows
lambda = ((8*cost(1,3)*cost(2,3)*cost(3,3)*Pdt)+ (4*cost(1,2)*cost(2,3)*cost(3,3)+(4*cost(1,3)*cost(2,2)*cost(3,3)+(4*cost(1,3)*cost(2,3)*cost(3,2)) ./ (4*cost(2,3)*cost(3,3)+(4*cost(1,3)*cost(3,3)+(4*cost(1,3)*cost(2,3));
elseif size(cost, 1) == 4
% Use lambda equation for 4 rows
lambda = ...;
end
Also note that you don't need to create new variables c11, c12, etc. - it's not very memory-efficient.
0 commentaires
Plus de réponses (2)
slumberk
le 10 Fév 2011
2 commentaires
Rob Graessle
le 10 Fév 2011
The '1' argument means you want the size along the first dimension (rows). So this line checks that cost has 3 rows. If you wanted to check the number of columns you would use size(cost,2). Or to get both:
[r,c] = size(cost)
where r is the number of rows and c is columns.
Voir également
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!