读取函数的输出作为另一个函数的输入

时间:2014-01-02 13:01:05

标签: matlab

我写了一个程序,它有两个功能。第一个输出是一个矩阵,如: 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'.

2 个答案:

答案 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