clear all;
clc;
C=0;T=1;m=1;P=1;
figure;
for tau=-3:0.01:3;
fun=@(t) ((gaussian(t,tau,T,P,m,C)+gaussian(t,0,T,P,m,C)).*(gaussian(t,tau,T,P,m,-C)+gaussian(t,0,T,P,m,-C))).^2;
acf=integral(fun,-10,10);
plot(tau,acf);grid on;
hold on;
end
以上是一个计算脉冲自相关的函数编程,但是计算效率比较低,想要请问一下是不是可以将for循环替换掉,毕竟matlab里面最高效的是利用数组和矩阵,感激不尽!
matlab中替代for循环
答案:2 悬赏:80 手机版
解决时间 2021-02-13 00:55
- 提问者网友:富士山上尢
- 2021-02-12 13:33
最佳答案
- 五星知识达人网友:拜訪者
- 2021-02-12 14:16
1. 把画图的语句懂for循环里去掉,改成记录每次循环的结果,最后一起画。因为画图语句是无论如何不可能加速的
2. 因为你要算积分,而且被积函数中只有一个参数tau是需要变化的,建议你另写一下函数:
fun0 = @(tau, t)(...); %写在for外面
fun = @(t)(fun(tau, t)); % 这个写在for里面
这样也许快一点
3. 在前两步的基础上进一步去掉for。请参看integral函数的帮助文档(用doc integral),里面提到了同时积多个函数的写法。这一步优化已经可能需要改变gaussian函数的写法了,我没法再说详细。如果你愿意继续优化,可以联系我。
2. 因为你要算积分,而且被积函数中只有一个参数tau是需要变化的,建议你另写一下函数:
fun0 = @(tau, t)(...); %写在for外面
fun = @(t)(fun(tau, t)); % 这个写在for里面
这样也许快一点
3. 在前两步的基础上进一步去掉for。请参看integral函数的帮助文档(用doc integral),里面提到了同时积多个函数的写法。这一步优化已经可能需要改变gaussian函数的写法了,我没法再说详细。如果你愿意继续优化,可以联系我。
全部回答
- 1楼网友:神也偏爱
- 2021-02-12 15:07
程序实现的功能:
矩阵a如下
121314
151617
181920
212223
将矩阵a的每一行相加求和,得到一个列向量经过转置成行向量
clear;clc
s=0;%赋给s初值0
a=[12,13,14;15,16,17;18,19,20;21,22,23];%4×3矩阵a
fork=a%k取a的每一列(不是每一个值或每一行),进行循环
s=s+k%每一列对应的元素相加,迭代求和
end
disp(s')%转置,将列向量转化为行向量
运行结果如下:
s=
12
15
18
21
s=
25
31
37
43
s=
39
48
57
66
39485766
你看一下结果就知道了。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