| 查看: 1031 | 回复: 5 | |||
| 当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖 | |||
爱红茶的猫木虫 (小有名气)
|
[求助]
MATLAB编程优化问题已有2人参与
|
||
|
求助一个matlab编程的优化问题,类似霍夫变换(Hough Transform)的累加问题。 一维向量a里面为矩阵A的行下标信息,一维向量b里面是A的列下标信息。 使用for循环的赋值程序如下: for i = 1 :m for j = 1 : n count = A(a(i), b(j)) + 1; A(a(i), b(j)) = count; end end 问题是matlab的for循环效率低下,如果m和n的值非常大的话(>10000),计算时间很长。 在此求助matlab高手,能否使用矩阵实现的方法代替for循环来提高编程效率? 期待确实有帮助的应助回帖 ![]() |
» 猜你喜欢
氨基封端PDMS和HDI反应快速固化
已经有11人回复
博士申请都是内定的吗?
已经有11人回复
博士读完未来一定会好吗
已经有38人回复
谈谈两天一夜的“延安行”
已经有3人回复
之前让一硕士生水了7个发明专利,现在这7个获批发明专利的维护费可从哪儿支出哈?
已经有11人回复
论文投稿求助
已经有4人回复
Applied Surface Science 这个期刊。有哪位虫友投过的能把word模板发给我参考一下嘛
已经有3人回复
投稿精细化工
已经有6人回复
» 本主题相关价值贴推荐,对您同样有帮助:
求matlab编程代码,求帮助,谢谢!
已经有11人回复
关于有约束非线性函数的优化问题
已经有8人回复
有偿求助会用matlab对粒子群算法编程的同学
已经有5人回复
【课件】最优化方法及其Matlab程序设计
已经有390人回复
LARS算法问题求助
已经有6人回复
matlab编程约束条件问题
已经有10人回复
我用matlab编写了一个风力机叶片的优化设计程序,有点问题
已经有13人回复
请教下优化类的算法 处理带约束问题
已经有7人回复
matlab程序中调用m文件的问题
已经有13人回复
求助:遗传算法的matlab编程求解资源优化问题
已经有7人回复
求助:资源优化问题的遗传算法matlab编程
已经有5人回复
Matlab最小二乘参数优化
已经有3人回复
matlab编程中遇到的问题
已经有4人回复
求助 matlab交点问题
已经有19人回复
matlab 问题求助,是否计算结果错误,如何改正?
已经有3人回复
求助有关Matlab有约束非线性最优化问题
已经有9人回复
求助使用MATLAB计算绿色叶片的覆盖度的问题
已经有24人回复
求助matlab编程
已经有13人回复
【求助】用matlab最优化方法进行参数拟合
已经有17人回复
yisc1981
铜虫 (初入文坛)
- 应助: 2 (幼儿园)
- 金币: 731.7
- 帖子: 42
- 在线: 16.6小时
- 虫号: 2194115
- 注册: 2012-12-18
- 性别: GG
- 专业: 人工智能与知识工程
【答案】应助回帖
★ ★ ★ ★ ★
感谢参与,应助指数 +1
爱红茶的猫: 金币+5, ★★★很有帮助, 经过验证,A矩阵如果为零矩阵的话没有误差,但是方法2中最后5行的意思不太明白,如果能解释一下的话一定采纳为最佳答案。 2014-11-27 11:01:52
感谢参与,应助指数 +1
爱红茶的猫: 金币+5, ★★★很有帮助, 经过验证,A矩阵如果为零矩阵的话没有误差,但是方法2中最后5行的意思不太明白,如果能解释一下的话一定采纳为最佳答案。 2014-11-27 11:01:52
|
clear all clc A=rand(10); B=A; %留着比较 a=[2 2 6 8 5 5 5 5]; m=length(a) b=[1 1 1 3 3 9 9 9 4 4]; n=length(b); for i =1:m for j = 1 : n count = A(a(i), b(j)) + 1; A(a(i), b(j)) = count; end end % 第二种方法 a=sort(a) b=sort(b) [a,ida]=unique(a) [b,idb]=unique(b) ida=[0,ida] idb=[0,idb] counta=diff(ida) countb=diff(idb) B(a,b)=B(a,b)+counta'*countb %检查两端程序是否相等 D=A-B %经过试验,D的元素有时候有数值误差,但是都在1.0e-14量级,稍微处理就行 |
3楼2014-11-26 09:50:41
feixiaolin
荣誉版主 (文坛精英)
-

专家经验: +518 - 信息EPI: 3
- 应助: 942 (博后)
- 贵宾: 1.275
- 金币: 2930
- 散金: 58785
- 红花: 532
- 沙发: 11
- 帖子: 24215
- 在线: 2601.8小时
- 虫号: 2139575
- 注册: 2012-11-21
- 专业: 光学信息获取与处理
- 管辖: 数学
2楼2014-11-24 14:45:06
爱红茶的猫
木虫 (小有名气)
- 应助: 4 (幼儿园)
- 金币: 5231.6
- 散金: 818
- 红花: 3
- 帖子: 160
- 在线: 66.6小时
- 虫号: 2130898
- 注册: 2012-11-16
- 专业: 信息处理方法与技术
4楼2014-11-26 13:57:16
yisc1981
铜虫 (初入文坛)
- 应助: 2 (幼儿园)
- 金币: 731.7
- 帖子: 42
- 在线: 16.6小时
- 虫号: 2194115
- 注册: 2012-12-18
- 性别: GG
- 专业: 人工智能与知识工程
★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
爱红茶的猫(nono2009代发): 金币+14 2014-11-28 17:03:05
爱红茶的猫(nono2009代发): 金币+14 2014-11-28 17:03:05
|
理解编程思想就不难理解那几句话了,至于那些函数是什么意思可以查询相关的说明,这里将编程思想说说吧。 因为a,b中存储的是A矩阵的行标和列标,如果那个下标出现的次数多,则A中对应元素被加的量就大。所以首先是找出a,b中所含不同的下标到底有多少,只对这些不同下标进行一次寻址。找到A中对应的元素后,加上其因该被访问的次数就行了。从而不必要反复用for循环。 下面几行得到a,b中到底还有多少个不同元素, a=sort(a) %为什么要先排序是为了后面通过diff能求出不同元素的计数,也就是a中不同元素应该被访问的次数。 b=sort(b) [a,ida]=unique(a) %找出不同的元素,经过这一步后a中就只含有不同元素了,不会有重复的。 [b,idb]=unique(b) 下面几行是找出a,b不同元素出现的次数,也就是访问的计数 ida=[0,ida] idb=[0,idb] counta=diff(ida) countb=diff(idb) 为什么能得到计数,是因为ida记录的是a中不同元素在a中最后一次出现的位置。 B(a,b)得到的是A的一个子矩阵(“上面讲了,B=A),也就是这些元素才能被你给的那些两个for循环访问到。 D=counta'*countb 得到一个与B(a,b)同样大小的矩阵,他们的对应元(行被访问次数乘以列被访问次数,就是其交叉点处总的访问次数) D(i,j)就是A(a(i),b(i))应该被最终加上的数字,也就是你那两个for循环中A(a(i),b(i))应该被访问到的次数。 我也觉得很难用语言表达清楚,如果还是不明白你一步步用纸验算,就看出其中的奥秘了。 |
5楼2014-11-28 00:13:53














回复此楼