| 1 | initial version |
First, your indentation is messed up, but that's probably just a formatting problem in your question.
The real issue is that when cantor(x,0) is evaluated, x refers to the symbolic variable, so all of your conditions like z < 0 are False (Sage can't prove they are True because it doesn't know anything specific about x) and execution falls through to the default val = 1. That's why you get a horizontal line at $y=1$.
If you replace the expression cantor(x,0) with an anonymous function that delays evaluation of cantor you'll get what you expect:
def cantor(z,iter=0):
#'z' is the x value
#'iter' is the number of iterations in the iterative process
if iter == 0:
val = z
elif z<0:
val = 0
elif z<(1/3):
val = (1/2)*cantor(3*z,iter-1)
elif z<=(2/3):
val = (1/2)
elif z<=1:
val = (1/2)+(1/2)*cantor(3*z-2,iter-1)
else:
val = 1
return val
plot(lambda x: cantor(x,1))
See http://aleph.sagemath.org/?q=79243f15-71df-49d8-82c8-b174ce50101f&lang=sage
Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.