Hi Gerald,
I understand that your code is using “vpasolver”, which can be slow, especially for larger problems. Hence, I'd recommend switching to “fsolve” instead, as it offers several advantages. Unlike “vpasolve”, which relies on symbolic computation, “fsolve” is designed for numerical solutions, using iterative methods to find the roots of nonlinear equations. This approach typically results in faster execution, especially for large or complex systems, due to its reliance on numerical approximations rather than symbolic expressions.
Here’s how you can modify your code:
tic
%Set Area of Cable Components
Aa=0.6247;
As=0.1017;
Ac=0.726346;
w(1)=1.093;
RTSDrake=31500;
%Set Thermal Expansion Coeff of Cable Components, Tref
AlphaAL=12.8E-6;
AlphaST=6.4E-6;
AlphaCOMP=10.455446E-6;
Tref=70;
%Set Initial Tension Hinitial of Cables, Span Length, Slack, Fit Variable
Hinitial=1000;
Span=1000;
Slack=0.01;
Init_Fit=-0.00461765;
ii=1;
jj=1;
kk=1;
t=0;
while kk<20
while Slack/Span*100<=0.5
A(ii,jj)=Slack/Span*100;
B(ii,jj)=w(kk);
% replace the 'vpasolver' with 'fsolve'
eqn = @(H) 2 * (H / w(kk)) * sinh(Span * w(kk) / (2 * H)) - Span - Slack;
options = optimoptions('fsolve', 'Display', 'off');
Ten = fsolve(eqn, Hinitial, options);
C(ii,jj)=double(Ten/Ac);
HTension(ii,jj)=C(ii,jj)*Ac;
Slack=Slack+0.1;
ii=ii+1;
t=t+1;
end
Slack=0.01;
w(kk+1)=w(kk)+0.15;
ii=1;
jj=jj+1;
kk=kk+1;
end
toc
After making this change, I saw the execution time drop significantly from 79.2 seconds to just 2.35 seconds on my machine. Keep in mind that the results might differ slightly due to the numerical approximations used by “fsolve”.
For more details on “fsolve”, you can refer to the following MathWorks documentation link:
Hope it helps.