Matlab에서 지정된 헤더 열이 있는 테이블을 출력하는 방법은 무엇입니까?

Matlab에서 지정된 헤더 열이 있는 테이블을 출력하는 방법은 무엇입니까?

테이블의 "열" 변수에서 벡터를 만드는 나의 기술은 일부 시간에만 작동합니다. 다음 코드의 인덱스와 K1의 차이점은 무엇입니까? 수치 방법을 디버깅 중이며 열 인덱스 X, K1, K2, K, Y가 필요합니다. K1, K2 및 K를 추가할 때까지 모두 잘 작동합니까?

기능 코드:

function [index,X,K1,K2,K,Y] = impeulerT(x,y,x1,n)
% modified version of Improved Euler method found in
% Elementary Differential Equations by Edwards and Penney 
X=x;               % initial x
Y=y;               % initial y
x1 = x1;           % final x
n = n;             % number of subintervals
h = (x1-x)/n;      % step size
index = 0;         % initialize index
k1=0;
k2=0;
k=0;
for i=1:n;         % begin loop
k1=f(x,y);         % first slope
k2=f(x+h,y+h*k1);  % second slope
k=(k1+k2)/2;       % average slope
x=x+h;             % new x
y=y+h*k;           % new y
X=[X;x];           % update x-column       
Y=[Y;y];           % update y-column
index = [index;i]; % update index-column
K1=[K1;k1];   Line 22
K2=[K2;k2];
K= [K;k];
end                % end loop
ImprovedEulerTable=table(index,X,K1,K2,K,Y)
end

통화 코드:

[index,X,K1,K2,K,Y] = impeulerT(0,1,1,10);

통나무:

>> [index,X,K1,K2,K,Y] = impeulerT(0,1,1,10);
Undefined function or variable 'K1'.

Error in impeulerT (line 22)
K1=[K1;k1];

22  K1=[K1;k1];
>> 

답변1

이 코드가 더 좋습니다. 출력의 첫 번째 줄은 손으로 수행한 작업과 더 잘 일치하도록 변경될 수 있습니다. 기본적으로 이것이 의미하는 바는 K1, K2 및 K 열이 한 행 위로 이동할 수 있다는 것입니다. 다른 열은 그대로 둘 수 있습니다. 그러나 이는 Edwards 및 Penney와 일치합니다. 여기서 K1, K2 및 K가 어떻게 정의되는지 확인하세요. 건배! MM

기능 코드:

function [index,X,Y,K1,K2,K] = impeulerT(x,y,x1,n)
% modified version of Improved Euler method found in
% Elementary Differential Equations by Edwards and Penney 
X=x;               % initial x
Y=y;               % initial y
x1 = x1;           % final x
n = n;             % number of subintervals
h = (x1-x)/n;      % step size
index = 0;         % initialize index
% Initialize the lower-case variables
k1=0;
k2=0;
k=0;
% Initialize the upper-case variables
K1=k1;
K2=k2;
K =k;
for i=1:n;         % begin loop
k1=f(x,y);         % first slope
k2=f(x+h,y+h*k1);  % second slope
k=(k1+k2)/2;       % average slope
x=x+h;             % new x
y=y+h*k;           % new y
X=[X;x];           % update x-column       
Y=[Y;y];           % update y-column
index = [index;i]; % update index-column
K1=[K1;k1];        % update K1 column
K2=[K2;k2];        % update K2 column
K= [K;k];          % update K column
end                % end loop
ImprovedEulerTable=table(index,X,Y,K1,K2,K)
end

통화 코드:

% Improved Euler
[index,X,Y,K1,K2,K] = impeulerTX(0,1,1,10);

답변2

K1=[K1;k1];오류는 22행 의 대괄호 안에 K1이 있지만 이전에 정의되지 않았다는 사실에 있습니다 .

해결책은 K1=[]; for 루프 전에 정의하는 것입니다.

편집: 다른 모든 변수에도 동일하게 적용됩니다. 그래서 이 코드는 작동합니다

function [index,X,K1,K2,K,Y] = impeulerT(x,y,x1,n)
% modified version of Improved Euler method found in
% Elementary Differential Equations by Edwards and Penney 
X=x;               % initial x
Y=y;               % initial y
x1 = x1;           % final x
n = n;             % number of subintervals
h = (x1-x)/n;      % step size
index = 0;         % initialize index
k1=0;
k2=0;
k=0;
% Initialize the upper-case variables
K1=[];
K2=[];
K=[];
for i=1:n;         % begin loop
  k1=f(x,y);         % first slope
  k2=f(x+h,y+h*k1);  % second slope
  k=(k1+k2)/2;       % average slope
  x=x+h;             % new x
  y=y+h*k;           % new y
  X=[X;x];           % update x-column       
  Y=[Y;y];           % update y-column
  index = [index;i]; % update index-column
  K1=[K1;k1];  % Line 22
  K2=[K2;k2];
  K= [K;k];
end                % end loop
ImprovedEulerTable=table(index,X,K1,K2,K,Y)
end

관련 정보