z1=[0.54;1.09];z2=[0;0.90];
z3=[0.54;1.09];
dz=0.01;
num_z3=fix(diff(z3)/dz+1);num_z2=fix(diff(z2)/dz+1);
num_z1=fix(diff(z1)/dz+1);
mm_total=num_z2*(num_z1*2+1-num_z3)*num_z3/2;
yy=zeros(mm_total,5);
load data.txt -ASCII
mm=1;
for zz3=z3(1,1):dz:z3(2,1)
for zz1=zz3:dz:z1(2,1)
for zz2=z2(1,1):dz:z2(2,1)
idata=1:length(data(:,1));
yy(mm,1)=sum((data(idata,4)-data(idata,1).*zz1-data(idata,2).*zz2+data(idata,3).*zz3).^2);
%%原方程形如y=z1*a1+z2*a2+z3*a3,其中z1z2z3为要拟合的有限定范围的量
yy(mm,2)=mm;
yy(mm,3)=zz1; %%用于后期调用最小值的相应ZZ1
yy(mm,4)=zz2;
yy(mm,5)=zz3;
mm=mm+1;
end
end
end
Y=yy(:,1)a=find(Y==min(Y))
mmmin=yy(a,2)
你中间那个循环着实看不懂你要表达的数学意思是什么,主要是中间三个循环影响了你的速度。都是可以去掉的。
或许你可以把你一开始的数学模型和目的说出来,是优化函数,还是拟合参数等等,辅之以一定的数据,别人才能更好给你解答。
你的matlab 代码里面全是 C、C++、VB等语言的影子