0

I have a 3D curve

K2[s_] := 
c1[s] + 0.4*(j[s]*Sin[500*Pi*s/97.8] - v[s]*Cos [500*Pi*s/97.8])

where j and v are frame vectors.

I want to find the integral of the squared second derivative of the curve with respect to parameter s, from 0 to 5.

h[s_] := D[D[K2[s], s], s]

NIntegrate[(h[s])^2, {s, 0, 5}]

takes too long and gives;

The integrand (<<6>>+0.4` (<<1>>))^2 has evaluated to non-numerical \
values for all sampling points in the region with boundaries \
{{0,5`}}. >

Where do I do wrong? Should I use numerical derivatives?

Thank you.

Baran Cimen
  • 1,184
  • 1
  • 8
  • 18

1 Answers1

5

Let's try to simplify your question. I don't have the definitions for c1, j and v, so I'll just use:

K2[s_] := s^3

and

h[s_] := D[D[K2[s], s], s]

(you could also write D[k2[s], {s, 2}], to get the second derivative, but that's probably a matter of taste.)

Now if you evaluate:

h[2.]

you get the strange result:

D[D[8., 2.], 2.]

and the error message:

General::ivar: 2.` is not a valid variable. >>

To understand this, you have to understand how := (SetDelayed) works. In a nutshell: h[s_] := ... basically means "whenever you see the pattern h[something], take this expression, replace s with something and evaluate the whole thing. So h[2.] first evaluates to:

D[D[K2[2.], 2.], 2.]

And now the error message makes sense: You can't derive some expression by 2., because 2. is not a variable.

The easiest way around this is to use Set instead of SetDelayed, which evaluates the symbolic derivative on the right hand side, then assigns it to h[s]:

h[s_] = D[D[K2[s], s], s]
Niki Estner
  • 36,101
  • 3
  • 92
  • 152