how to plot a function

2 ビュー (過去 30 日間)
Ali Salem
Ali Salem 2021 年 4 月 20 日
編集済み: Johannes Hougaard 2021 年 4 月 20 日
How can I plot this function below?
function [ content ] = caffeine( time, caffeineContent, durationBetween )
halfLife = 5.7;
tau = halfLife/log(2);
n = floor(time/durationBetween);
content = caffeineContent * exp(-time/tau) * (1-exp(durationBetween * (n+1)/tau))/(1-exp(durationBetween/tau));
end

回答 (2 件)

Rik
Rik 2021 年 4 月 20 日
編集済み: Rik 2021 年 4 月 20 日
The same as any other function: find a vector of x data and calculate the y data. Then you can use plot. You can use plot3 for xyz data.
Edit:
time=linspace(0,60,200);
caffeineContent=0.5;
durationBetween=1;
content=zeros(size(time));
for n=1:numel(time)
content(n) = caffeine( time(n), caffeineContent, durationBetween );
end
plot(time,content)
function content = caffeine( time, caffeineContent, durationBetween )
halfLife = 5.7;
tau = halfLife/log(2);
n = floor(time/durationBetween);
content = caffeineContent * exp(-time/tau) * (1-exp(durationBetween * (n+1)/tau))/(1-exp(durationBetween/tau));
end
  2 件のコメント
Johannes Hougaard
Johannes Hougaard 2021 年 4 月 20 日
It is shown in the answer

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


Johannes Hougaard
Johannes Hougaard 2021 年 4 月 20 日
編集済み: Johannes Hougaard 2021 年 4 月 20 日
Another way to do it would be using the fplot by which you don't need a for loop and to define the number of points in your x-axis
fh = @(x)caffeine(x,0.4,10); % That would be a .4 caffeineContent every 10 units.
figure; fplot(fh,[0 120]);
And I'd encourage you to vectorize your code using .* in stead of *
function content = caffeine( time, caffeineContent, durationBetween )
halfLife = 5.7;
tau = halfLife/log(2);
n = floor(time/durationBetween);
content = caffeineContent .* exp(-time/tau) .* (1-exp(durationBetween .* (n+1)/tau))/(1-exp(durationBetween/tau));
That way you could simply call
figure; plot(0:120,caffeine(0:120,0.6,8));

Community Treasure Hunt

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

Start Hunting!

Translated by