How to Use FindRoot for Determinant with Fixed Values?

  • Context: Undergrad 
  • Thread starter Thread starter Reem Hashem
  • Start date Start date
  • Tags Tags
    Mathematica
Click For Summary
SUMMARY

The discussion focuses on using the FindRoot function in Mathematica to determine the value of "w" that results in a determinant equal to zero, given fixed values for "a" and "z". The user encountered issues with their initial implementation, which included complex nested loops and unclear function definitions. A recommendation was made to simplify the code by reducing the number of equations and gradually reintroducing complexity to ensure functionality. The importance of clear function definitions and proper syntax in Mathematica was emphasized to avoid errors during execution.

PREREQUISITES
  • Understanding of Mathematica syntax and functions
  • Familiarity with the FindRoot function in Mathematica
  • Knowledge of determinants and their properties
  • Experience with debugging and simplifying code
NEXT STEPS
  • Learn how to effectively use the FindRoot function in Mathematica
  • Study the principles of determinants and their applications in linear algebra
  • Explore debugging techniques in Mathematica to identify and resolve errors
  • Practice simplifying complex code structures in programming
USEFUL FOR

Mathematica users, mathematicians, and programmers looking to solve equations involving determinants and improve their coding practices in Mathematica.

Reem Hashem
Messages
23
Reaction score
0
Hello, I need someone to help me with mathematica

my aim in the code I wrote is to find the value of "w" with fixed values of "a" and "z" which makes the determante det =0 so I need bisection method to find the value of w ,then I thought to use FindRoot function but it did not work. So how to use FindRoot function in this regard.

this my code (attached)
 

Attachments

Physics news on Phys.org
If it helps, you can replace

f[1, 1] = y1[1] /. m;
f[1, 2] = y2[1] /. m;
f[1, 3] = y3[1] /. m;
f[1, 4] = y4[1] /. m;
f[2, 1] = y5[1] /. m;
f[2, 2] = y6[1] /. m;
f[2, 3] = y7[1] /. m;
f[2, 4] = y8[1] /. m;
f[3, 1] = y17[1] /. m;
f[3, 2] = y18[1] /. m;
f[3, 3] = y19[1] /. m;
f[3, 4] = y20[1] /. m;
f[4, 1] = y25[1] /. m;
f[4, 2] = y26[1] /. m;
f[4, 3] = y27[1] /. m;
f[4, 4] = y28[1] /. m;
d = Array[f, {4, 4}];
d = Partition[Flatten[d], 4];

with

d = First[{{y1[1], y2[1], y3[1], y4[1]},
{y5[1], y6[1], y7[1], y8[1]},
{y17[1], y18[1], y19[1], y20[1]},
{y25[1], y26[1], y27[1], y28[1]}} /. m]

Now more serious. You have

if (b > 0) {
w1 = w};
if (b < 0 & w == w1 + 100000) {
w2 = w1 + 100000;
FindRoot[{c, b}, {w, {w1, w2}}];
Print[ a, " " , z, " ", w, " ", b];
z = z + 0.2}

That sort of looks like you may have just made some manual changes for posting and that isn't really your original code. If really is what you are trying to do then that isn't Mathematica code. An attempt to translate that to Mathematica is

If[b > 0, w1 = w];
If[b < 0 && w == w1 + 100000,
w2 = w1 + 100000;
FindRoot[{c, b}, {w, {w1, w2}}];
Print[ a, " " , z, " ", w, " ", b];
z = z + 0.2
]

Mathematica uses {} and , and ; and If very differently from other programming languages.

Now we get to your error messages from FindRoot. Your first call to FindRoot is

FindRoot[{{-2.64486},-2.64486},{101000,{1000,101000}}]

If someone handed you that and asked you to find the root of that then what would you do?
There aren't any variables, it isn't a function of something that changes, it is just some nested constants.

Just for the very first one, what should the function be that you are trying to find a root of?

With that perhaps we can figure out what is going on.
 
Reem Hashem said:
Hello, I need someone to help me with mathematica

my aim in the code I wrote is to find the value of "w" with fixed values of "a" and "z" which makes the determante det =0 so I need bisection method to find the value of w ,then I thought to use FindRoot function but it did not work. So how to use FindRoot function in this regard.

this my code (attached)

I can recommend a way of solving your problem but you may not like it:

It's way too messy. You got what, 30 in there with nested loops? This is a programmer's issue. You have got to get in the habit of chopping your code down and getting a simple version of it working before you make it complex. Then once you have a simple version, gradually add complexity to it until you bring it back to your desired version. So if this was my code, I'd scale it down to say four equations, take out all the loops, and just get it working for one case. Then introduce a single loop and get it working, then add another loop and continue adding complexity until I bring it back to where I want it. No guarantee that will work as scaling it down may remove some essential feature you need but it often does work.
 

Similar threads

  • · Replies 3 ·
Replies
3
Views
3K
  • · Replies 5 ·
Replies
5
Views
4K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 5 ·
Replies
5
Views
2K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 3 ·
Replies
3
Views
4K
  • · Replies 2 ·
Replies
2
Views
2K