4
$\begingroup$

What is the efficient way to solve the matrix having a dependency on some varaible f. I have a simple matrix g which is dependent on f. Need to find for what value of f, the determinat of the matrix goes to zero. In reality I am dealing with a problem of size 1000 cross 1000 which is having a dependency on f. I dont want to extract the symbolc determinant, and use NSolve to find the roots which satisfy the Det equatio. This method fails for matrix of large dimensions. I am looking for the methods which is effective to solve this matrix irrespective of matrix dimensions. I have tried a method below, which is not elegant. But this method did not slove my problem.

frange = N[Subdivide[0, 1000, 10000]]; g = {{2*f^2 + 3.6*f^2, 192}, {876, 21.8*f^2 + 33.3*f^2}}; c = Table[ First@#/Last@# &@SingularValueList[g /. f -> frange[[i]]], {i, 1, Length[frange]}]; ListLogLinearPlot[{frange, c}, Joined -> True, PlotRange -> All] PeakDetect[c] 
$\endgroup$

2 Answers 2

2
$\begingroup$

Maybe you could use FindRoot? The trick is to know how to differentiate the determinant of a matrix, which is:

$$\frac{d \det (g(x))}{dx} = \det\left(g(x)\right) \ \mathrm{tr}\left(g(x)^{-1}.g'(x)\right)$$

Your example:

g = {{2*f^2 + 3.6*f^2, 192}, {876, 21.8*f^2 + 33.3*f^2}}; 

In order to avoid expanding out the symbolic determinant, define:

m[f_?NumericQ] = g; m'[f_?NumericQ] = D[g, f]; 

Then, use FindRoot:

FindRoot[Det[m[x]], {x, 10}, Jacobian -> {{Det[m[x]]Tr[Inverse[m[x]] . m'[x]]}}] 

{x -> 4.83188}

$\endgroup$
1
$\begingroup$

The type of dependence in f is critical here. For your example, it amounts to calculating a generalized eigenvalue.

g = {{2*f^2 + 3.6*f^2, 192}, {876, 21.8*f^2 + 33.3*f^2}}; {A0, A1, A2} = CoefficientArrays[g, f] // Normal; eigs = Eigenvalues[{A0, -Flatten /@ A2}]; 

which is such that

Det[g /. f -> Sqrt[eigs[[1]]]] 

is numerically zero, which corresponds to the solution in the range you are looking for.

More generally, if you have a single variable f that appears polynomially in the matrix then its determinant is also a polynomial in that variable and you can solve for its roots as in

Solve[Det[g] == 0, f] 
$\endgroup$
5
  • $\begingroup$ Does this method work for matrix of all dimensions? $\endgroup$ Commented May 8, 2022 at 16:12
  • $\begingroup$ Does this method work for matrix of all dimensions? And I didnt understood the second line in your answer. $\endgroup$ Commented May 8, 2022 at 16:18
  • $\begingroup$ It works as long as the matrix is square and the dependence on the one variable is linear. Your matrix is linear in f^2, and the second line is extracting the coefficient of the f^2 term, that is A2. $\endgroup$ Commented May 8, 2022 at 16:40
  • $\begingroup$ what If some terms are having terms f^3 and some terms f^2, it does not work? $\endgroup$ Commented May 8, 2022 at 16:57
  • $\begingroup$ It may, if you are able to restate your dependence as linear by growing your dimensions then you have a generalized eigenvalue problem. But that would have to be studied carefully. More generally, if all you have is one variable and the dependence is polynomial, then the determinant is a polynomial on that variable. In principle, this amounts to finding the roots of a polynomial in a single variable, which should be workable. I will change the answer to have that addressed. $\endgroup$ Commented May 8, 2022 at 17:05

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.