加快MatlabFunction或使用替代品

15的观点(30天)
芬恩布希
芬恩布希 2020年4月17日
回答: 史蒂文的主 2022年11月28日
你好,
我正在处理一个大方程(事实上36 -向量与每个)~ 15.000字符,使用MatlabFunction试图让一个函数。我们的目标是得到一个函数可以尽快评估,因为它是一个系统的一部分的ODE求解器来解决。本身只包含多项式方程3和根的程度(^ 3/2。)但没有罪,因为等。。调用MatlabFunction花了超过18个小时,现在我不得不改变方程,我真的不想等待完整的18个小时。设置优化假为宜,或者这将会使我的评估时间变得更糟吗?有其他选项MatlabFunction旁边吗?我不太熟悉这种东西我从来没有花这么长时间处理计算。
非常感谢您的帮助!
23日评论
弗朗茨Enkelmann
弗朗茨Enkelmann 2022年11月28日
你只是找到了一个解决办法吗?

登录置评。

答案(1)

史蒂文的主
史蒂文的主 2022年11月28日
你有试过告诉 matlabFunction 跳过试图优化代码吗?
cd (tempdir)
信谊a b c d阳性
信谊x
s =解决(* x ^ 3 + b * x ^ 2 + c * x + d = = 0, x, MaxDegree = 3);
年代是一个相当复杂的表达式,但最终答案可以简化通过使用临时的子表达式。但这种简化会导致长文件(虽然简单表达式和短行)和长时间创建文件。
抽搐
matlabFunction(年代,文件=“cubicSolver1.m”,优化= true);
toc
运行时间是0.477392秒。
dbtypecubicSolver1.m
1函数s = cubicSolver1 (a, b, c, d) 2% cubicSolver1 3% s = cubicSolver1 (a, b, c, d) 4 5%这个函数生成的符号数学工具箱9.2版。11月28 - 6%——2022 14:57:43 7 8 t2 = b。^ 2;9 t3 = b。^ 3;10 t4 = 1.0. /;11 t7 = sqrt (3.0);12 t5 = t4。^ 2;13个t6 = t4。^ 3;14 t8 = (b * t4)。/ 3.0;15 t9 = (c * t4)。/ 3.0;16 t10 = (d * t4)。/ 2.0; 17 t11 = -t8; 18 t12 = -t10; 19 t13 = (b.*c.*t5)./6.0; 20 t15 = (t2.*t5)./9.0; 21 t16 = (t3.*t6)./2.7e+1; 22 t14 = -t13; 23 t17 = -t15; 24 t18 = -t16; 25 t19 = t9+t17; 26 t21 = t10+t14+t16; 27 t20 = t19.^3; 28 t22 = t21.^2; 29 t23 = t20+t22; 30 t24 = sqrt(t23); 31 t25 = t12+t13+t18+t24; 32 t26 = t25.^(1.0./3.0); 33 t27 = 1.0./t26; 34 t28 = t26./2.0; 35 t29 = -t28; 36 t30 = t19.*t27; 37 t31 = t30./2.0; 38 t32 = t26+t30; 39 t33 = t7.*t32.*5.0e-1i; 40 s = [t11+t26-t30;t11+t29+t31-t33;t11+t29+t31+t33];
抽搐
matlabFunction(年代,文件=“cubicSolver2.m”,优化= false);
toc
运行时间是0.121004秒。
dbtypecubicSolver2.m
1函数s = cubicSolver2 (a, b, c, d) 2% cubicSolver2 3% s = cubicSolver2 (a, b, c, d) 4 5%这个函数生成的符号数学工具箱9.2版。11月28 - 6%——2022 14:57:43 7 8 et1 = (c / 3.0 (. *) - (1.0. / ^ 2。* b。^ 2) / 9.0)。* 1.0. / ((d。* (1.0. / 2.0)) / a - (1.0. / ^ 3。* b。^ 3)。/ 2.7 e + 1 +√((d / 2.0 (. *) + (1.0. / ^ 3。* b。^ 3)。/ 2.7 e + 1 - (1.0. / ^ 2。* b。* c) / 6.0)。^ 2 + (c / 3.0 (. *) - (1.0. / ^ 2。* b。^ 2) / 9.0)。^ 3) + (1.0. / ^ 2。* b。* c) / 6.0)。^ (1.0. / 3.0);9 et2 = ((d。* (1.0. / 2.0)) / a - (1.0. / ^ 3。* b。^ 3)。/ 2.7 e + 1 +√((d / 2.0 (. *) + (1.0. / ^ 3。* b。^ 3)。/ 2.7 e + 1 - (1.0. / ^ 2。* b。* c) / 6.0)。^ 2 + (c / 3.0 (. *) - (1.0. / ^ 2。* b。^ 2) / 9.0)。^ 3) + (1.0. / ^ 2。* b。* c) / 6.0)。^ (1.0. / 3.0);10 et3 = ((c / 3.0 (. *) - (1.0. / ^ 2。* b。^ 2) / 9.0)。* 1.0. / ((d。* (1.0. / 2.0)) / a - (1.0. / ^ 3。* b。^ 3)。/ 2.7 e + 1 +√((d / 2.0 (. *) + (1.0. / ^ 3。* b。^ 3)。/ 2.7 e + 1 - (1.0. / ^ 2。* b。* c) / 6.0)。^ 2 + (c / 3.0 (. *) - (1.0. / ^ 2。* b。^ 2) / 9.0)。^ 3) + (1.0. / ^ 2。* b。* c) / 6.0)。^ (1.0. / 3.0))。/ 2.0 +√(3.0) * (et1 + et2)。* 5.0 e-1i-b. / 3.0 (. *);11 et4 = ((d。* (1.0. / 2.0)) / a - (1.0. / ^ 3。* b。^ 3)。/ 2.7 e + 1 +√((d / 2.0 (. *) + (1.0. / ^ 3。* b。^ 3)。/ 2.7 e + 1 - (1.0. / ^ 2。* b。* c) / 6.0)。^ 2 + (c / 3.0 (. *) - (1.0. / ^ 2。* b。^ 2) / 9.0)。^ 3) + (1.0. / ^ 2。* b。* c) / 6.0)。^ (1.0. / 3.0)。* (1.0. / 2.0);12 et5 = (c / 3.0 (. *), (1.0. / ^ 2。* b。^ 2) / 9.0)。* 1.0. / ((d。* (1.0. / 2.0)) / a - (1.0. / ^ 3。* b。^ 3)。/ 2.7 e + 1 +√((d / 2.0 (. *) + (1.0. / ^ 3。* b。^ 3)。/ 2.7 e + 1 - (1.0. / ^ 2。* b。* c) / 6.0)。^ 2 + (c / 3.0 (. *) - (1.0. / ^ 2。* b。^ 2) / 9.0)。^ 3) + (1.0. / ^ 2。* b。* c) / 6.0)。^ (1.0. / 3.0);13 et6 = ((d。* (1.0. / 2.0)) / a - (1.0. / ^ 3。* b。^ 3)。/ 2.7 e + 1 +√((d / 2.0 (. *) + (1.0. / ^ 3。* b。^ 3)。/ 2.7 e + 1 - (1.0. / ^ 2。* b。* c) / 6.0)。^ 2 + (c / 3.0 (. *) - (1.0. / ^ 2。* b。^ 2) / 9.0)。^ 3) + (1.0. / ^ 2。* b。* c) / 6.0)。^ (1.0. / 3.0);14 et7 = ((c / 3.0 (. *) - (1.0. / ^ 2。* b。^ 2) / 9.0)。* 1.0. / ((d。* (1.0. / 2.0)) / a - (1.0. / ^ 3。* b。^ 3)。/ 2.7 e + 1 +√((d / 2.0 (. *) + (1.0. / ^ 3。* b。^ 3)。/ 2.7 e + 1 - (1.0. / ^ 2。* b。* c) / 6.0)。^ 2 + (c / 3.0 (. *) - (1.0. / ^ 2。* b。^ 2) / 9.0)。^ 3) + (1.0. / ^ 2。* b。* c) / 6.0)。^ (1.0. / 3.0))。/ 2.0 -√(3.0) * (et5 + et6)。* 5.0 e-1i-b. / 3.0 (. *);15 et8 = ((d。* (1.0. / 2.0)) / a - (1.0. / ^ 3。* b。^ 3)。/ 2.7 e + 1 +√((d / 2.0 (. *) + (1.0. / ^ 3。* b。^ 3)。/ 2.7 e + 1 - (1.0. / ^ 2。* b。* c) / 6.0)。^ 2 + (c / 3.0 (. *) - (1.0. / ^ 2。* b。^ 2) / 9.0)。^ 3) + (1.0. / ^ 2。* b。* c) / 6.0)。^ (1.0. / 3.0)。* (1.0. / 2.0);16 et9 = - (c / 3.0 (. *) - (1.0. / ^ 2。* b。^ 2) / 9.0)。* 1.0. / ((d。* (1.0. / 2.0)) / a - (1.0. / ^ 3。* b。^ 3)。/ 2.7 e + 1 +√((d / 2.0 (. *) + (1.0. / ^ 3。* b。^ 3)。/ 2.7 e + 1 - (1.0. / ^ 2。* b。* c) / 6.0)。^ 2 + (c / 3.0 (. *) - (1.0. / ^ 2。* b。^ 2) / 9.0)。^ 3) + (1.0. / ^ 2。* b。* c) / 6.0)。^ (1.0. / 3.0) b / (a。* 3.0); 17 et10 = ((d.*(-1.0./2.0))./a-(1.0./a.^3.*b.^3)./2.7e+1+sqrt((d./(a.*2.0)+(1.0./a.^3.*b.^3)./2.7e+1-(1.0./a.^2.*b.*c)./6.0).^2+(c./(a.*3.0)-(1.0./a.^2.*b.^2)./9.0).^3)+(1.0./a.^2.*b.*c)./6.0).^(1.0./3.0); 18 s = [et9+et10;et7+et8;et3+et4];

类别

找到更多的在应用程序帮助中心文件交换

社区寻宝

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

开始狩猎!