matlab中cellfun和arrayfun相关的几个问题

本文探讨了如何在MATLAB中避免对8x8符号矩阵A进行100次繁琐的for循环积分,通过使用cellfun函数和vectorization技巧,有效地减少了计算时间。重点介绍了如何将被积函数、积分区间转化为cell数组,并利用cellfun的特性进行并行计算,以提升性能。

问题背景,有一个符号矩阵A,大小为8*8,其中每个元素都是sym,需要对其进行定积分,积分次数为100次,也就是需要做100次定积分,每次积分变量不同。

对于这个问题,首先想到的是利用for循环100次做,但是我们直到matlab对于循环并不友好,比较耗时。此外,对于符号积分函数int,一次运算大概需要3-5s(可能我的电脑比较差),100次运算就需要300到500秒,也就是5到10分钟,假如外面还需要循环的话那么需要的时间将翻倍,实在不是个明智的选择,因此考虑如何利用matlab的特点进行矢量化运算,也就是避免for循环。

matlab中有两个函数能够实现对数组中的每个元素进行函数运算,分别是cellfun,和arrayfun;两个函数用法相似。这里先记录一下他们共同的用法格式:
1、利用cellfun函数
A = cellfun(func,C) 将函数 func 应用于元胞数组 C 的每个元胞的内容,每次应用于一个元胞。然后 cellfun 将 func 的输出串联成输出数组 A,因此,对于 C 的第 i 个元素来说,A(i) = func(C{i})。输入参数 func 是一个函数的函数句柄,此函数接受一个输入参数并返回一个标量。func 的输出可以是任何数据类型,只要该类型的对象可以串联即可。数组 A 和元胞数组 C 具有相同的大小。
您不能指定 cellfun 计算 A 的各元素的顺序,也不能指望它们按任何特定的顺序完成计算。
示例
A = cellfun(func,C1,…,Cn) 将 func 应用于 C1,…,Cn 的各元胞的内容,因此 A(i) = func(C1{i},…,Cn{i})。函数 func 必须接受 n 个输入参数并返回一个标量。元胞数组 C1,…,Cn 的大小必须全部相同。
示例
A = cellfun(,Name,Value) 应用 func 并使用一个或多个 Name,Value 对组参数指定其他选项。例如,要以元胞数组形式返回输出值,请指定 ‘UniformOutput’,false。当 func 返回的值不能串联成数组时,可以按元胞数组的形式返回 A。您可以将 Nam

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值