Multiplication of power series looks tricky as for the term k of the
resulting power series you need to access terms where sum index value to
k. (ps1 next: i) and (ps2 next: k - i). Somehow the bloc of code
defining the multiplicated serie needs to know about its current rank k.

You should not need a dedicated .* operator, you can handle it with only
* operator with appropriate object testing.

No real answer

Le 30/05/2016 21:47, Erisa a écrit :
> The fibonacciSequence example was really helpful.  I made a new class
> PowerSeries, a subclass of Generator.  Then I defined a binary operation  +
> as follows:
> 
> + aPowerSeries
>   ^ PowerSeries on: [ :ps |
>     | a b |
>     [ a := self next.
>       b := aPowerSeries next.
>       ps yield: (a + b) ]
>     repeat ]
> 
> This works perfectly.  But now I am struggling with how to define
> multiplication.  When I do PS1 * PS2, the first yield should be a := PS1
> next. b := PS2 next. ps yield (a * b).  Thereafter would come the
> PowerSeries, call it PSNew,  (PS2 .* a) + (PS1 * PS2'),  where .* is scalar
> multiplication (easy to implement) and PS2' is the original PS2 (i.e.,
> rewound 1).  I see several problems here.  It looks like I need a way to
> clone (fork?) a PowerSeries since in this computation I need both the
> current PS2 and the original PS2 and be able to operate with them
> independently.  Second, how do I define the generator so that it first
> yields the scalar (a*b) and thereafter is represented by the PowerSeries
> PSNew?  Finally, will the recursion in the definition of * blow up rapidly? 

-- 
Dr. Geo
http://drgeo.eu


Reply via email to