how to do a loop and call a function

1 回表示 (過去 30 日間)
liyana nadirah
liyana nadirah 2020 年 2 月 9 日
コメント済み: Stephen23 2020 年 2 月 10 日
function [g1]=func2(L,D,P,r,c,a,t)
g1=(((3*c)/(P*r))*((((D*(t-a))/L))-(L/6)));
end
function [g2]=func3(L,D,P,r,c,Y,t)
g2=1-((c/P)*exp(((-3*D)/(r*L))*(t-Y)));
end
hi guys. can someone help me? i have this to funtion and i have to set all the variable L,D,P,r,c,a and Y as a input and i have to do a for loop for t from 0 to 100 using this eqution and have to set the solution when a<t<=Y the it will use the first function and when t>Y it will use the second function and when t<a the fuction will be g=0 .but i don't know how to do it. so please help me
  2 件のコメント
Stephen23
Stephen23 2020 年 2 月 9 日
編集済み: Stephen23 2020 年 2 月 9 日
"...i have to do a for loop for t from 0 to 100 ..."
Is it really required to use a loop? If the other parameters are scalar, it would be trivial to vectorize those functions.
"...but i don't know how to do it"
Use logical indexing:
liyana nadirah
liyana nadirah 2020 年 2 月 9 日
sorry i don't get it. can you explain

サインインしてコメントする。

回答 (2 件)

David Hill
David Hill 2020 年 2 月 9 日
c=;
P=;
r=;
D=;
a=;
L=;
Y=;
t1=0:a;
t2=a+1:Y;
t3=Y+1:100;
g=[zeros(1,length(t1)),(((3*c)/(P*r))*((((D*(t1-a))/L))-(L/6))),1-((c/P)*exp(((-3*D)/(r*L))*(t3-Y)))];
t=0:100;

Stephen23
Stephen23 2020 年 2 月 9 日
編集済み: Stephen23 2020 年 2 月 9 日
As described in the question, you will have to do something like this:
L = ???;
D = ???;
P = ???;
r = ???;
c = ???;
a = ???;
Y = ???;
t = 0:???:100;
%
N = numel(t);
g = zeros(1,N); % this already fulfills the t<a requirement.
for k = 1:N
if t(k)>Y
g(k) = func3(??????, Y, t(k));
elseif t(k)>a
g(k) = func2(??????, a, t(k));
end
end
I left a few trivial things for you to complete (you need to replace all of the ???).
Both functions will need to be saved somewhere where they are visible to this code.
  6 件のコメント
liyana nadirah
liyana nadirah 2020 年 2 月 10 日
then what if i want to plot r from 0 to 1.42 and fix the t
Stephen23
Stephen23 2020 年 2 月 10 日
"then what if i want to plot r from 0 to 1.42 and fix the t"
If you only want to vary the r value then do the same like I showed you for L.
If you want to vary multiple different values then use ndgrid to generate all permutations.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeLoops and Conditional Statements についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by