- #1
Anthony
- 83
- 0
Hi all,
I'm currently trying to implement some code to compute the Frechet derivative of a system of PDEs, and the associated formal adjoint. The code I'm using to compute derivative is:
This works an absolute charm. Then to compute the associated adjoint, I use:
This doesn't work, sadly. All it seems to do is give me the transpose of the original Frechet derivative matrix. The code originally came from a book I've looked at, so it can't be too far wrong. Sadly, my mathematica skills are pretty much non-existent, so I haven't a clue what the problem is! If anyone could give me some pointers it would be much appreciated!
Many thanks,
Ant
I'm currently trying to implement some code to compute the Frechet derivative of a system of PDEs, and the associated formal adjoint. The code I'm using to compute derivative is:
Code:
FrechetD[support_List, dependVar_List,
independVar_List, testfunction_List] :=
Block[{indep, frechet, deriv, \[Epsilon], r0, x1, x2},
r0 = Function[indep, x1 + \[Epsilon] x2];
frechet = {}; Do[deriv = {};
Do[AppendTo[deriv, \!\(
\*SubscriptBox[\(\[PartialD]\), \(\[Epsilon]\)]\ \((support[[
j]] /. \[IndentingNewLine]dependVar[[
i]] -> \((r0 /. \[IndentingNewLine]{indep ->
independVar, \[IndentingNewLine]x1 ->
dependVar[[i]] @@ independVar, \[IndentingNewLine]x2 ->
testfunction[[i]] @@
independVar})\))\)\) /. \[Epsilon] -> 0],
{i, 1, Length[support]}];
AppendTo[frechet, deriv],
{j, 1, Length[support]}];
frechet]
This works an absolute charm. Then to compute the associated adjoint, I use:
Code:
AdjointFrechetD[support_List, dependVar_List,
independVar_List, testfunction_List] :=
Block[{subrule, $testf, frechet, n, b},
subrule = b_. ($testf^(n__)) @@ independVar :>
(-1)^Plus @@ {n} \!\(
\*SubscriptBox[\(\[PartialD]\), \(Delete[Thread[{independVar, {n}}],
0]\)]\((b\ $testf @@ independVar)\)\);
frechet = FrechetD[support, dependVar,
independVar , testfunction];
Do[frechet =
frechet /.
(subrule /. $testf -> testfunction[[i]]),
{i, 1, Length[testfunction]}];
frechet = Transpose[frechet]]
This doesn't work, sadly. All it seems to do is give me the transpose of the original Frechet derivative matrix. The code originally came from a book I've looked at, so it can't be too far wrong. Sadly, my mathematica skills are pretty much non-existent, so I haven't a clue what the problem is! If anyone could give me some pointers it would be much appreciated!
Many thanks,
Ant