# ApproxFun.jl multiplying fourier series and cosine/sine series issue

**URL:** <https://discourse.julialang.org/t/approxfun-jl-multiplying-fourier-series-and-cosine-sine-series-issue/110937>\
**Category:** General Usage\
**Tags:** package\
**Created:** [February 29, 2024, 8:42am UTC](https://discourse.julialang.org/t/approxfun-jl-multiplying-fourier-series-and-cosine-sine-series-issue/110937 "2024-02-29T08:42:41Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![yewalenikhil65](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yewalenikhil65/32/26873_2.png) [@yewalenikhil65](https://discourse.julialang.org/u/yewalenikhil65)\
**Post date:** [February 29, 2024, 8:42am UTC](https://discourse.julialang.org/t/approxfun-jl-multiplying-fourier-series-and-cosine-sine-series-issue/110937/1 "2024-02-29T08:42:42Z")

</div>

Hi @dlfivefifty  
I am using ApproxFun.jl along with `Num` type from SYmbolics to work with `sin/cosine/Fourier` series as follows:

```julia
julia> myg =Fun(CosSpace(), rand(10));

myf = Fun(SinSpace(), rand(10));

using Symbolics

a=Symbolics.variables(:a, 0:9); # create a Num vector

myh = Fun(Fourier(), a);

myg*myf; # this works

myg*myh # this doesnt work

myf*myh # this also doesnt work

```

Both cases that dont work throw following error, If someone can help me here ?

```julia
ERROR: TypeError: non-boolean (Num) used in boolean context
Stacktrace:
  [1] standardchoplength(coeffs::Vector{Num}, tol::Num)
    @ ApproxFunBase ~/.julia/packages/ApproxFunBase/OfsLT/src/LinearAlgebra/standardchop.jl:46
  [2] chop!
    @ ~/.julia/packages/ApproxFunBase/OfsLT/src/Fun.jl:494 [inlined]
  [3] chop!
    @ ~/.julia/packages/ApproxFunBase/OfsLT/src/Fun.jl:503 [inlined]
  [4] chop(f::Fun{CosSpace{PeriodicSegment{Float64}, Float64}, Num, SubArray{Num, 1, Vector{Num}, Tuple{StepRange{Int64, Int64}}, true}}, tol::Num)
    @ ApproxFunBase ~/.julia/packages/ApproxFunBase/OfsLT/src/Fun.jl:521
  [5] ConcreteMultiplication
    @ ~/.julia/packages/ApproxFunBase/OfsLT/src/Operators/banded/Multiplication.jl:16 [inlined]
  [6] ConcreteMultiplication
    @ ~/.julia/packages/ApproxFunBase/OfsLT/src/Operators/banded/Multiplication.jl:26 [inlined]
  [7] Multiplication(f::Fun{SS}, sp::CosSpace) where SS<:SinSpace
    @ ApproxFunFourier ~/.julia/packages/ApproxFunFourier/a7eyk/src/FourierOperators.jl:218 [inlined]
  [8] coefficienttimes(f::Fun{CosSpace{…}, Num, SubArray{…}}, g::Fun{CosSpace{…}, Float64, Vector{…}})
    @ ApproxFunBase ~/.julia/packages/ApproxFunBase/OfsLT/src/Operators/banded/Multiplication.jl:166
  [9] default_mult_compatible(f::Fun{CosSpace{…}, Float64, Vector{…}}, g::Fun{CosSpace{…}, Num, SubArray{…}})
    @ ApproxFunBase ~/.julia/packages/ApproxFunBase/OfsLT/src/Operators/banded/Multiplication.jl:148
 [10] default_mult(f::Fun{CosSpace{…}, Float64, Vector{…}}, g::Fun{CosSpace{…}, Num, SubArray{…}})
    @ ApproxFunBase ~/.julia/packages/ApproxFunBase/OfsLT/src/Operators/banded/Multiplication.jl:155
 [11] *(f::Fun{CosSpace{…}, Float64, Vector{…}}, g::Fun{CosSpace{…}, Num, SubArray{…}})
    @ ApproxFunBase ~/.julia/packages/ApproxFunBase/OfsLT/src/Operators/banded/Multiplication.jl:164
 [12] (::ApproxFunBase.var"#527#528"{Fun{CosSpace{PeriodicSegment{Float64}, Float64}, Float64, Vector{Float64}}})(gg::Function)
    @ ApproxFunBase ~/.julia/packages/ApproxFunBase/OfsLT/src/Spaces/ProductSpaceOperators.jl:323
 [13] _mapreduce(f::ApproxFunBase.var"#527#528"{Fun{CosSpace{…}, Float64, Vector{…}}}, op::typeof(+), ::IndexLinear, A::Vector{Fun{S, Num, SubArray{…}} where S})
    @ Base ./reduce.jl:440
 [14] _mapreduce_dim
    @ ./reducedim.jl:365 [inlined]
 [15] mapreduce(f::Any, op::Any, A::Union{Base.AbstractBroadcasted, AbstractArray})
    @ Base ./reducedim.jl:357 [inlined]
 [16] coefficienttimes
    @ ApproxFunBase ~/.julia/packages/ApproxFunBase/OfsLT/src/Spaces/ProductSpaceOperators.jl:323 [inlined]
 [17] default_mult_compatible(f::Fun{CosSpace{…}, Float64, Vector{…}}, g::Fun{ApproxFunBase.SumSpace{…}, Num, Vector{…}})
    @ ApproxFunBase ~/.julia/packages/ApproxFunBase/OfsLT/src/Operators/banded/Multiplication.jl:146
 [18] default_mult(f::Fun{CosSpace{…}, Float64, Vector{…}}, g::Fun{ApproxFunBase.SumSpace{…}, Num, Vector{…}})
    @ ApproxFunBase ~/.julia/packages/ApproxFunBase/OfsLT/src/Operators/banded/Multiplication.jl:155
 [19] *(f::Fun{CosSpace{PeriodicSegment{…}, Float64}, Float64, Vector{Float64}}, g::Fun{ApproxFunBase.SumSpace{Tuple{…}, PeriodicSegment{…}, Float64}, Num, Vector{Num}})
    @ ApproxFunBase ~/.julia/packages/ApproxFunBase/OfsLT/src/Operators/banded/Multiplication.jl:164
 [20] top-level scope
    @ REPL[55]:1
Some type information was truncated. Use `show(err)` to see complete types.

```

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [February 29, 2024, 9:33am UTC](https://discourse.julialang.org/t/approxfun-jl-multiplying-fourier-series-and-cosine-sine-series-issue/110937/2 "2024-02-29T09:33:51Z")

</div>

Create the constant length operator for `myg` first instead of trying to have it be adaptive.

---

<div class="post-metadata">

**Author:** ![yewalenikhil65](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yewalenikhil65/32/26873_2.png) [@yewalenikhil65](https://discourse.julialang.org/u/yewalenikhil65)\
**Post date:** [March 29, 2024, 2:02pm UTC](https://discourse.julialang.org/t/approxfun-jl-multiplying-fourier-series-and-cosine-sine-series-issue/110937/3 "2024-03-29T14:02:08Z")

</div>

Thanks ! that was helpful. Any idea how do i multiply cosine series of many coeffs having different periods ? Requesting @dlfivefifty to take a look if possible

```julia

 julia> G = Fun(CosSpace(), rand(3)) 
Fun(CosSpace(【0.0,6.283185307179586❫), [0.587619, 0.499599, 0.616276]) 
 
 
julia> F = Fun(SinSpace(PeriodicSegment(0, pi)), rand(3)); 
 
julia> Multiplication(F, CosSpace())*G 
ERROR: AssertionError: domain(f) == domain(sp) 
Stacktrace: 
 [1] Multiplication(f::Fun{SinSpace{PeriodicSegment{Float64}, Float64}, Float64, Vector{Float64}}, sp::CosSpace{PeriodicSegment{Float64}, Float64}) 
  @ ApproxFunFourier ~/.julia/packages/ApproxFunFourier/lFQDK/src/FourierOperators.jl:222 
 [2] top-level scope 
  @ REPL[11]:1

```

---

<div class="post-metadata">

**Author:** ![dlfivefifty](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlfivefifty/32/1959_2.png) [@dlfivefifty](https://discourse.julialang.org/u/dlfivefifty)\
**Post date:** [March 30, 2024, 3:25pm UTC](https://discourse.julialang.org/t/approxfun-jl-multiplying-fourier-series-and-cosine-sine-series-issue/110937/4 "2024-03-30T15:25:57Z")

</div>

I’m not sure what you expect it to do? Create a series with all possible combinations?

---

<div class="post-metadata">

**Author:** ![yewalenikhil65](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yewalenikhil65/32/26873_2.png) [@yewalenikhil65](https://discourse.julialang.org/u/yewalenikhil65)\
**Post date:** [March 30, 2024, 7:48pm UTC](https://discourse.julialang.org/t/approxfun-jl-multiplying-fourier-series-and-cosine-sine-series-issue/110937/5 "2024-03-30T19:48:12Z")

</div>

@dlfivefifty Thanks for reply.  
Yes I wished to create series in following way

```julia
a= rand(3); b= rand(3); # typically arrays of of n elements

# simplify following multiplication into another cosine series of period 2pi
(a[1] + a[2]*cos(θ) + a[3]*cos)(2θ) + ...)*(b[1] + b[2]*cos(2θ) + b[3]*cos(4θ) + ...)

```
