Indeed, thanks William.  I'm not understanding the problem though, as
range works with "ordinary" variables:

x=5
[t for t in range(1,x)]

Anyway, I changed the units function to not use a list comprehension,
and instead use this formula:
http://i.investopedia.com/inv/tutorials/site/advancedbond/yield9.GIF

The new units function:
def units(C, n, F, r):
    return C * ((1 - (1 / (1 + r) ^ n)) / r) + F * (1 / (1 + r) ^ n)

And here we have arrived, successful, with the 3d plot expression:

plot3d(price(70,var('n'),1000,var('r')), (n,1,5), (r,0,5))

Hooray sage!  Very cool.

On Apr 3, 8:53 pm, William Stein <wst...@gmail.com> wrote:
> On Fri, Apr 3, 2009 at 7:45 PM, Brian <medo...@gmail.com> wrote:
>
> > Thank you Timothy.  Here is the correct (I believe) code for that
> > equation.
>
> > def units(C, n, F, r):
> >    return sum([C / (1 + r) ^ t for t in range(1, n+1)]) + F / (1 + r)
> > ^ n
>
> > def price(C, n, F, r):
> >    return 100 * (units(C, n, F, r) / F)
>
> > Here, units expresses the equation I linked to, and price gives the
> > scaled price, 100 being par.
>
> > For example, evaluating the expression below demonstrates the example
> > calculation from this site:
> >http://www.moneychimp.com/articles/finworks/fmbondytm.htm
>
> > units(70,4,1000,.0853)
>
> > That evaluates to ~950 as in the example, therefore giving a price of
> > ~95:
>
> > price(70,4,1000,.0853)
>
> > And sure enough, plotting the price yield curve gives sensible
> > results:
> > plot(price(70,4,1000,var('y')),0,.2)
>
> > Now I would like to make a 3d plot where n and r are free.  The
> > trouble is, when I try it, I get the following error.  Would someone
> > point out my error?
>
> > plot(price(70,var('n'),1000,var('y')))
>
> > TypeError: range() integer start argument expected, got
> > sage.rings.integer.Integer.
>
> The problem is that you're giving the symbolic variable "n" as input
> to the range command (in your units function), but the range command
> takes a pair of integers as input.
>
> William
--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to 
sage-support-unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sage-support
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---

Reply via email to