matlab算法求优化

问题描述:

matlab算法求优化
for i=10000:1:99999
for j=10000:1:99999
a=fix(i/10000);
b=mod(fix(i/1000),10);
c=mod(fix(i/100),10);
d=mod(fix(i/10),10);
e=mod(i,10);%a b c d e分别代表i的万千百十个位数字
f=fix(j/10000);
g=mod(fix(j/1000),10);
h=mod(fix(j/100),10);
k=mod(fix(j/10),10);
l=mod(j,10);%f g h k l分别代表j的万千百十个位数字
z=i*j;
m=fix(z/1000000000);
n=mod(fix(z/100000000),10);
o=mod(fix(z/10000000),10);
p=mod(fix(z/1000000),10);
q=mod(fix(z/100000),10);
r=mod(fix(z/10000),10);
s=mod(fix(z/1000),10);
t=mod(fix(z/100),10);
u=mod(fix(z/10),10);
v=mod(z,10);%mnopqrstuv分别表示十位数z各个数位的数字,依次是从十亿位到个位
A=[a b c d e f g h k l];
A1=unique(A);
len1=length(A1(:));
B=[m n o p q r s t u v];
B1=unique(B);
len2=length(B1(:));
if len1==10&&len2==10&&z>1000000000
disp(i);
disp(j);
disp(z);
else
continue
end
end
end
我学matlab没多久 这是我写的程序 题目是一个五位数A乘以一个五位数B得到一个十位数Z,A和B各个数位的数字构成一维矩阵是由0到9共十个数字组成,Z各个数位的数字也是一个从0到9的十个数字的一维矩阵.求出这个等式A*B=Z
程序我是上面那样写的 计算机反应不出来 而且也没报错 我在想是不是要优化下 求大神指导如何优化
1个回答 分类:数学 2014-11-11

问题解答:

我来补答
写matlab程序需要注意,尽量少用for.matlab从名字也可以看出是为矩阵运算设计的,所以你要多利用矩阵运算来处理问题.
先给你如果我做此题,会写什么程序.以下是我的程序.
set={0:9};
t=nchoosek([0:9],5);
tr=cell2mat(cellfun(@perms,cellfun(@setdiff,set(ones(size(t,1),1),1),num2cell(t,2),'uniformoutput',0),'uniformoutput',0));
trr=cell2mat(cellfun(@perms,num2cell(t,2),'uniformoutput',0));
A=trr*10.^[4:-1:0]';
C=tr*10.^[4:-1:0]';
s=A.*C;
result=str2num(sort(num2str(s),2,'descend'))==9876543210;
op='*=';
disp([num2str(A(result)),op(ones(sum(result),1),1),num2str(C(result)),op(ones(sum(result),1),2),num2str(s(result))]);
运行结果如下.
41730*85962=3587194260
35190*67482=2374691580
23058*46179=1064795382
27903*46815=1306278945
96027*84135=8079231645
83940*62751=5267318940
63780*42591=2716453980
42591*63780=2716453980
62751*83940=5267318940
84135*96027=8079231645
46815*27903=1306278945
46179*23058=1064795382
67482*35190=2374691580
85962*41730=3587194260
然后,我试图优化你的程序,可惜,你那样的强力计算会使我程序内存溢出,具体地说,我试图用矩阵来加速你的程序,但无奈,我的计算计算机内存2G存不了90000*90000个数字的矩阵.所以只可以用for,但那样遇到和你一样的问题,速度狂慢.所以,你从了吧.
 
 
展开全文阅读
剩余:2000
下一页:绘图