Filter löschen
Filter löschen

How to create nested for loops that has two changing variables to output one variable?

4 Ansichten (letzte 30 Tage)
This is the code I am trying to run, and I am unsure how to write nested for loops to run over a certain time period and length.
Context: I am trying to find what the function will look like after the time ends and how r and hz evolve. Ultimately I will want to plot the r and hz together.
%Intial Conditions
rho=(3.6*30*24*60*60); %3.6 months
u=10^9;
u0=2*10^-5;
v=1*10^6;
r0=2000; %Intial radius
h0=180; %Intial height
V=(3/4)*pi()*(r0^2)*h0; %volume
v0=1*10^6;
g=1.31;
tau=((3/4)^5)*(((pi()^3)*v0*(r0^8))/(g*V^3));
%% Theta
for t=1:172800; %Using the time for 2 days
theta(t)=rho*(1-exp(-t/rho));
end
%% Solving function
for r=1:3000;
for ta=1:theta;
hz(r,ta)=(((4*V)/(3*pi()*r0^2)).*(1./((1+(ta./tau)).^1/4)).*(1-(((r.^2)./(r0^2)).*(1./(1+((ta./tau).^1/4))))).^(1/3));
end
end
  3 Kommentare
Alyssa Mills
Alyssa Mills am 4 Dez. 2018
I'm trying to find height as a function of radius. Here is the equation I am trying to use where I eventually want to test different times (t) and radii (r). Screen Shot 2018-12-03 at 9.48.16 PM.png
Walter Roberson
Walter Roberson am 4 Dez. 2018
Your code already tests different angles (ta) and different radii (r ) . If you want to test different tau as well you would add another loop and probably add another index on the output.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Walter Roberson
Walter Roberson am 4 Dez. 2018
rho=(3.6*30*24*60*60); %3.6 months
u=10^9;
u0=2*10^-5;
v=1*10^6;
r0=2000; %Intial radius
h0=180; %Intial height
V=(3/4)*pi()*(r0^2)*h0; %volume
v0=1*10^6;
g=1.31;
tau=((3/4)^5)*(((pi()^3)*v0*(r0^8))/(g*V^3));
%% Theta
for t=1:172800; %Using the time for 2 days
theta(t)=rho*(1-exp(-t/rho));
end
%% Solving function
hz = zeros(3000, length(theta));
for r=1:3000;
for ta=1:length(theta);
hz(r,ta)=(((4*V)/(3*pi()*r0^2)).*(1./((1+(theta(ta)./tau)).^1/4)).*(1-(((r.^2)./(r0^2)).*(1./(1+((theta(ta)./tau).^1/4))))).^(1/3));
end
end
This is rather slow and you should try to vectorize it.
  9 Kommentare
Walter Roberson
Walter Roberson am 4 Dez. 2018
tvals = [2, 27, 3.6*365/12, 1.5*365] * 24 * 60 * 60; %seconds
rvals = 1 : 3000;
rho=(3.6*30*24*60*60); %3.6 months
u=10^9;
u0=2*10^-5;
v=1*10^6;
r0=2000; %Intial radius
h0=180; %Intial height
V=(3/4)*pi()*(r0^2)*h0; %volume
v0=1*10^6;
g=1.31;
tau=((3/4)^5)*(((pi()^3)*v0*(r0^8))/(g*V^3));
%% Theta
for tidx = 1 : length(tvals)
theta(tidx)=rho*(1-exp(-tvals(tidx)/rho));
end
%% Solving function
hz = zeros(3000, length(theta));
for ridx = 1 : length(rvals)
r = rvals(ridx);
for tidx = 1:length(theta)
ta = theta(tidx);
hz(r,tidx)=(((4*V)/(3*pi()*r0^2)).*(1./((1+(ta./tau)).^1/4)).*(1-(((r.^2)./(r0^2)).*(1./(1+((ta./tau).^1/4))))).^(1/3));
end
end
subplot(1,2,1)
plot(rvals, real(hz))
legend(sprintfc('%g', tvals/(24*60*60)))
subplot(1,2,2)
plot(rvals, imag(hz))
legend(sprintfc('%g', tvals/(24*60*60)))
Alyssa Mills
Alyssa Mills am 4 Dez. 2018
Thank you so much for the help! You helped vectorize which I am sort of familiar with but couldn't get it exactly down. I'll try to play with this to make the curves match exactly to the previous plot. I had gotten the exact curve of t=2 days previously (using the conditions I have above), but I sadly didn't save that script.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu 2-D and 3-D Plots 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!

Translated by