liqing0717 发表于 2010-1-10 23:55

提问:我的matlab程序求卷积运行得不出结果

论文中需要用一点matlab,很浅的,就是用matlab来求卷积,我没有用matlab7.0自带的conv卷积函数,因为我的论文中的卷积公式简化了一些,可是卷入20个左右耗时为1分钟,到32个的话我大概估计了一下可能要2^12分钟,所以我最多能得到卷入26个单元时的结果(1小时左右),再多就吃不消了,可是总归还是需要算出32个单元卷入的结果的,我查了相关帮助,也特意将matlab6.5换成7.0,为了用其自带的阶跃函数(解析式里需要用的),都是为了减少运行时间,可是还是没有什么效果。我到底哪里出错了?请各位大虾指点指点,谢谢,程序如下:

主程序:
x=5000;
n=32;
L=zeros(1,32);
for i=1:n
    L(i)=FT(i,x);
end
L(n)
子函数:
function f=FT(i,x)
q=;
p=;
C=;

if i==1;
    f=q(i)*heaviside(x)+p(i)*heaviside(x-C(i));
elseif i>=2 & i<=32
    f=q(i)*FT(i-1,x)+p(i)*FT(i-1,x-C(i));
end

其中n是控制有多少个单元卷入的变量,第i次卷积都需要将前面第i-1次卷积重新算一遍,可是也不用这么多时间吧,费解。。。

friendchj 发表于 2010-1-11 08:32

因该是子函数反复调用自己占的时间太多了。

maigicku 发表于 2010-1-11 17:01

求卷积用conv函数,矩阵卷积用convmtx

liqing0717 发表于 2010-1-11 19:25

回复 沙发 friendchj 的帖子

恩,我估计也是这个原因,可是不知道怎么回避这个问题。我有想过用自带的函数conv来求卷积,但是原理上也是反复调用conv这个子函数不是么?
如:之前我是用matlab6.5,没有阶跃函数,所以自己编了一个阶跃函数,后来怕这个会占用太多时间,改为7.0版本,自带有heaviside这个阶跃函数,但是问题还是存在。
而且conv是求离散的卷积函数吧,我这里是连续的,后面还要涉及到画图的问题,那得多少个点啊,一个点都求这么久。

liqing0717 发表于 2010-1-11 23:17

我今天调了一晚上,还是不行,尝试了使用conv函数,发现conv函数只能做离散卷积。可是我的函数都是连续的,不能直接用conv吧?还是很迷惑中。各位如果有熟悉这方面的还请帮帮忙~
这段代码不是效率问题,如果只是慢一点也就罢了,可是根本就算不出32的结果来,挂了2,3个小时都没结果。。。

ChaChing 发表于 2010-1-12 00:08

个人水平有限, 不清楚LZ所谓"函数都是连续的"!?
页: [1]
查看完整版本: 提问:我的matlab程序求卷积运行得不出结果