Array Problem How can I unpack an array? why the firt element pf my array is always 0?
조회 수: 16 (최근 30일)
이전 댓글 표시
Hi
I have written this code, I do not know why always the first element of the array I (which is I1=I(1) is Zero?
Here is the function that I have written the code.
function [I1,I2,I3] = DynamicModel(x1,x2,x3,V1,V2,V3,c1,c2,c3,Gs,G)
I_11 = 2*V1*c1*(Gs+G)-V2*c1*(Gs+G)-V3*c1*(Gs+G)+c1*c2*x2*(V1-V2)+c1*c3*x3*(V1-V3);
I_12 = V1*c2*(Gs+2*G)-V2*c2*(Gs+G)-V3*c2*G;
I_13 = V1*c3*(Gs+2*G)-V2*c3*G-V3*c3*(Gs+G);
I_21 = -V1*c1*(Gs+G)+V2*c1*(Gs+2*G)-V3*c1*G;
I_22 = -V1*c2*(Gs+G)+2*V2*c2*(Gs+G)-V3*c3*(Gs+G)+c2*c3*x3*(V2-V3)+c1*c2*x1*(V2-V1);
I_23 = -V1*c3*G- V2*c3*(Gs+2*G)-V3*c3*(Gs+G);
I_31 = -V1*c1*(Gs+G)-V2*c1*G-V3*c1*(Gs+2*G);
I_32 = -V1*c2*G-V2*c2*(Gs+G)+V3*c2*(Gs+2*G);
I_33 = -V1*c3*(Gs+G)-V2*c3*(Gs+G)+2*V3*c3*(Gs+G)+c1*c3*x1*(V3-V1)+c2*c3*x2*(V3-V2);
Itrans=[I_11 I_12 I_13;
I_21 I_22 I_23;
I_31 I_32 I_33];
G_total= c1*x1+c2*x2+c3*x3+3*Gs;
Additionalpart=((Gs^2+3*G*Gs)/G_total)*[2*V1-V2-V3;-V1+2*V2-V3;-V1-V2+2*V3];
I=(1/G_total)*Itrans*[x1;x2;x3]+Additionalpart;
I1=I(1);
I2=I(2);
I3=I(3);
I also have a question about unpacking the arry, If i write this code like this does it cause any problem?
[I1;
I2;
I3]= I;
I received error for this, How can I write a code in matalb in this way? to unpaching an array?
댓글 수: 1
답변 (3개)
Walter Roberson
2023년 10월 30일
편집: Walter Roberson
2023년 10월 30일
[I1;
I2;
I3]= I;
That code is valid only if I is a function (not function handle) that returns at least 3 outputs. It is not valid if I is a variable.
Unpacking a vector does not have any nice representation in MATLAB, unless you use a helper function or you use at least two lines of code.
%version 1
temp = num2cell(I);
[I1, I2, I3] = temp{:};
%version 2, more certainty, works in older MATLAB
temp = num2cell(I);
[I1, I2, I3] = deal(temp{:});
%version 3, one line but ugly
[I1, I2, I3] = struct('temp', num2cell(I)).temp;
%version 4, helper function
[I1, I2, I3] = unpack(I);
function varargout = unpack(value);
temp = num2cell(value);
[varargout{1:nargout}] = temp{:};
end
There is also a one-line version making use of subref but it is especially ugly.
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Aerospace Applications에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!