Matlab 解方程慢

Matlab 解方程慢,matlab,for-loop,foreach,equation-solving,Matlab,For Loop,Foreach,Equation Solving,我有一个方程(五阶多项式),每次我都要为不同的变量A,B和Coeff解方程。系数相当大(100000),除了使用for循环,我没有其他方法,但是速度非常慢。谁能给我一个建议,让它更快,或者如果有另一种方法来解决方程更快 这是我的代码: tCounter = zeros(length(A),1); NaNIndices = find(isnan(IntersectionPointsLayer(:,1))==1); tCounter(NaNIndices) = NaN; NotNaNIndice

我有一个方程(五阶多项式),每次我都要为不同的变量A,B和Coeff解方程。系数相当大(100000),除了使用for循环,我没有其他方法,但是速度非常慢。谁能给我一个建议,让它更快,或者如果有另一种方法来解决方程更快

这是我的代码:

tCounter = zeros(length(A),1); 

NaNIndices = find(isnan(IntersectionPointsLayer(:,1))==1);
tCounter(NaNIndices) = NaN;
NotNaNIndices = find(isnan(IntersectionPointsLayer(:,1))==0);

for i = NotNaNIndices 
syms t
Equation = -(Coeff(21).*((B(i,2) + t*A(i,2)).^5) + (Coeff(20).*((B(i,2) + t*A(i,2)).^4)).*(B(i,1) + t*A(i,1)) + Coeff(19).*((B(i,2) + t*A(i,2)).^4) + (Coeff(18).*((B(i,2) + t*A(i,2)).^3)).*((B(i,1) + t*A(i,1)).^2) + (Coeff(17).*((B(i,2) + t*A(i,2)).^3)).*(B(i,1) + t*A(i,1)) + Coeff(16).*((B(i,2) + t*A(i,2)).^3) + (Coeff(15).*((B(i,2) + t*A(i,2)).^2)).*((B(i,1) + t*A(i,1)).^3) + (Coeff(14).*((B(i,2) + t*A(i,2)).^2)).*((B(i,1) + t*A(i,1)).^2) + (Coeff(13).*((B(i,2) + t*A(i,2)).^2)).*(B(i,1) + t*A(i,1)) + Coeff(12).*((B(i,2) + t*A(i,2)).^2) + (Coeff(11).*((B(i,2) + t*A(i,2)))).*((B(i,1) + t*A(i,1)).^4) + (Coeff(10).*(B(i,2) + t*A(i,2))).*((B(i,1) + t*A(i,1)).^3) + (Coeff(9).*(B(i,2) + t*A(i,2))).*((B(i,1) + t*A(i,1)).^2) + (Coeff(8).*(B(i,2) + t*A(i,2))).*((B(i,1) + t*A(i,1))) + (Coeff(7).*(B(i,2) + t*A(i,2))) + Coeff(6).*((B(i,1) + t*A(i,1)).^5) + Coeff(5).*((B(i,1) + t*A(i,1)).^4) + Coeff(4).*((B(i,1) + t*A(i,1)).^3) + Coeff(3).*((B(i,1) + t*A(i,1)).^2) + Coeff(2).*(B(i,1) + t*A(i,1)) + Coeff(1)) + Thickness - (B(i,3) + t*A(i,3));
t = solve(Equation,t);
t = double (t);
t(imag(t) ~= 0) = [];
t(t<0) = [];
t = min(t);
tCounter(i) = t;
end
t计数器=零(长度(A),1);
nanindex=find(isnan(IntersectionPointsLayer(:,1))=1);
t计数器(nanindex)=NaN;
notnanindex=find(isnan(IntersectionPointsLayer(:,1))=0;
对于i=notnan指数
符号t
(B(B(B(B(B(i,i,2)++t(t)A(i,i,2)(B(B(B(i,i,i,2)及(B(B(B(i,i,2)++t(A(i,i,2)++t(A(i,i,i,1)及(21)(第21)(21)(21)及(21)款)。*(((B(B(B(i,i,i,i,i,2)2)++t(A(i,i,2)A(i,2)A(i,2)(i,2)(i,2)(1)及2)两)两)及t(i,2)A(i,2)(1)(1)(1,2,2)及(i,2)(1)及(i,2)(1)(1)(1)(1)(1)(1,2)及1)及1)(1)(1)(1)(1,1)(1,1)(1,1,1,1(B(i,2)+t*A(i,2))。^3)+(Coeff(15)。*((B(i,2)+t*A(i,2))(B(i,B(i,i,2)(B(i,i,2)(B(i,1,1)(i,1)(1)(B(i,1,1)及t*A(i,1,2)(2)(2)(2)(B(i,1,1)(i,1)(i,1)(B(i,i,1,1)(i,1,1)(B(i,1,1,1)(i,1)(i,1)(i,1)(i,1)(i,1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1))+4)+(系数(10)。*(B(i,2)+t*A(i,2))。*(B(i,1)+t*A(i,1))。^3)+(系数(9)。*(B(i,2)+t*A(i,1,2)(i,2)(i,2)(i,2)(i,2)(i,2)(i,2)(i,2)(B(i,i,2)(i,2)(i,2)(i,2)(i,1)(B(i,i,1)(i,1)(i,1)(i,1)(B(i,1,1)(i,1,1)(i,1)(i,1)(i,1)(i,1)(i,1)(i,1)(1)(i,1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)((B(i,1)+t*A(i,1))+系数(1))+厚度-(B(i,3)+t*A(i,3));
t=求解(方程,t);
t=双(t);
t(imag(t)~=0)=[];
我找到了答案。
我必须在循环外求解方程,然后使用循环得到每个实例。

它仍然很慢,但不像以前那样

符号数学很慢,我建议改用根函数(不管怎样,您正在将结果转换为双精度)


要使用它,你需要计算多项式关于变量t的系数(这需要对你的公式进行一些重新排列),但这会快得多。

这正是我所做的。我接受了它,因为它是正确的答案,即使在你发布它之前我使用过它