Plotting a Piecewise function
3 次查看(过去 30 天)
显示 更早的评论
I currently have this as a script:
function W
t= (1:56)
while t>=1 & t<=28
Ws
t=48+3.6*t+.6363*t^2+.00963*t^3
end
while 28<t & t<=56
Wr
t=-1004+65.8*t
end
function Ws
disp('t is greater than or equal to 1 and t is less than or equal to 28')
end
function Wr
disp ('t is greater than 28 and less than or equal to 56')
end
end
function graph;W (1,56)
N=1000;
n=(56-1)/N;
x=[1:.055:56];
i=1:length(x);
F(i)=W(x(i));
end
plot(x,F)
xlabel('Time')
ylabel('Body Weight')
end
Everything seems to go through matlab okay except that I cannot get it to graph. How can I change this to get it to graph?
1 个评论
dpb
2013-10-11
Format the code so it's legible -- (put in line break and then two spaces before the first line of code...break lines as needed)
回答(3 个)
Jan
2013-10-14
编辑:Jan
2013-10-14
I think, this will not do what you want:
t = (1:56)
while t>=1 & t<=28
Ws
t=48+3.6*t+.6363*t^2+.00963*t^3
end
while produces the scalar dimensions of the condition by inserting an all():
while all(t>=1 & t<=28)
Now all elements of the vector t are transformed by the polynomial until any element is < 1 or > 28. Is this your intention?
Or do you want:
t = 1:56;
tt(1:28) = 48+3.6*t+.6363*t^2+.00963*t^3;
tt(29:56) = -1004+65.8*t;
?
The next problem is:
function graph;W (1,56)
What should this do? The function W does not use input arguments. The function graph is not called from anywhere.
I recommend to read the Getting Started chapters of the documentation and to use the debugger to step through the code line by line until it gets clear, what's going on.
0 个评论
Vivek Selvam
2013-10-14
This might be a starting place for a running code.
function graph
N=1000;
n=(56-1)/N;
x=[1:n:56];
for i=1:length(x)
F(i)=W(x(i));
end
plot(x,F)
xlabel('Time')
ylabel('Body Weight')
end
function F = W(t)
if t>=1 && t<=28
Ws
F=48+3.6*t+.6363*t^2+.00963*t^3
end
if 28<t && t<=56
Wr
F=-1004+65.8*t
end
function Ws
disp('t is greater than or equal to 1 and t is less than or equal to 28')
end
function Wr
disp ('t is greater than 28 and less than or equal to 56')
end
end
0 个评论
sixwwwwww
2013-10-14
Dear Lauren, do you need following functionality in your code:
j = 1:56;
t = zeros(1, length(j));
for i = 1:56
if (i >= 1 && i < 29)
disp('t is greater than or equal to 1 and t is less than or equal to 28')
t(i) = 48 + 3.6 * i + .6363 * i^2 + .00963 * i^3;
else if (i > 28 && i <= 56)
disp ('t is greater than 28 and less than or equal to 56')
t(i) = -1004 + 65.8 .* i;
end
end
end
N = 1000;
x = min(j):((max(j) - min(j)) / N):56;
F = interp1(j, t, x);
plot(x, F), xlabel('Time'), ylabel('Body Weight')
If yes then tell me which functions you need to do what work so that this code can be converted to functions
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Directed Graphs 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!