Performing a Loop Until my Criteria is met

Hello,
I need your help to insert a loop that will repeat my "New Design" part until both "Delta_new" and "Freq_new" are both eqaul "0.1" and "80" respecvly, this what I got so far:
syms x1 x2 x3 x4
A = ((x1*x4) + (x2*x4) - (x1*x3));
I = ((x1*(x4)^3 + x2*(x4)^3 - x1*(x3)^3)/(12));
L = 40;
P_load = 10;
rho = 0.29;
E = 30*10^6;
w = P_load + rho*A;
W = rho*L*A;
delta = (w*(L^4))/(8*E*I);
sigma_m = (w*(L^2)*x4)/(4*I);
freq = (3.52/(2*pi))*(sqrt((E*I*386.4)/(rho*A*L^4)));
f = W-10; %Random, not used
g2 = (delta)-.1;
g3 = (freq)-80;
g = [g2;g3];
grad_f = gradient(f,[x1 x2 x3 x4]);
grad_g = [gradient(g2,[x1 x2 x3 x4]) gradient(g3,[x1 x2 x3 x4])];
g_x0 = vpa(subs(g,[x1 x2 x3 x4],[0.2 0.2 2.8 3.6]),4);
grad_g_x0 = vpa(subs(grad_g,[x1 x2 x3 x4],[0.2 0.2 2.8 3.6]),4);
Q = vpa((grad_g_x0*((grad_g_x0'*grad_g_x0)^-1)),4);
s2 = vpa(-Q*g_x0,4);
x_new = vpa([0.2+s2(1); 0.2+s2(2); 2.8+s2(3); 3.6+s2(4)],4);
%New Design
A_new = vpa(x_new(1)*x_new(4) + x_new(2)*x_new(4)- x_new(1)*x_new(3),3);
I_new = vpa(x_new(1)*(x_new(4))^3 + x_new(2)*(x_new(4))^3 - x_new(1)*(x_new(3))^3 /12,3);
w_new = vpa(P_load + rho*A_new,3);
W_new = vpa(rho*L*A_new,3);
delta_new = vpa((w_new *(L^4))/(8*E*I_new ),3)
freq_new = vpa((3.52/(pi*2))*(sqrt((E*I_new*386.4)/(rho*A_new*L^4))),3)

 Accepted Answer

N/A
N/A on 24 Mar 2021
The solution doesn't need more iterations!
One have to make sure that sym results are replaced by using "Double" instead of "VPA"
Aiman

More Answers (0)

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Products

Release

R2020b

Asked:

N/A
on 23 Mar 2021

Answered:

N/A
on 24 Mar 2021

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!