필터 지우기
필터 지우기

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
Matt J
Matt J 2023년 10월 30일
편집: Matt J 2023년 10월 30일
I do not know why always the first element of the array I (which is I1=I(1) is Zero?
We don't know what "always" means. What inputs have you tried?

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

답변 (3개)

Torsten
Torsten 2023년 10월 30일
이동: Torsten 2023년 10월 30일
We don't know how you call the function - so we cannot predict I1, I2 and I3.
To your second question:
I = [3 5 -6];
[I1,I2,I3] = deal(I(1),I(2),I(3))
I1 = 3
I2 = 5
I3 = -6

Matt J
Matt J 2023년 10월 30일
편집: Matt J 2023년 10월 30일
To unpack, you can do
[I1,I2,I3]=deal( I(1), I(2), I(3) )
or,
Icell=num2cell(I);
[I1,I2,I3]=Icell{:}

Walter Roberson
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.

카테고리

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

태그

제품


릴리스

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by