我怎样才能有效地进行曲线拟合大量时间没有常数的for循环?

23日视图(30天)
我目前使用函数“适合”,它输出的指数曲线拟合函数方程
年代(TE) = * exp (TE / T2)
代码除了很实用,它是极其缓慢的。我需要做这个矩阵约[30]240240年,基本上它经过曲线拟合函数240 * 240次。这显然不是理想的,但我不知道如何输入矩阵。任何帮助将不胜感激!附件是我的代码:
j = 1:240
k = 1:240
如果IM (j, k, 1) > 0
2 = 1:长度(TE)
(2)= IM (j, k, ii);
结束
s = s / max(年代);
fo_ = fitoptions (“方法”,“NonlinearLeastSquares”,“低”(1 0 0),“上”[正10 1],“MaxFunEvals”1 e10,“麦克斯特”1 e10);
ft_ = fittype (“* exp (x / T2) + c”,
“依赖”,{“y”},“独立”,{“x”},
“系数”,{《终结者2》,“一个”,“c”});
[cf_] =适合(TE“s”, ft_ fo_);
T2 = cf_.T2;
地图(j, k) = T2;
结束
结束

答案(4)

图像分析
图像分析 2014年6月11日
使用“运行时间”看到所用的时间。for循环不吃了。我可以在我的电脑做1亿次迭代在0.2秒内。5.7万(240 * 240)迭代只花了我电脑上118微秒。我相信时间是被其他操作。
2的评论
劳拉
劳拉 2014年6月12日
编辑:劳拉 2014年6月12日
你的主要问题不是for循环,但需要为每个像素做单独的曲线拟合。花费所有的时间。我将拿出fo_和ft_但不会改变。地图已经预先分配。

登录置评。


莎拉
莎拉 2014年6月11日
首先你可以试着这样做外循环:
[j, k] =找到(IM (:,: 1) > 0);
然后更换循环:
m = 1:元素个数(j)
和使用j (m)和k (m)内循环。所以,如果我有很多零,这将节省你的时间。然后替换:
2 = 1:长度(TE)
(2)= IM (j, k, ii);
结束
:
s = IM (j (m), k (m), 1:元素个数(TE));
使用抽搐toc,看看你得到任何速度提高。更多的帮助,后输入您的代码我们可以试一试。


Szu-Yu李
Szu-Yu李 2021年4月8日
嗨,我猜你正在努力适应大量的独立方程?“适合”MATLAB函数不支持多个独立的曲线拟合。万博1manbetx我已经创建了一个函数,它接受一个二维矩阵,其中每一行是一个曲线拟合多项式表达式。这个函数不使用for循环,因此可以在很短的时间内大量的行。
//www.tianjin-qmedu.com/matlabcentral/fileexchange/90017-matrix-row-wise-polynomial-fit

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!