作业帮 > 综合 > 作业

谁能帮我简化这个matlab程序,这五个嵌套太浪费时间了!O(∩_∩)O谢谢

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/07/17 13:57:02
谁能帮我简化这个matlab程序,这五个嵌套太浪费时间了!O(∩_∩)O谢谢
前面是A和B两个向量,没有列出来!程序如下:
max=0;
s=0;
for i=1:440;
for j=1:440;
for k=1:440;
for l=1:440;
for m=1:440;
if A(i)+A(j)+A(k)+A(l)+A(m)
程序的目的是计算A中任意五个元素之和是否大于20,如大于啊,则将对应位置的B中五个元素求和,并取和之最大值,是吧?
再问: 对的!
再答: 可以有物理意义啥的来做一些预先的判断么?你这个计算规模确实有点大
再问: 这个应该没再有限制条件了,郁闷啊
再答: 用nchoosek命令可以知道有从410个元素中任意选取不同的五个有 9.4212e+010中不同组合,何况你还没限制这五个必须不同。这计算量,杠杠的。。。 或者A的数值是否有一定特性?比如大于某些平均值啥的?如果这都提供不了的话,貌似只能傻算了。。。
再问: A的值范围是1到50里面都有,平均值大概为11.79
再答: 如果A都是正的,先过滤一下,超过20的元素一概舍弃,看看还能剩多少,然后在这个基础上再循环
再问: 嗯,这个我试过了!都是正的,小于20还剩346,还是很大,悲剧
再答: 那A和B之间有没有相关性?
再问: 没有相关性,同样的A值对应的B值可能相差就很大
再答: 那就每层过滤,每加一个元素都过滤一下,这样循环层数不少,但是会减少每层的计算量 max=0;S=0; for ii=1:440 if A(ii)