Как вывести таблицу в Matlab, изменив оператор функции?

#matlab #output

#matlab #вывод

Вопрос:

Моя техника создания вектора из переменных «столбца» в таблице работает только часть времени. Чем K1 отличается от index в следующем коде? Я отлаживаю числовой метод, и мне нужны столбцы index, X, K1, K2, K, Y. Все работает нормально, пока я не добавлю K1, K2 и K? Как это сделать?

ММ

Что необходимо, так это правильно инициализировать K1, k1, K2, k2, K и 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; K1=k1;       % initialize k1
k2=0; K2=k2;       % initialize k2
k=0; K=k;          % initialize 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,K1,K2,K,Y)
clear
end
  

КОД ВЫЗОВА:

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

ЖУРНАЛ:

 Output argument "index" (and maybe others) not
assigned during call to "impeulerT".
  

Комментарии:

1. Пожалуйста, не редактируйте ответ в своем вопросе, это делает ответ недействительным.

Ответ №1:

Вы очищаете свои переменные, прежде чем сможете их вернуть. Ошибка, которую вы получаете, может быть объяснена здесь.

Чтобы исправить свой код, просто удалите или прокомментируйте инструкцию clear после создания таблицы:

 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; K1=k1;       % initialize k1
    k2=0; K2=k2;       % initialize k2
    k=0; K=k;          % initialize k
    for i=1:n;         % begin loop
        k1=(x/y);         % first slope
        k2=(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,K1,K2,K,Y);
end
  

В общем, вам не нужно беспокоиться об очистке ваших переменных внутри вызываемой функции, поскольку эти переменные остаются только в рабочей области этой функции. Единственными переменными, которые изменяются, являются те, которые возвращаются. Прочитайте больше здесь о том, как функции работают с рабочими пространствами.

Комментарии:

1. Спасибо. Очистка была удалена, но я вижу, что она каким-то образом была возвращена в код. ММ

2. Возможно, вы захотите оставить инструкцию clear в исходном вопросе для контекста для всех, у кого может возникнуть эта проблема в будущем.