필터 지우기
필터 지우기

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

조회 수: 4 (최근 30일)
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
Alyssa Mills
Alyssa Mills 2018년 12월 4일
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 2018년 12월 4일
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.

댓글을 달려면 로그인하십시오.

채택된 답변

Walter Roberson
Walter Roberson 2018년 12월 4일
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
Walter Roberson
Walter Roberson 2018년 12월 4일
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 2018년 12월 4일
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.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 2-D and 3-D Plots에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by