How is the Jacobian matrix computed in finite difference problems?












1












$begingroup$


I have come across many papers which reference the Jacobian when solving certain finite difference inverse problems. And I have seen many articles and textbooks which discuss the mathematical properties of the Jacobian in an abstract sense. I have also seen examples for calculating the Jacobian when the functions are known and analytic.



But, amidst all this, I still have no idea how to sit down at my computer and compute a Jacobian for real data and non-analytic functions.



For example, I have some predicted data vector, $mathbf{f}$ and some model vector, $mathbf{m}$.



The Jacobian is defined as:



$$mathbf{J}_{ij} = frac{partial f_i}{partial m_j} $$



But how can this actually be computed?



Note, I have come across many answers that say that you can compute them using finite differences (for example, see this answer here). In this case, we can say:



$$mathbf{F}(mathbf{m}) = f_1(mathbf{m})mathbf{i}+f_2(mathbf{m})mathbf{j}+f_3(mathbf{m})mathbf{k}+...$$



and so the Jacobian is defined via finite difference with some model perturbation:



$$mathbf{J}_{ij} = frac{f_i(m_j+Delta m)-f_i(m_j)}{Delta m}$$



However, this method requires me to solve $mathbf{F}(mathbf{m})$ for every predicted function for every model perturbation. My particular problem involves thousands of predicted points and millions of model parameters and each function evaluation takes minutes to hours. It is not feasible to use the method suggested.



Any explanation or resources are appreciated.










share|cite|improve this question











$endgroup$












  • $begingroup$
    Assuming everything else is being done by finite differences (so the data are on a grid rather than an unstructured mesh), the derivatives are usually themselves evaluated by finite differences.
    $endgroup$
    – Ian
    Dec 6 '18 at 19:50












  • $begingroup$
    I have updated the answer to clarify why doing many function calls for different finite difference perturbation will not work (at least the way I am understanding it)
    $endgroup$
    – Darcy
    Dec 6 '18 at 19:58










  • $begingroup$
    If $J$ has a million entries or more and each function evaluation takes a minute then most likely a method dependent on the Jacobian is not the right fit for your problem. You might say what you're trying to learn about $mathbf{F}$ so that we might send you in the right direction.
    $endgroup$
    – Ian
    Dec 6 '18 at 22:11
















1












$begingroup$


I have come across many papers which reference the Jacobian when solving certain finite difference inverse problems. And I have seen many articles and textbooks which discuss the mathematical properties of the Jacobian in an abstract sense. I have also seen examples for calculating the Jacobian when the functions are known and analytic.



But, amidst all this, I still have no idea how to sit down at my computer and compute a Jacobian for real data and non-analytic functions.



For example, I have some predicted data vector, $mathbf{f}$ and some model vector, $mathbf{m}$.



The Jacobian is defined as:



$$mathbf{J}_{ij} = frac{partial f_i}{partial m_j} $$



But how can this actually be computed?



Note, I have come across many answers that say that you can compute them using finite differences (for example, see this answer here). In this case, we can say:



$$mathbf{F}(mathbf{m}) = f_1(mathbf{m})mathbf{i}+f_2(mathbf{m})mathbf{j}+f_3(mathbf{m})mathbf{k}+...$$



and so the Jacobian is defined via finite difference with some model perturbation:



$$mathbf{J}_{ij} = frac{f_i(m_j+Delta m)-f_i(m_j)}{Delta m}$$



However, this method requires me to solve $mathbf{F}(mathbf{m})$ for every predicted function for every model perturbation. My particular problem involves thousands of predicted points and millions of model parameters and each function evaluation takes minutes to hours. It is not feasible to use the method suggested.



Any explanation or resources are appreciated.










share|cite|improve this question











$endgroup$












  • $begingroup$
    Assuming everything else is being done by finite differences (so the data are on a grid rather than an unstructured mesh), the derivatives are usually themselves evaluated by finite differences.
    $endgroup$
    – Ian
    Dec 6 '18 at 19:50












  • $begingroup$
    I have updated the answer to clarify why doing many function calls for different finite difference perturbation will not work (at least the way I am understanding it)
    $endgroup$
    – Darcy
    Dec 6 '18 at 19:58










  • $begingroup$
    If $J$ has a million entries or more and each function evaluation takes a minute then most likely a method dependent on the Jacobian is not the right fit for your problem. You might say what you're trying to learn about $mathbf{F}$ so that we might send you in the right direction.
    $endgroup$
    – Ian
    Dec 6 '18 at 22:11














1












1








1





$begingroup$


I have come across many papers which reference the Jacobian when solving certain finite difference inverse problems. And I have seen many articles and textbooks which discuss the mathematical properties of the Jacobian in an abstract sense. I have also seen examples for calculating the Jacobian when the functions are known and analytic.



But, amidst all this, I still have no idea how to sit down at my computer and compute a Jacobian for real data and non-analytic functions.



For example, I have some predicted data vector, $mathbf{f}$ and some model vector, $mathbf{m}$.



The Jacobian is defined as:



$$mathbf{J}_{ij} = frac{partial f_i}{partial m_j} $$



But how can this actually be computed?



Note, I have come across many answers that say that you can compute them using finite differences (for example, see this answer here). In this case, we can say:



$$mathbf{F}(mathbf{m}) = f_1(mathbf{m})mathbf{i}+f_2(mathbf{m})mathbf{j}+f_3(mathbf{m})mathbf{k}+...$$



and so the Jacobian is defined via finite difference with some model perturbation:



$$mathbf{J}_{ij} = frac{f_i(m_j+Delta m)-f_i(m_j)}{Delta m}$$



