Simulink中的MATLAB函数无法访问变量'Q'错误:“未定义的函数或变量'Q'。”

时间:2017-12-09 20:38:31

标签: matlab simulink

我在Simulink中有一个MATLAB功能块(在下面的视觉中名为Q_learning)。代码需要更新现有的矩阵(用'Q'表示),该矩阵最初在脚本(initialpara.m文件)中声明为7乘10 ^ 7的零矩阵。

但它似乎无法访问矩阵的初始声明。错误消息如下:

  

未定义的函数或变量'Q'。第一次转让给当地人   变量决定了它的类。

     

功能'控制中心/ MATLAB功能'(#174.774.775),第32行,   第21栏:“Q”启动诊断报告。

initialpara.m文件

%%% Q Learning Parameters %%%

Q = zeros(7,100*100*1000);

gamma = 0.8;

previous_state = 0;
previous_reward = 0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Q_learning.m文件

function [KP, KI, KD, state, reward] = Qlearning(e_now, previous_state, previous_reward)
%#codegen
    if (e_now >= -1 && e_now <= 1)
        state = 1;
        reward = 7;

    elseif (e_now >= -5 && e_now <= 5)
        state = 2;
        reward = 6;

    elseif (e_now >= -10 && e_now <= 10)
        state = 3;
        reward = 5;

    elseif (e_now >= -15 && e_now <= 15)
        state = 4;
        reward = 4;

    elseif (e_now >= -20 && e_now <= 20)
        state = 5;
        reward = 3;

    elseif (e_now >= -25 && e_now <= 25)
        state = 6;
        reward = 2;

    elseif (e_now >= -30 && e_now <= 30)
        state = 7;
        reward = 1;
    end#

    subMatrix = Q(state, :);
    [maxQ_value, max_column] = max(subMatrix);

    Q(state, previous_state) = previous_reward + 0.9 * maxQ_value;

    [KP, KI, KD] = action_decode(max_column);
end

我试图在模型工作区中声明变量'Q'(虽然它已在基础工作区中声明),但它没有解决问题。

任何人都可以帮我解决这个问题吗?谢谢!

enter image description here

2 个答案:

答案 0 :(得分:0)

宣布Q全球。请参阅MATLAB中的help global

答案 1 :(得分:0)

在这种情况下,您需要“声明”Q。可以通过“编辑数据”选项然后添加“数据”来完成。遵循配置选项。 另一种方法是在Simulink中定义信号并将其作为Matlab函数的参数提供。 顺便说一句,将读取信号保持在左侧,输出信号保持在右侧是一个好习惯。这样可以大大提高可读性。