我写了一个程序,它有两个功能。第一个输出是一个矩阵,如:
Z = [1 2 3]
第二个函数应该使用前一个函数的输出。但它无法读取矩阵Z
。
你能帮忙吗?
我的第一个功能是这样的:
function ff = firststep(z)
sigme1=z(5)* exp(-z(1)*10^12*(t-z(2)*10^-6).^2).*cos(2*pi*z(3)*10^6*(t-z(2)*10^-6)+z(4));
ff =sum((y-sigme).^2)/NN;
end
它用于优化工具箱,在优化后,输出是我在工作区中的矩阵z
。
我的第二个功能是这样的:
function ff = secstep(zz)
sigme1=zz(1)* exp(-z(1)*10^12*(t-zz(2)*10^-6).^2).*cos(2*pi*z(3)*10^6*(t-zz(2)*10^-6)+z(4));
end
我也一直试图优化这个功能,但这次matlab无法调用(我在第一篇文章中读到的意思)矩阵z。 错误是这样的:
Undefined function 'z' for input arguments of type 'double'.
答案 0 :(得分:0)
检查完代码后,我应该说,您需要将变量传递给您的函数,或者使变量全局。看看以下链接:
How declare a global variable in MATLAB
示例:
function tic
% TIC Start a stopwatch timer.
% TIC; any stuff; TOC
% prints the time required.
% See also: TOC, CLOCK.
global TICTOC
TICTOC = clock;
function t = toc
% TOC Read the stopwatch timer.
% TOC prints the elapsed time since TIC was used.
% t = TOC; saves elapsed time in t, does not print.
% See also: TIC, ETIME.
global TICTOC
if nargout < 1
elapsed_time = etime(clock, TICTOC)
else
t = etime(clock, TICTOC);
end
我建议您在每个函数和主文件中将z声明为全局变量:
global z
答案 1 :(得分:0)
我使用的优化算法是GA(遗传算法)。我写了这个函数是为了得到我想要的东西:
function [zz,fvalzz] = secstep(z,NVARS)
[zz,fvalzz]=ga(@secfun,NVARS);
function ff = secfun(zz)
y=.5*exp(-35*10^12*(t-2e-6).^2).*cos(2*pi*5e6*(t-2e-6)+0);
sigme2=zz(1)* exp(-z(1)*10^12*(t-zz(2)*10^-6).^2).*cos(2*pi*z(3)*10^6*(t-zz(2)*10^-6)+z(4)); %z vector has been calculated from another function.
NN=length(y);
ff =sum((y-sigme2).^2)/NN;
end
end