Eliminating nested loops without repeating input combinations for equation output

조회 수: 3 (최근 30일)
Hi,
I have been given an equation with several variables. For each variable I have created a normal distribution using normn. I would like to get all the solutions to the equation using every single possible combination of values without them repeating themselves. Since I want to use distribution fitter and fit a norma distribution to the data, having inputs repeat themselves would not be good. Currently I am using nested for loops but this is very inefficient especially as I start adding variables. does anybody know of a way in which I can speed up my code?
When n gets to be higher than 10 it becomes unbearably slow. I would like n to be at least 500.
t_mean = 9.74; %mm
D_mean = 324; %mm
dm_mean = 3.896; %mm
sig_u_mean = 542; %MPa
l_mean = 528; %mm
%range of values and number of random inputs
n = 100;
t = 0.01*randn(1, n) + t_mean;
D = 0.25*randn(1, n) + D_mean;
sig_u = 0.25*randn(1, n) + sig_u_mean;
dm = 0.001*randn(1, 100) + dm_mean;
l = 0.25*randn(1, 100) + l_mean;
%initialize the Pb matrix
K = zeros(1,1000);
m = 1;
tic
%loop over all possible input combinations
for i = 1 : length(t)
for j = 1 : length(D)
for k = 1 : length(sig_u)
for n = 1 : length(dm)
for o = 1 : length(l)
M = sqrt(1 + 0.31*(l_mean/sqrt(D(j)*t(i)))^2);
K(m) = ((2*t(i))/(D(j)-t(i)))*sig_u(k)*abs((1-(dm_mean/t(i)))/(1-(dm_mean/(t(i)*M))));
m = m+1;
end
end
end
end
end
toc
distributionFitter(K)

답변 (1개)

Swetha Polemoni
Swetha Polemoni 2020년 9월 2일
Hi,
Eliminating nested for loops is possible using ndgrid() function. Look into the following code snippet for better understanding.
clear all
x=1:10;
y=10:20;
[A,B]=ndgrid(x,y);
for i= 1:10
for j=1:10
out1(i,j)=x(i)+y(j);
end
end
out2=A+B;
Here out1 and out2 gives same output. Atleast 2 nested loops can be eliminated using this function.

카테고리

Help CenterFile Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by