Trial and error problem
Mostrar comentarios más antiguos
Dear Matlab Community Members
As shown in the flowchart, My objective is to find the values b and c for the given value a, Both the values b and c lies in the range 0.000001 to 2 (Approximately), I wrote a simple code in matlab to search for the values (i.e. a = 0.000001:0.000000:2 and b = 0.000001:0.000000:2), that means for each value of a it will search for the value of b, when condition 1 is less the toleratnce, it will check conditon 2, if it also less than the toleracnce, it will break the loop and return the values. But my problem here is
- It is taking too much time (Approximately, for each value of a, it is taking almost 30 Minutes) I have nearly about 1000 values of a.
- I want to know, is there any better way or techniques to find the values (b and c).
Thanks you very much
* |Simplified version of flowchart|*

*
Original flowchart*
Code is really big, it involves multiple functions, This is the real flowchart of the code (This is softened membrane model, reinforced concrete)

This code will not run, since it has supported funciton files.
eps_2 = -[linspace(0.01, 0.1, 20), linspace(0.1, 5, 30)]*10^-3;
eps_1_initial = [linspace(0.01,1, 200), linspace(1, 100, 200)]*10^-3;
Gamma_12_initial = [linspace(0.01,1, 200), linspace(1, 100, 200)]*10^-3;
Tol = 1e-3;
%%SMM (Softened Membrane Model) Model
for i = 1:length(eps_2)
eps_2_trail = eps_2(i);
eps_1 = eps_1_initial;
Gamma_12 = Gamma_12_initial;
TotalError = [];
for m = 1:6
for j = 1:length(Gamma_12)
Gamma_12_trail = Gamma_12(j);
for k = 1:length(eps_1)
eps_1_trail = eps_1(k);
eps_l = eps_1_trail*(cosd(Alpha_1))^2 + eps_2_trail*(sind(Alpha_1))^2 - Gamma_12_trail*cosd(Alpha_1)*sind(Alpha_1);
eps_t = eps_1_trail*(sind(Alpha_1))^2 + eps_2_trail*(cosd(Alpha_1))^2 + Gamma_12_trail*cosd(Alpha_1)*sind(Alpha_1);
[v12, v21] = HsuZhuRatios(eps_l, eps_t, eps_yl, eps_yt);
eps_1_bar = eps_1_trail/(1 - v12*v21) + v12*eps_2_trail/(1 - v12*v21);
eps_2_bar = v21*eps_1_trail/(1 - v12*v21) + eps_2_trail/(1 - v12*v21);
eps_l_bar = eps_1_bar*(cosd(Alpha_1))^2 + eps_2_bar*(sind(Alpha_1))^2 - Gamma_12_trail*cosd(Alpha_1)*sind(Alpha_1);
eps_t_bar = eps_1_bar*(sind(Alpha_1))^2 + eps_2_bar*(cosd(Alpha_1))^2 + Gamma_12_trail*cosd(Alpha_1)*sind(Alpha_1);
Beta = 0.5*atand(Gamma_12_trail/(eps_1_trail - eps_2_trail));
Sigma_2c = ConcreteComp(fcDash, eps_c0, eps_2_bar, eps_1_bar, Beta);
Sigma_1c = ConcreteTension(fcDash, eps_c0, eps_cr, Ec, eps_2_bar, eps_1_bar);
Tau_12c = ConcreteShear(Sigma_1c, Sigma_2c, eps_1_trail, eps_2_trail, Gamma_12_trail);
% Longitudinal Steel:
fl = Steel(fcDash, rho_l, fyl, Esl, eps_l_bar);
ft = Steel(fcDash, rho_t, fyt, Est, eps_t_bar);
[SumError, DiffError] = Check( rho_l, rho_t, fl, ft, Sigma_l, Sigma_t, Sigma_1c, Sigma_2c, Tau_12c, Alpha_1 );
TotalError(j, k) = SumError^2 + DiffError^2;
Tau_lt_trial(j, k) = (Sigma_1c - Sigma_2c)*sind(Alpha_1)*cosd(Alpha_1) + Tau_12c*((cosd(Alpha_1))^2 - (sind(Alpha_1))^2);
Gamma_lt_trial(j, k) = 2*((eps_1_trail - eps_2_trail)*sind(Alpha_1)*cosd(Alpha_1) + 0.5*Gamma_12_trail*((cosd(Alpha_1))^2 - (sind(Alpha_1))^2));
end
end
[a, b] = find(TotalError == min(min(TotalError)));
Gamma_12_iterative = Gamma_12(a(1));
eps_1_iterative = eps_1(b(1));
if (min(min(TotalError)) >= Tol) && (m ~= 6)
eps_1 = [linspace(eps_1_iterative/10, eps_1_iterative, 100), linspace(eps_1_iterative, eps_1_iterative*10, 100)];
Gamma_12 = [linspace(Gamma_12_iterative/10, Gamma_12_iterative, 100), linspace(Gamma_12_iterative, Gamma_12_iterative*10, 100)];
TotalError = [];
Tau_lt_trial = [];
Gamma_lt_trial = [];
else
break;
end
end
Tau_lt(i) = Tau_lt_trial(a(1), b(1));
Gamma_lt(i) = Gamma_lt_trial(a(1), b(1));
eps_1_final = eps_1(b(1));
Gamma_12_final = Gamma_12(a(1));
fprintf('%d Out of %d Values of eps_2 completed \n', i, length(eps_2))
Values = table(eps_2_trail, eps_1_final, Gamma_12_final, Tau_lt(i), Gamma_lt(i), TotalError(a(1), b(1)))
end
%%Plotting
plot(Gamma_lt, smooth(Tau_lt))
4 comentarios
Geoff Hayes
el 11 de Abr. de 2018
Vijay - can you post your code so that we can get an idea of what you have attempted?
Torsten
el 11 de Abr. de 2018
How do b and c depend on a, i.e. what are the conditions to decide whether b and c are the correct values for the given a ?
Learner
el 11 de Abr. de 2018
Sunil Raiyani
el 14 de Jul. de 2022
Have you got the solution for the same. Actually I am also stuck with the same problem.
Respuestas (1)
Torsten
el 12 de Abr. de 2018
0 votos
Condition 1 and Condition 2 hide two equations that must be fulfilled to accept eps1 and gamma1 as solutions. So you have two equations in two unknowns that can be solved using MATLAB's "fsolve".
Best wishes
Torsten.
1 comentario
Categorías
Más información sobre Numerical Integration and Differentiation en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!