However, this method requires me to solve $mathbf{F}(mathbf{m})$ for every predicted function for every model perturbation. My particular problem involves thousands of predicted points and millions of model parameters and each function evaluation takes minutes to hours. It is not feasible to use the method suggested.



Any explanation or resources are appreciated.










share|cite|improve this question











$endgroup$




I have come across many papers which reference the Jacobian when solving certain finite difference inverse problems. And I have seen many articles and textbooks which discuss the mathematical properties of the Jacobian in an abstract sense. I have also seen examples for calculating the Jacobian when the functions are known and analytic.



But, amidst all this, I still have no idea how to sit down at my computer and compute a Jacobian for real data and non-analytic functions.



For example, I have some predicted data vector, $mathbf{f}$ and some model vector, $mathbf{m}$.



The Jacobian is defined as:



$$mathbf{J}_{ij} = frac{partial f_i}{partial m_j} $$



But how can this actually be computed?



Note, I have come across many answers that say that you can compute them using finite differences (for example, see this answer here). In this case, we can say:



$$mathbf{F}(mathbf{m}) = f_1(mathbf{m})mathbf{i}+f_2(mathbf{m})mathbf{j}+f_3(mathbf{m})mathbf{k}+...$$



and so the Jacobian is defined via finite difference with some model perturbation:



$$mathbf{J}_{ij} = frac{f_i(m_j+Delta m)-f_i(m_j)}{Delta m}$$



However, this method requires me to solve $mathbf{F}(mathbf{m})$ for every predicted function for every model perturbation. My particular problem involves thousands of predicted points and millions of model parameters and each function evaluation takes minutes to hours. It is not feasible to use the method suggested.



Any explanation or resources are appreciated.







derivatives pde mathematical-modeling jacobian inverse-problems






share|cite|improve this question















share|cite|improve this question













share|cite|improve this question




share|cite|improve this question








edited Dec 6 '18 at 19:58







Darcy

















asked Dec 6 '18 at 19:46









DarcyDarcy

149111




149111












  • $begingroup$
    Assuming everything else is being done by finite differences (so the data are on a grid rather than an unstructured mesh), the derivatives are usually themselves evaluated by finite differences.
    $endgroup$
    – Ian
    Dec 6 '18 at 19:50












  • $begingroup$
    I have updated the answer to clarify why doing many function calls for different finite difference perturbation will not work (at least the way I am understanding it)
    $endgroup$
    – Darcy
    Dec 6 '18 at 19:58










  • $begingroup$
    If $J$ has a million entries or more and each function evaluation takes a minute then most likely a method dependent on the Jacobian is not the right fit for your problem. You might say what you're trying to learn about $mathbf{F}$ so that we might send you in the right direction.
    $endgroup$
    – Ian
    Dec 6 '18 at 22:11


















  • $begingroup$
    Assuming everything else is being done by finite differences (so the data are on a grid rather than an unstructured mesh), the derivatives are usually themselves evaluated by finite differences.
    $endgroup$
    – Ian
    Dec 6 '18 at 19:50












  • $begingroup$
    I have updated the answer to clarify why doing many function calls for different finite difference perturbation will not work (at least the way I am understanding it)
    $endgroup$
    – Darcy
    Dec 6 '18 at 19:58










  • $begingroup$
    If $J$ has a million entries or more and each function evaluation takes a minute then most likely a method dependent on the Jacobian is not the right fit for your problem. You might say what you're trying to learn about $mathbf{F}$ so that we might send you in the right direction.
    $endgroup$
    – Ian
    Dec 6 '18 at 22:11
















$begingroup$
Assuming everything else is being done by finite differences (so the data are on a grid rather than an unstructured mesh), the derivatives are usually themselves evaluated by finite differences.
$endgroup$
– Ian
Dec 6 '18 at 19:50






$begingroup$
Assuming everything else is being done by finite differences (so the data are on a grid rather than an unstructured mesh), the derivatives are usually themselves evaluated by finite differences.
$endgroup$
– Ian
Dec 6 '18 at 19:50














$begingroup$
I have updated the answer to clarify why doing many function calls for different finite difference perturbation will not work (at least the way I am understanding it)
$endgroup$
– Darcy
Dec 6 '18 at 19:58




$begingroup$
I have updated the answer to clarify why doing many function calls for different finite difference perturbation will not work (at least the way I am understanding it)
$endgroup$
– Darcy
Dec 6 '18 at 19:58












$begingroup$
If $J$ has a million entries or more and each function evaluation takes a minute then most likely a method dependent on the Jacobian is not the right fit for your problem. You might say what you're trying to learn about $mathbf{F}$ so that we might send you in the right direction.
$endgroup$
– Ian
Dec 6 '18 at 22:11




$begingroup$
If $J$ has a million entries or more and each function evaluation takes a minute then most likely a method dependent on the Jacobian is not the right fit for your problem. You might say what you're trying to learn about $mathbf{F}$ so that we might send you in the right direction.
$endgroup$
– Ian
Dec 6 '18 at 22:11










0






active

oldest

votes











Your Answer





StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
});
});
}, "mathjax-editing");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "69"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
noCode: true, onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmath.stackexchange.com%2fquestions%2f3028953%2fhow-is-the-jacobian-matrix-computed-in-finite-difference-problems%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































Thanks for contributing an answer to Mathematics Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


Use MathJax to format equations. MathJax reference.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmath.stackexchange.com%2fquestions%2f3028953%2fhow-is-the-jacobian-matrix-computed-in-finite-difference-problems%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Wiesbaden

Marschland

Dieringhausen