Matrices question

조회 수: 14 (최근 30일)
Nathan Edge
Nathan Edge 2011년 10월 5일
Hi,
I have a script with two 'for' loops. Both of the loops involve matrices generated with 'linspace'-the first has N increments, and the second has P increments.
In the first loop, I have generated variables of the type A(N), B(N), etc. For the second loop, I want to craete a new variable of the type F(P,N). I am looking for F to be a matrix of P rows and N columns (or vise versa): however, I seem to be getting F to be a matrix of just one column. Does anybody have any advice?
EDIT: Sorry about the confusion, I'll post the code:
for Phi=linspace(Phimin, Phimax, N)
G(N)=Phi + BOC;
C2(N)=Rcon ./ ((Ccon .* cos(G(N))) + (Scon .* sin(G(N))));
C1(N)=Rmax^2 + (C2(N) .* cos(G(N) + Thetamax));
A(N)= (sqrt(abs(C1(N)+C2(N))) + sqrt(abs(C1(N)-C2(N))))./2;
B(N)=C2(N) ./ (2.*A(N));
for Theta=linspace(Thetamin, Thetamax, P)
F(N,P)= abs(((R(P).*(M*g*L)) .*cos(Theta)) /((A(N).*B(N)) .* sin(G(N)+Theta)));
disp(F(N,P))
end
end
BOC, Rcon. Ccon and Scon are all constants.
[EDITED, JSimon, 06-Oct-2011 09:27 UTC: Code formatted]
  댓글 수: 2
Jan
Jan 2011년 10월 5일
Without seeing the code, only wild guessing is possible.
Please, Nathan, post the code instead of describing it.
Sean de Wolski
Sean de Wolski 2011년 10월 5일
Well my attempt at a wild guess. You overwrite the first column on each iteration
for ii ...
for kk ...
d(1,:) = f(ii,kk)
end
end

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

채택된 답변

Jan
Jan 2011년 10월 6일
You are writing to the element with index N and P, but their values are static and not effected by the loop. I assume, you want this:
vN = linspace(Phimin, Phimax, N)
for iN = 1:length(vN)
Phi = vN(iN);
G(iN)=Phi + BOC;
C2(iN)=Rcon ./ ((Ccon .* cos(G(iN))) + (Scon .* sin(G(iN))));
C1(iN)=Rmax^2 + (C2(iN) .* cos(G(iN) + Thetamax));
A(iN)= (sqrt(abs(C1(iN)+C2(iN))) + sqrt(abs(C1(iN)-C2(iN))))./2;
B(iN)=C2(iN) ./ (2.*A(iN));
vP = linspace(Thetamin, Thetamax, P);
for iP = 1:length(vP)
Theta = vP(iP);
F(iN,iP)= abs(((R(iP).*(M*g*L)) .*cos(Theta)) / ...
((A(iN).*B(iN)) .* sin(G(iN)+Theta)));
disp(F(iN,iP))
end
end
If this solves your problem, it can be made much faster: 1. Pre-allocate the vectors by zeros(1, length(vN)) and zeros(length(vN), length(vP)). And move all repeated calculation before the loops. E.g. the creation of vP, M*g*L.*cos(Theta) etc. But I'm not going to optimize your code, as long as I do not know, if it matchs your needs at all.
  댓글 수: 2
Nathan Edge
Nathan Edge 2011년 10월 7일
Thank you very much for your answer, but I'm still struggling slightly. Can I just ask, is it possible for MATLAB to take a matrix like this:
X= 1
2
3
4
5
6...
And turn it into this:
Y= 1 2
3 4
5 6...
-where I can specify the number of rows and columns?
Andrei Bobrov
Andrei Bobrov 2011년 10월 7일
doc reshape
y = reshape(X,2,[])'

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

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by