连接多个功能输出

3个观点(过去30天)
托尔
托尔 2014年4月20日
评论道: 托尔2014年4月23日
我有几个函数,每个函数返回3个输出值,在一个使用I作为计数器的for循环中。是否有一个很好的方法来赋值,在我目前使用的意义上:
i = 1: n
[TestValues(我,1),assymp(1),名字{1}]= ftesttype1(我(:,我),p,签署);
[TestValues(2),我assymp(2),名字{2}]= ftesttype2(我(:,我),p,签署);
...
结束
正如你所看到的,我已经为它们的位置手工标记了1和2。是否有一种方法可以使输出自动移动到正确的位置?——Ie。ftesttype1返回它的值后,ftesttype2将把他们放在正确的地方,而不需要我指定点2是用于向量TestValues, assymp和名称。
问题是我大概有50个这样的函数,有多少变化是经常的。所以我不得不手动重新键入大约150个数字(并检查我这样做是否正确)。
非常感谢!
4评论
托尔
托尔 2014年4月21日
我的意思是,在第一个函数放置了它的输出之后,我需要第二个函数正确地放置它自己的输出。
总的来说,我有大约50个函数调用,每个返回3个输出变量。这一切都发生在循环中。我需要的基本上是一种重新编码这种方式,我避免手动重新键入测试编号(1,…,50)为每个调用的函数。
我必须这样做的部分原因是为了更快地工作,但也因为我可能需要发布一些代码,因此我试图使它“漂亮”和灵活。
谢谢你的兴趣!

登录发表评论。

接受的答案

肖恩·德Wolski
肖恩·德Wolski 2014年4月21日
编辑:肖恩·德Wolski 2014年4月21日
如果您有一个包含函数句柄的单元格数组,您可能会使用 cellfun 为你做这项工作:
很简单的例子:
清晰的C%对于动态预分配很重要
乐趣= {@sin, @cos};%函数处理
瓦尔斯兰德(50)* 2 * =π;%要循环的示例值
2 =元素个数(val): 1:1
为每个值构建匿名函数,并计算该值处的所有函数,并将结果存储在C的第iith行中
C(二世:)= cellfun (@ (x) x (vals (ii)),乐趣,“UniformOutput”、假);
结束
注1 这也为您带来了不必输入每个函数名的好处。你也许可以用 dir 刮一个“函数使用”目录,然后 str2func 自动构建单元格数组。
注2 你不需要使用cellfun,但可以使用循环代替。这里的关键是包含函数的单元格数组。
3评论
托尔
托尔 2014年4月23日
非常感谢,它起作用了!:)

登录发表评论。

答案(1)

沃尔特·罗伯森
沃尔特·罗伯森 2014年4月20日
在MATLAB中没有类似于“用上面的例子”的东西。
所有的函数都以相同的方式调用吗?如果是这样,那么你可以使用
K = 1:50%构建函数句柄表
funtab {K} = str2fun (sprintf (“ftesttype % d '、K));
结束
I = 1: n
K = 1:50
TestValues (i (K), assymp (K),名字{K}] = funtab {K}(我(:,我),p,签署);
结束
结束
2的评论
沃尔特·罗伯森
沃尔特·罗伯森 2014年4月21日
使用函数表可以说明多次调用同一个函数:只需使用相同句柄的多个条目。
同样,您可以使用单元格数组来保存所有不同的输入。你可以使用mat2cell()自动完成I(:, I)的部分分解
重新排序调用可能更方便,这样所有具有相同结构的调用都可以一起执行。如果输出顺序对其余代码有影响,那么可以在调用循环之后重新组织输出。
尽可能对调用进行分类和参数化。例如,你可以有一个看起来像这样的表
output_numbercall_variety function_index parameter1_index
其中call_variety是一个索引,它告诉您它是哪个类型的调用,从需要传递哪些变量的意义上讲。
例如,我编写了表驱动反编译器,将机器代码字节映射为“指令格式”代码,该代码知道(例如)该指令是一个立即注册指令,具有特定的偏移和位长编码目标寄存器,特定的偏移和位长编码“立即”值;其他编码为寄存器到寄存器或条件码位等的指令格式。表中的“品种”编码了which 种类 的情况,条目应被视为。

登录发表评论。

世界杯预选赛小组名单社区寻宝

在MATLAB中央找到宝藏,并发现社区可以如何帮助你!世界杯预选赛小组名单

开始狩猎!

Baidu
map