急!复杂函数调用是怎么传递参数
= galssvm(bounds,evalFN)调用子函数evalFN,需要在调用galssvm时,把参数(sol,model,Xtra, Ytra, Xval, Yval,estfct, trainfct, simfct)传递给evalFN,请问怎么传递啊!谢谢了! 原帖由 realhappy 于 2006-10-18 15:27 发表
= galssvm(bounds,evalFN)调用子函数evalFN,需要在调用galssvm时,把参数(sol,model,Xtra, Ytra, Xval, Yval,estfct, trainfct, simfct)传递给evalFN,请问怎么传递啊!
谢谢了!
= galssvm(bounds,evalFN,sol,model,Xtra, Ytra, Xval, Yval,estfct, trainfct, simfct) 行不行啊? 不行啊,参数(sol,model,Xtra, Ytra, Xval, Yval,estfct, trainfct, simfct)只是ecalOps而已,因为galssvm调用了很多函数,如下:
function = galssvm(bounds,evalFN,evalOps,startPop,opts,...
termFN,termOps,selectFN,selectOps,xOverFNs,xOverOps,mutFNs,mutOps) 原帖由 realhappy 于 2006-10-18 20:11 发表
不行啊,参数(sol,model,Xtra, Ytra, Xval, Yval,estfct, trainfct, simfct)只是ecalOps而已,因为galssvm调用了很多函数,如下:
function= galssvm(bounds,evalFN,evalOps,startPop,opts,...
termFN,termOp ...
函数功能是用遗传算法来优化支持向量机参数,sol是某代的染色体,ecalFN是适应度函数,evalOps是适应度函数里面需要调用的参数,包括参数(sol,model,Xtra, Ytra, Xval, Yval,estfct, trainfct, simfct),不知道这么多参数,怎么作为一个结果体传进去。 原帖由 realhappy 于 2006-10-18 20:15 发表
函数功能是用遗传算法来优化支持向量机参数,sol是某代的染色体,ecalFN是适应度函数,evalOps是适应度函数里面需要调用的参数,包括参数(sol,model,Xtra, Ytra, Xval, Yval,estfct, trainfct, simfct),不知道 ...
刚自己写了一个小程序,看看能否对你有所启发:
function y = myComplexFunc%主函数
f = @(a,b,c) (a+b+c);
a = 1;
b = 2;
c = 3;
x = -2;
y = myTimes(x,f,{a,b,c});
function y = myTimes(x,f,varargins)
a = varargins{1};
b = varargins{2};
c = varargins{3};
z = f(a,b,c);
y = x*z; 原帖由 eight 于 2006-10-18 20:35 发表
刚自己写了一个小程序,看看能否对你有所启发:
function y = myComplexFunc%主函数
f = @(a,b,c) (a+b+c);
a = 1;
b = 2;
c = 3;
x = -2;
y = myTimes(x,f,{a,b,c});
function y = myTimes ...
首先非常eight的热心帮忙,这程序有几点不懂:
第一:f = @(a,b,c) (a+b+c);是预先定义子函数吗?
第二:function y = myTimes(x,f,varargins)中的varargins是不是指后面所有的参数,因为在我那个程序里后面还有其他参数。varargins是指输入参数的个数吗?
其实我最想知道的是,不同的数据类型,(比如(sol,model,Xtra, Ytra, Xval, Yval)中,sol为二维数组,model为一个结构体),能够在构建成一个更复杂的结果体传到子程序。 很怀量labview中的族,多复杂的数据类型都能构建成更复杂的族,呵呵! 原帖由 realhappy 于 2006-10-18 21:32 发表
首先非常eight的热心帮忙,这程序有几点不懂:
第一:f = @(a,b,c) (a+b+c);是预先定义子函数吗?
第二:function y = myTimes(x,f,varargins)中的varargins是不是指后面所有的参数,因为在我那个程序里后面还 ...
1. f = @(a,b,c)(a+b+c) 是定义一个函数,a,b,c是参数,函数体是a+b+c,返回的是函数的句柄
2.可以这样:
function y = myComplexFunc
f = @(a,b,c) (a+b+c);
a = 1;
b = 2;
c = 3;
x1 = -2;
g = @(m,n)(m*n);
m = -1;
n = 4;
x2 = 3;
y = myTimes(x1,x2,f,{a,b,c},g,{m,n});
function y = myTimes(u,v,f,varargins1,g,varargins2)
x1 = varargins1{1};
y1 = varargins1{2};
z1 = varargins1{3};
t1 = f(x1,y1,z1);
y = u*t1;
x2 = varargins2{1};
y2 = varargins2{2};
t2 = g(x2,y2);
y2 = v*t2;
y = y - y2; 原帖由 realhappy 于 2006-10-18 21:32 发表
首先非常eight的热心帮忙,这程序有几点不懂:
第一:f = @(a,b,c) (a+b+c);是预先定义子函数吗?
第二:function y = myTimes(x,f,varargins)中的varargins是不是指后面所有的参数,因为在我那个程序里后面还 ...
在你的例子中,我想应该这样:
假设evalFN是函数名,startPop,opts,termFN,termOps,selectFN,selectOps,xOverFNs,xOverOps,mutFNs,mutOps是它的形式参数,evalOps也是函数名,sol,model,Xtra, Ytra, Xval, Yval,estfct, trainfct, simfct是它的形式参数,则在galssvm中这样写:
function = galssvm(bounds,evalFN,varargins1,evalOps,varargins2)
startPop = varargins1{1};
opts = varargins1{2};
....
evalFN(startPop,opts,...);
sol= varargins2{1};
model= varargins2{2};
....
evalOps(sol,model,...);
调用的时候,用galssvm(bounds,evalFN,{startPop,opts,...},evalOps,{sol,model,...}),至于参数的类型,应该没有限制。我暂时只想到这样的笨方法,不知道是否有更好的处理方法,呵呵,希望能帮到你吧。
[ 本帖最后由 eight 于 2006-10-18 22:36 编辑 ] 好像我试过,是不行的,办公室要锁门了,明天再试,非常非常感谢eight!!
问题解决了么?我也遇到这样的问题了
能告诉我吗?谢谢了!
我也很困惑!
我的邮箱2006shaqiang@163.com
页:
[1]