# how to plot a function

2 ビュー (過去 30 日間)
Ali Salem 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 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 件のコメント表示非表示 1 件の古いコメント
Johannes Hougaard 2021 年 4 月 20 日
It is shown in the answer

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

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