(matlab) почему так долго считает???
епт.. уже долго считает...
зы еще считает..
инициализация закончена! еще 10000 итераций!
Только сегодня решил, понимаешь, начать писать как следует на матлабе, так нет...
Вот этот вот кусок кода
nn=1;
for j=1:Nt+1
for n=1:Ny+1
for k=1:Nx+1
Ebin(k,n,j)=complex(re(nnim(nn;
nn=nn+1;
end
end
end
считается порядка 10 минут (Nx,Ny,Nt ~ 100)
Я в шоке. Может, конечно, надо поиграться с порядком следования циклов, но 10 минут - это слишком.
>> v=[0:0.01:5];
>> tic;sin(v);toc
Elapsed time is 0.000098 seconds.
>> tic;for I=1:501 sin(v(I; end;toc
Elapsed time is 0.001379 seconds.
>>
Это в матлабе нормальная практика, что циклы так долго обрабатываются?
![](/images/graemlins/smile.gif)
Всю идею своей тормознутостью убивает =)
![](/images/graemlins/smile.gif)
ушел читать
Если нет, то матлаб в каждой итерации цикла будет "дописывать" новые элементы массива, увеличивая его. Это занимает много времени.
Пробовал и заранее заводить массив и не заранее. Выигрыш мало заметен.
Пробовал менять порядок следования циклов и много что еще. Матлаб - тормоз в плане циклов - это мое нынешнее убеждение =)
nn=1;Если im и re векторы, а не функции, попробуй,
for j=1:Nt+1
for n=1:Ny+1
for k=1:Nx+1
Ebin(k,n,j)=complex(re(nnim(nn;
nn=nn+1;
end
end
end
Ebin = reshape(complex(re, im Nx+1, Ny+1, Nt+1)
n=100;
Timing[
Array[a,{n,n,n}];
For[i=1,i<n,i++,
For[j=1,j<n,j++,
For[k=1,k<n,k++,
a[i,j,k]=Complex[i+j,k];
];
];
];
]
{10.594 Second,Null}
2 : а математика умеет isosurface строить? =)
Ebin(k,n,j)=complex(re(nnim(nn;
a[i,j,k]=Complex[i+j,k];
{10.594 Second,Null}Два обращения к массивам на сто тысяч элементов не считаются?
Оставить комментарий
vladan67
function s486u(101,401)=0;
a(100)=0;
b(100)=0;
for I=1:101
u(I,1)=cos(2*pi*(I-1)/20);
end
for j=1:101
u(1,j+1)=2*u(2,j)-u(1,j);
u(2,j+1)=u(3,j)-2*u(2,j)+u(1,j)+u(2,j)+u(2,j);
alfa=0.38196601125011;
beta=u(1,j+1)-alfa*u(2,j+2);
a(1)=alfa;
b(1)=beta;
for I=1:100
a(I+1)=1/(3-a(I;
b(I+1)=(b(I)+u(I,j/(3-a(I;
end
u(101,j+1)=2*u(100,j)-u(101,j);
for I=100:-1:1
u(I,j+1)=a(I+1)*u(I+1,j+1)+b(I+1) ;
end
end
x = 0:100;
t = 0:100;
plot3(x,t,u(x,t;
end
вот эту прогу...