Как добавить ценность в матрицу

#list #matlab #matrix

Вопрос:

Я хочу добавить ценности матрице. Но, я не мог этого сделать. Я сделал пошаговую функцию для обучения подкреплению и рассчитал значение, которое названо R. Я хочу собрать R значений и добавить их в матрицу с именем RR. Однако все вычисленные значения не добавляются. Это потому, что это делается внутри функции? Если он не находится в функции, он работает. Пожалуйста, кто-нибудь, скажите мне, как это исправить.

 % Define the step function
function [NextObservation, Reward, IsDone, LoggedSignals] = 
    myStepfunction(Action,LoggedSignals,SimplePendulum)

    % get the pre statement
    statePre = [-pi/2;0];
    statePre(1) = SimplePendulum.Theta;
    statePre(2) = SimplePendulum.AngularVelocity;
    
    IsDone = false;
   
    % updating states 
    SimplePendulum.pstep(Action);
    
    % get the statement after updating
    state = [-pi/2;0];                                  
    state(1) = SimplePendulum.Theta;               
    state(2) = SimplePendulum.AngularVelocity;      
 
    RR = []; 
    Ball_Target = 10;
    Ball_Distance = Ballfunction(SimplePendulum);
    R =  -abs(Ball_Distance -Ball_Target);  ← this the calculated value
    RR = [RR,R];     ← I want to add R to RR
    
    if (state(2) > 0) ||  (SimplePendulum.Y_Position < 0) 
        IsDone = true;
        [InitialObservation, LoggedSignal] = myResetFunction(SimplePendulum);
        LoggedSignal.State = [-pi/2 ; 0];
        InitialObservation = LoggedSignal.State;
        state = InitialObservation; 
        SimplePendulum.Theta =-pi/2;
        SimplePendulum.AngularVelocity = 0;
    end

    LoggedSignals.State = state;                  
    NextObservation = LoggedSignals.State;
    Reward =   max(R);

end
 

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

1. Для RR обновления за пределами функции вам нужно перейти RR в функцию и снова выйти.

2. Вы правильно добавляете R RR , но когда вы это делаете RR = [] , вы устанавливаете RR пустую матрицу.

Ответ №1:

Если я правильно вас понял, вы пытаетесь обновить RR эту функцию, а затем используете/видите ее вне цикла. Это означает, что вам нужно внести две правки:

а) Вам нужно входить RR и выходить из функции, чтобы обновить ее. Вам нужно будет изменить первую строку кода, как показано здесь, но вам также нужно будет изменить способ вызова функции:

 function [NextObservation, Reward, IsDone, LoggedSignals, RR] = 
    myStepfunction(Action,LoggedSignals,SimplePendulum, RR)
 

б) Когда вы делаете это RR = [] , вы удаляете содержимое RR . Для инициализации RR вам нужно будет переместить эту строку в скрипт, вызывающий эту функцию, убедившись, что она вызвана до того, как эта функция будет вызвана.

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

1. В этом случае я должен установить начальное значение RR в коде обучения. Является ли это начальное значение пустым списком? ??

2. Да, это верно. Я отредактирую свой ответ.