테이블의 "열" 변수에서 벡터를 만드는 나의 기술은 일부 시간에만 작동합니다. 다음 코드의 인덱스와 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