声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2020|回复: 10

[编程技巧] 急!复杂函数调用是怎么传递参数

[复制链接]
发表于 2006-10-18 15:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
[x,endPop,bPop,traceInfo] = galssvm(bounds,evalFN)调用子函数evalFN,需要在调用galssvm时,把参数(sol,model,Xtra, Ytra, Xval, Yval,estfct, trainfct, simfct)传递给evalFN,请问怎么传递啊!
谢谢了!
回复
分享到:

使用道具 举报

发表于 2006-10-18 16:20 | 显示全部楼层
原帖由 realhappy 于 2006-10-18 15:27 发表
= galssvm(bounds,evalFN)调用子函数evalFN,需要在调用galssvm时,把参数(sol,model,Xtra, Ytra, Xval, Yval,estfct, trainfct, simfct)传递给evalFN,请问怎么传递啊!
谢谢了!



[x,endPop,bPop,traceInfo] = galssvm(bounds,evalFN,sol,model,Xtra, Ytra, Xval, Yval,estfct, trainfct, simfct) 行不行啊?
 楼主| 发表于 2006-10-18 20:11 | 显示全部楼层
不行啊,参数(sol,model,Xtra, Ytra, Xval, Yval,estfct, trainfct, simfct)只是ecalOps而已,因为galssvm调用了很多函数,如下:
function [x,endPop,bPop,traceInfo] = galssvm(bounds,evalFN,evalOps,startPop,opts,...
termFN,termOps,selectFN,selectOps,xOverFNs,xOverOps,mutFNs,mutOps)
 楼主| 发表于 2006-10-18 20:15 | 显示全部楼层
原帖由 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),不知道这么多参数,怎么作为一个结果体传进去。
发表于 2006-10-18 20:35 | 显示全部楼层
原帖由 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;
 楼主| 发表于 2006-10-18 21:32 | 显示全部楼层
原帖由 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为一个结构体),能够在构建成一个更复杂的结果体传到子程序。
 楼主| 发表于 2006-10-18 21:33 | 显示全部楼层
很怀量labview中的族,多复杂的数据类型都能构建成更复杂的族,呵呵!
发表于 2006-10-18 22:26 | 显示全部楼层
原帖由 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;
发表于 2006-10-18 22:35 | 显示全部楼层
原帖由 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 [x,endPop,bPop,traceInfo] = 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 编辑 ]
 楼主| 发表于 2006-10-18 22:42 | 显示全部楼层
好像我试过,是不行的,办公室要锁门了,明天再试,非常非常感谢eight!!
发表于 2007-3-21 20:07 | 显示全部楼层

问题解决了么?我也遇到这样的问题了

能告诉我吗?
谢谢了!
我也很困惑!
我的邮箱2006shaqiang@163.com
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-12 13:18 , Processed in 0.063266 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表