6
$\begingroup$

Let $f:[0,2]\to\Bbb{R}^+$ be the function give by $$f(x)=\sqrt{x(2-x)}.$$
I need to find (the exact values of) constants $a_1, a_2,a_3,a_4$ in $$g(x)=\sum_{k=1}^4a_kx^k(2-x)^k$$ such that $f(x)=g(x)$ for all $x\in\{ \frac14,\frac12, \frac34, 1\}.$

Is there any easy way to do this using mathematica?

Also I would like to compare the graphs of $f$ and $g$.

Since I am not familiar with mathematica, can somebody help me to solve this. Any help would be appreciate.

$\endgroup$
  • 1
    $\begingroup$ Removing the endpoints helps but the equations are still linearly dependent because the equation $f(1/4)=g(1/4)$ is identical to the equation $f(7/4)=g(7/4)$ and so on. $\endgroup$ – Rahul Dec 26 '16 at 20:41
  • 1
    $\begingroup$ @Nil Same technique works for your new domain of $k$. In fact it gives the same answer for the four a[n] variables as it should. $\endgroup$ – Edmund Dec 26 '16 at 20:58
  • $\begingroup$ @Edmund: Thank you very much for your helpful detailed solution. $\endgroup$ – Bumblebee Dec 26 '16 at 21:00
10
$\begingroup$

You may use LinearSolve to solve for the a[n].

Let

f[x_] := Sqrt[x (2 - x)]
g[x_] = Sum[a[k]*x^k*(2 - x)^k, {k, 0, 8}]

Note that I intentionally used Set instead of SetDelayed for g.

With

vars = a[#] & /@ Range[0, 8];
points = Range[0, 2, 1/4];

Then

m = CoefficientArrays[g[#], vars] & /@ points // Normal // #[[All, 2]] & ;
b = f /@ points ;

Call LinearSolve

ls = LinearSolve[m, b] // Simplify;

and construct Rules of solution (ls) and variables (vars).

sol = MapThread[Rule, {vars, ls}];
sol // Column

Mathematica graphics

Check equality for points by ReplaceAll of g with Rules in solution sol.

f[#] == g[#] /. sol & /@ points
{True, True, True, True, True, True, True, True, True}

Plot comparison.

Plot[{f[x], g[x] /. sol}, {x, 0, 2}, PlotLegends -> "Expressions", ImageSize -> Large]

Mathematica graphics

Hope this helps

$\endgroup$
  • 1
    $\begingroup$ Interesting, I didn't realize LinearSolve doesn't give a warning when the system is underdetermined. $\endgroup$ – Rahul Dec 26 '16 at 20:45
  • $\begingroup$ @Rahul Yes. It just comes out with the many zeros from the row reduction. $\endgroup$ – Edmund Dec 26 '16 at 20:48
  • 4
    $\begingroup$ vars = Array[a, 9, 0] $\endgroup$ – corey979 Dec 26 '16 at 20:49
  • $\begingroup$ @corey979 That is nice. (+1) I don't use indexed variables that often so Array didn't come to mind. $\endgroup$ – Edmund Dec 26 '16 at 20:51
7
$\begingroup$

With the last update that reads:

Let $f:[0,2]\to\Bbb{R}^+$ be the function give by $$f(x)=\sqrt{x(2-x)}.$$
I need to find (the exact values of) constants $a_1, a_2,a_3,a_4$ in $$g(x)=\sum_{k=1}^4a_kx^k(2-x)^k$$ such that $f(x)=g(x)$ for all $x\in\{ \frac14,\frac12, \frac34, 1\}.$


Let's

f[x_] := Sqrt[x (2 - x)];
g[x_] := Sum[a[k] x^k (2 - x)^k, {k, 1, 4}];
vals = Range[1/4, 1, 1/4];
sol = Solve[g[#] == f[#] & /@ vals, Array[a, 4]][[1]];

Column @ sol

enter image description here

Matrix of the coefficients of the system of equations:

(m = Normal @
CoefficientArrays[g[#] == f[#] & /@ vals, 
  Array[a, 4]][[2]]) // MatrixForm

enter image description here

MatrixRank @ m

4

so all equations are linearly independent.

g2[x_] = g[x] /. sol // Simplify

enter image description here

and

Plot[{f[x], g2[x]}, {x, 0, 2}, PlotLegends -> "Expressions"]

enter image description here


Alternatively, one can actually fit a function to a dataset (below is a different case than previously):

Clear[f, g, vals]
f[x_] := Sqrt[x (2 - x)]
g[x_] := Sum[a[k] x^k (2 - x)^k, {k, 1, 8}]
args = Range[0, 2, 1/4];
vals = f /@ args;
data = Transpose @ {args, vals};

nlm = NonlinearModelFit[data, g[x], Array[a, 8], x];

nlm["ParameterTable"]

enter image description here

I skipped the a[0] to make the number of parameters smaller than the number of points to be fitted to.

g3[x_] = Normal @ nlm

enter image description here

Plot[{f[x], g3[x]}, {x, 0, 2}, PlotLegends -> "Expressions"]

enter image description here

Comparing the difference between g2 and g3:

Plot[g2[x] - g3[x], {x, 0, 2}]

enter image description here

(Beware of the Runge's phenomenon (1)(2)!)

$\endgroup$
  • $\begingroup$ Than you very much. I appreciate your continuous support to formulate the right question (+1). $\endgroup$ – Bumblebee Dec 26 '16 at 21:06
  • $\begingroup$ Just to add a note: one can pretty much expect the Runge phenomenon to happen for sufficiently high degree if your interpolation points are not "clustered" near the endpoints. $\endgroup$ – J. M. will be back soon Jan 3 '17 at 13:52
  • $\begingroup$ Or simply Solve@ Table[Sum[a[k] (x (2 - x))^k, {k, 4}] == f[x], {x, Range[4]/4}]... $\endgroup$ – Michael E2 Jan 4 '17 at 16:31

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.