我有一个MATLAB函数,当我尝试运行它时,它不会将输出变量存储在工作区中。请让我知道正确的解决方案,以便函数中的变量存储在工作区中。
我有一个以下代码,我必须在工作区中存储变量T和Y的值。
function him1
k0 = ones(1,5);
exp=[0.2;0.12;0.24;0.2]; %//experimental data
time=[0;1;2;3]; %//time span
%// initial values of state variables
x01=1;
x02=1;
x03=1;
x04=1;
x0 = [x01,x02,x03,x04];
tspan = [min(time),max(time)];
k_opt = fminsearch(@minimize, k0)
function e = minimize(k0)
[~,y_hat] = ode45(@unit2, tspan, x0,[], k0);
% size(y_hat)
% y_hat = deval(sol, time(end)); % // evaluate solution at given times
e = sum((y_hat(end,:)' - exp).^2) % // compute squarederror '
end
% // plot with optimal parameter
[T,Y] = ode45(@unit2, tspan, [x01,x02,x03,x04], [], k_opt);
figure
subplot(1,2,1)
plot(time(end), exp, '*', 'markersize',15)
hold on
plot(T,Y, 'linewidth', 2)
end
function dx = unit2(t, x, k)
dx = zeros(4,1);
dx(1)=-k(1)*x(1)*7 + k(2)*x(2);
dx(2)=k(1)*x(1)*7 - k(2)*x(2) -k(3)*x(2)*x(2) + k(4)*x(3);
dx(3)=k(3)*x(2)*x(2) - k(4)*x(3)-k(5)*x(4);
dx(4)=k(5)*x(4);
end
答案 0 :(得分:1)
这是函数的特征,只有在声明中定义的变量才会被移交给工作区。 (如果忽略更复杂的概念,如全局变量和assignin
)
如果您的主要目标是完成计算和工作区中的变量,那么我建议将其转换为m脚本而不是函数。
请参阅:http://de.mathworks.com/help/matlab/matlab_prog/scripts-and-functions.html
答案 1 :(得分:0)
您可以尝试将变量标识为global
。