24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1975  |  回复: 6

yhyffrshuh

木虫 (正式写手)

流浪者一枚

[求助] matlab重复调用子程序的问题

问题
如有以下的子程序
[train,val,test]=dividerand(A,0.8,0,0.2);
重复运行上述子程序,
当[mean(train),std(train)]=[mean(test),std(test)]时,终止

程序如下:
A=[1 2 3 4 5 6 7 8 9 10];
[train,val,test]=dividerand(A,0.8,0,0.2);
if [mean(train),std(train)]=[mean(test),std(test)];
    break
elseif [mean(train),std(train)]~=[mean(test),std(test)] ;   
???         这里回到第一行子程序(实际上我的子程序比这个复杂),该怎么写?
end
回复此楼
Allhumanwisdomissummedupintwowords:waitandhope.
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zjliu1265

至尊木虫 (正式写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
yhyffrshuh: 金币+5, ★★★很有帮助 2012-04-30 19:25:07
xiegangmai: 金币+1, 谢谢应助! 2012-04-30 21:13:46
建议用while程序结构写程序:
epsv=1e-12;
A=[1 2 3 4 5 6 7 8 9 10];
while abs(mean(train)-mean(test))>epsv&abs(std(train)-std(test))>epsv;
    [train,val,test]=dividerand(A,0.8,0,0.2);
end
2楼2012-04-30 18:01:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yhyffrshuh

木虫 (正式写手)

流浪者一枚

引用回帖:
2楼: Originally posted by zjliu1265 at 2012-04-30 18:01:59:
建议用while程序结构写程序:
epsv=1e-12;
A=;
while abs(mean(train)-mean(test))>epsv&abs(std(train)-std(test))>epsv;
    =dividerand(A,0.8,0,0.2);
end

按你的程序运行出错
??? Error using ==> minus
Matrix dimensions must agree.

我实际的子程序比较复杂,将子程序先存了一个m文件。
仍以上面简单的问题为例
将子程序存为
function[train val test]=dividerand(A,n,m,p)
[train,val,test]=dividerand(A,0.8,0,0.2);

主程序:A=[1 2 3 4 5 6 7 8 9 10];
[train,val,test]=dividerand(A,0.8,0,0.2);
while [mean(train),std(train)]~=[mean(test),std(test)] ;
[train,val,test]=dividerand(A,0.8,0,0.2);     %重复子程序
end
实际运行是[mean(train),std(train)]~=[ean(test),std(test)]时,并没有重复子程序
Allhumanwisdomissummedupintwowords:waitandhope.
3楼2012-04-30 19:43:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zjliu1265

至尊木虫 (正式写手)

【答案】应助回帖


xiegangmai: 金币+1, 谢谢参与! 2012-04-30 21:14:13
??? Error using ==> minus
Matrix dimensions must agree.

你能把出错的语句显示下么?不然我们也不好判断啊
4楼2012-04-30 19:50:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yhyffrshuh

木虫 (正式写手)

流浪者一枚

引用回帖:
4楼: Originally posted by zjliu1265 at 2012-04-30 19:50:54:
??? Error using ==> minus
Matrix dimensions must agree.

你能把出错的语句显示下么?不然我们也不好判断啊

一、  你2楼给的程序出错提示就是
??? Error using ==> minus
Matrix dimensions must agree.
这个你可以自己将你给的2楼程序放在命令窗口运行试试

二、我的程序运行没有出错
但是运行结果  [mean(train),std(train)]~=[ean(test),std(test)]就终止了(我想要的结果是[mean(train),std(train)]=[ean(test),std(test)]),估计是while中的子程序并没有运行
那又为什么没有运行呢????
Allhumanwisdomissummedupintwowords:waitandhope.
5楼2012-04-30 20:05:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

rocmanz

新虫 (初入文坛)


xiegangmai: 金币+1, 鼓励讨论交流! 2013-07-25 22:03:33
引用回帖:
2楼: Originally posted by zjliu1265 at 2012-04-30 18:01:59
建议用while程序结构写程序:
epsv=1e-12;
A=;
while abs(mean(train)-mean(test))>epsv&abs(std(train)-std(test))>epsv;
    =dividerand(A,0.8,0,0.2);
end

2楼的判断条件如果发生一个<就跳出循环了吧?不能是与,得是或吧。
btw:我的matlab太古老,没有楼主的dividerand程序。不知道是不是判断有问题。
6楼2013-07-25 13:45:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

风随尘动

新虫 (小有名气)

我也遇到相似问题了,楼主怎么解决的呢

发自小木虫Android客户端
7楼2018-11-27 14:38:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 yhyffrshuh 的主题更新
信息提示
请填处理意见