How do I use the random function in Fsolve Matlab?
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Bowen Yang
am 17 Mär. 2022
Kommentiert: Torsten
am 26 Mär. 2022
Hello everyone,
In the following codes, I am trying to determine the variable x that lets beta equal target beta. This does not work for me when I use fsolve. Could anyone please take a look at it and help me with that?
Thank you so much!
% example
clear
clc
% define values
n = 1e4;
target_beta = 2;
x = 2; % predefine x
% parameters
Mean_R = 2000 ; %mean
CoV_R = 0.1;%coefficient of variation
Std_R = Mean_R * CoV_R;
% Monte Carlo Simulation
Ri = Mean_R + Std_R .* norminv(rand(n, 1));
Mean_Q = x * 1100; % Determine which variable, x, will let the beta = target beta
CoV_Q = 0.18;
Std_Q = Mean_Q * CoV_Q;
Qi = Mean_Q + Std_Q .* norminv(rand(n, 1)); % simuate the Q term
g = Ri - Qi; % limit state function g = R - Q
m = find(g < 0); % count the number of failure cases
f = length(m); % find the failure cases number in the g = R-Q vector
pr_failure = f / n; % probability of failure
beta = norminv(1 - pr_failure); %Calculate the reliability index beta
% fsolve
alpha = fsolve(@(x) (beta-target_beta),2)
0 Kommentare
Akzeptierte Antwort
Torsten
am 22 Mär. 2022
This might help to get beta as a function of x:
X = (0*2000/1100:0.1:2000/1100+10).';
n = 1e4;
trials = 1e3;
beta = zeros(numel(X),1);
Pr_failure = zeros(numel(X),1);
for j=1:numel(X)
pr_failure = zeros(trials,1);
x = X(j);
for i = 1:trials
RAND = rand(n,2);
% parameters
Mean_R = 2000 ; %mean
CoV_R = 0.1;%coefficient of variation
Std_R = Mean_R * CoV_R;
% Monte Carlo Simulation
Ri = Mean_R + Std_R .* norminv(RAND(:,1));
Mean_Q = x * 1100; % Determine which variable, x, will let the beta = target beta
CoV_Q = 0.18;
Std_Q = Mean_Q * CoV_Q;
Qi = Mean_Q + Std_Q .* norminv(RAND(:,2)); % simuate the Q term
g = Ri - Qi; % limit state function g = R - Q
m = find(g < 0); % count the number of failure cases
f = length(m); % find the failure cases number in the g = R-Q vector
pr_failure(i) = f / n; % probability of failure
end
pr_failure = mean(pr_failure);
pr_failure = max(eps,pr_failure);
beta(j) = norminv(1 - pr_failure); %Calculate the reliability index beta
Pr_failure(j) = pr_failure;
end
figure(1)
plot(X,beta)
figure(2)
plot(X,Pr_failure)
4 Kommentare
Torsten
am 26 Mär. 2022
Are you sure about
beta(j) = norminv(1 - pr_failure);
?
I only know
pr_failure = normcdf(-beta)
thus
beta(j) = - norminv(pr_failure)
Torsten
am 26 Mär. 2022
I was hoping fsolve could be used if the number of trials was big enough to stabilize the distribution for pr_failure (and thus could return stable values to fsolve), but I was not successful. The precision needed to calculate the derivatives in fsolve is too high.
Weitere Antworten (1)
Priyanka Kondapalli
am 22 Mär. 2022
Bearbeitet: Priyanka Kondapalli
am 24 Mär. 2022
Hi,
I do not see any issue with the code provided by you.However, recheck the equation. Please refer to the link below which provides more details on how to use Fsolve.
0 Kommentare
Siehe auch
Kategorien
Mehr zu Surrogate Optimization finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!