I want to loop an equation over multiple rows

조회 수: 50 (최근 30일)
Beth Lewis
Beth Lewis 2021년 8월 15일
편집: John D'Errico 2021년 8월 15일
I know how to do this in excel but not in Matlab.
I have a huge matrix and in that I want to create a equation for only three column( a,b and c) s, but on every row. I want it to add a column with the answers to the equation(x).
The equation is x=a*b^c
In each row of columns a b and c the integers are different, so I can't use a simple number instead.
I am thinking the answer to this is a for loop but I am a begginer at Matlab so may be wrong.
In excel the way i would do this is create the equation in the top row and drag down,if that makes sense.

채택된 답변

John D'Errico
John D'Errico 2021년 8월 15일
편집: John D'Errico 2021년 8월 15일
Your problem is you want to write this as if you are still using Excel. MATLAB is not a spreadsheet, but you are still thinking as if "YOU WANT TO USE A SPREADSHEET".
You have a matrix, with columns in it. The columns in a matrix do not have lettered names. So, first, I'll create a matrix with three columns.
M = randi(5,10,3)
M = 10×3
5 5 4 5 2 3 3 3 4 4 2 5 5 3 3 3 4 2 5 5 5 5 2 1 3 4 5 5 5 4
So here I have a 10x3 matrix. 10 rows, 3 columns. Each element is an integer from 1 to 5 (in this case.)
Now you want to form something from these rows. How do you access a column of a matrix? Use indexing. So the first column (that which you want to call a) is just M(:,1). So all of the rows of M, but only the first column.
result = M(:,1).*M(:,2).^M(:,3);
You will see I used those dotted operators, .* and .^ to do the computations. That is because I have three vectors of elements, and you wish to do the same computation for each member of those sets of vector elements.
I would strongly recommend that you put the result of that computation into a new variable, not append it to your array. Learn to use named variables. Again, you are still thinking as if you are using a spreadsheet when you decide to append the result as a new column of the array.
Or, you can solve this using a simple loop.
Nrows = size(M,1); % how many rows in M?
result = zeros(Nrows,1); % preallocate result
for ind = 1:Nrows % Looping over each row
result(ind) = M(ind,1)*M(ind,2)^M(ind,3); % compute ONE result for each row
end
In either case, we will have for the array here:
result
result = 10×1
3125 40 243 128 135 48 15625 10 3072 3125
Let the spreadsheet thinking go.
  댓글 수: 2
Beth Lewis
Beth Lewis 2021년 8월 15일
Hi thank you to both of you, this has really helped!
Im starting my dissertation research analysis and you've put a smile on my face with this code working, I really appreciate it.
John D'Errico
John D'Errico 2021년 8월 15일
My pleasure.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Image Analyst
Image Analyst 2021년 8월 15일
Try this;
columnsToProcess = [4, 9, 17]; % Whatever....
[rows, columns] = size(x); % Size of original matrix.
for col = columnsToProcess % Process only these particlar columns.
for row = 1 : rows
% Get the a, b, and c parameters.
% These vary on a row-by-row basis.
a = however you get it.
b = however you get it.
c = however you get it.
x(row, col) = a * b ^ c;
end
end

카테고리

Help CenterFile Exchange에서 Spreadsheets에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by