Our server costs ~$56 per month to run. Please consider donating or becoming a Patron to help keep the site running. Help us gain new members by following us on Twitter and liking our page on Facebook!
Current time: April 24, 2024, 12:28 am

Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Routh-Hurwitz Stability Criterion
#21
RE: Routh-Hurwitz Stability Criterion
With the help from people from forum.hr, I have modified the code of my program like this:
Code:
Function obrni_polinom() Which Returns Nothing Is Declared;

Function f(Integer16 i, Integer16 j) Which Returns Integer16 Does
  // Za pretvaranje indeksa dvodimenzionalnog polja u indeks jednodimenzionalnog
  // polja. Kada u svoj AEC compiler još nisam implementirao dvodimenzionalna
  // polja...
  Return 20 * i + j;
EndFunction

Function popuni_matricu() Which Returns Integer16 Does
  Integer16 broj_stupaca :=
              (stupanj_polinoma + 1) / 2 + mod(stupanj_polinoma + 1, 2),
            broj_redaka := stupanj_polinoma + 1;
  Integer16 i := 0;
  //Popunimo matricu prvo not-a-numbersima...
  While i < broj_redaka Loop
    Integer16 j := 0;
    While j < broj_stupaca Loop
      matrica[f(i, j)] := 0. / 0.;
      j += 1;
    EndWhile
    i += 1;
  EndWhile
  //Zatim idemo primjeniti Hurwitzov algoritam...
  i := 0;
  While i < broj_redaka Loop
    Integer16 j := 0;
    While j < broj_stupaca Loop
      If i = 0 Then // Prvi redak
        matrica[f(i, j)] := polinom[j * 2];
      ElseIf i = 1 Then // Drugi redak
        matrica[f(i, j)] := (j * 2 + 1 < stupanj_polinoma + 1) ?
                            polinom[j * 2 + 1] :
                            0;
      Else // Ostali reci...
        If matrica[f(i - 1, 0)] = 0 Then // Posebni slučajevi, kada se u prvom
                                         // stupcu matrice pojavi nula.
          If jesmo_li_obrnuli_polinom Then // Obrtanje polinoma nije "upalilo".
            Return 0;
          Else // Možda obrtanje polinoma "upali"...
            obrni_polinom(); // https://www.forum.hr/showpost.php?p=97955497&postcount=16
            jesmo_li_obrnuli_polinom := 1;
            Return popuni_matricu();
          EndIf
        EndIf
        matrica[f(i, j)] := (matrica[f(i - 1, 0)] *
                            (j + 1 < broj_stupaca ?
                             matrica[f(i - 2, j + 1)] : 0) -
                            (matrica[f(i - 2, 0)] *
                            (j + 1 < broj_stupaca ?
                             matrica[f(i - 1, j + 1)] : 0))) /
                            matrica[f(i - 1 , 0)];
      EndIf
      j += 1;
    EndWhile
    i += 1;
  EndWhile
  If matrica[f(broj_redaka - 1, 0)] = polinom[stupanj_polinoma] Then
    Return 1;
  EndIf
  Return 0;
EndFunction

Function broj_korijena_u_desnoj_poluravnini() Which Returns Integer16 Does
  Integer16 i := 1, brojac := 0;
  While i < stupanj_polinoma + 1 Loop
    brojac += not(signum(matrica[f(i, 0)]) = signum(matrica[f(i - 1, 0)]));
    i += 1;
  EndWhile
  Return brojac;
EndFunction

Function obrni_polinom() Which Returns Nothing Does
  Decimal64 pomocni_polinom[20];
  Integer16 i := 0, j := stupanj_polinoma;
  While i < stupanj_polinoma + 1 Loop
    pomocni_polinom[i] := polinom[j];
    i += 1;
    j -= 1;
  EndWhile
  i := 0;
  While i < stupanj_polinoma + 1 Loop
    polinom[i] := pomocni_polinom[i];
    i += 1;
  EndWhile
EndFunction
It seems to work so far.

So, we can focus on my second question: How can I solve the preparation for the laboratory exercise that is asking to calculate the range (interval) of gain for which the system will be stable using both the Hurwitz'es Criterion and the Bode's Criterion? Neither the Hurwitz'es Criterion nor the Bode's Criterion give us ranges. Hurwitz'es Criterion gives us the number of poles on the right-hand-side of the imaginary axis, which is always zero for stable systems. Bode's Criterion gives us, for stable systems, the Amplitude Security and Phase Security. Can you somehow calculate the range of gain for which the system is stable using Amplitude Security and Phase Security? I don't know.
Reply
#22
RE: Routh-Hurwitz Stability Criterion
No one here cares.

Stop coming here to get help with your schoolwork.
  
“If you are the smartest person in the room, then you are in the wrong room.” — Confucius
                                      
Reply
#23
RE: Routh-Hurwitz Stability Criterion
(April 22, 2023 at 9:24 am)FlatAssembler Wrote: With the help from people from forum.hr, I have modified the code of my program like this:
[hide]
Code:
Function obrni_polinom() Which Returns Nothing Is Declared;

Function f(Integer16 i, Integer16 j) Which Returns Integer16 Does
 // Za pretvaranje indeksa dvodimenzionalnog polja u indeks jednodimenzionalnog
 // polja. Kada u svoj AEC compiler još nisam implementirao dvodimenzionalna
 // polja...
 Return 20 * i + j;
EndFunction

Function popuni_matricu() Which Returns Integer16 Does
 Integer16 broj_stupaca :=
             (stupanj_polinoma + 1) / 2 + mod(stupanj_polinoma + 1, 2),
           broj_redaka := stupanj_polinoma + 1;
 Integer16 i := 0;
 //Popunimo matricu prvo not-a-numbersima...
 While i < broj_redaka Loop
   Integer16 j := 0;
   While j < broj_stupaca Loop
     matrica[f(i, j)] := 0. / 0.;
     j += 1;
   EndWhile
   i += 1;
 EndWhile
 //Zatim idemo primjeniti Hurwitzov algoritam...
 i := 0;
 While i < broj_redaka Loop
   Integer16 j := 0;
   While j < broj_stupaca Loop
     If i = 0 Then // Prvi redak
       matrica[f(i, j)] := polinom[j * 2];
     ElseIf i = 1 Then // Drugi redak
       matrica[f(i, j)] := (j * 2 + 1 < stupanj_polinoma + 1) ?
                           polinom[j * 2 + 1] :
                           0;
     Else // Ostali reci...
       If matrica[f(i - 1, 0)] = 0 Then // Posebni slučajevi, kada se u prvom
                                        // stupcu matrice pojavi nula.
         If jesmo_li_obrnuli_polinom Then // Obrtanje polinoma nije "upalilo".
           Return 0;
         Else // Možda obrtanje polinoma "upali"...
           obrni_polinom(); // https://www.forum.hr/showpost.php?p=97955497&postcount=16
           jesmo_li_obrnuli_polinom := 1;
           Return popuni_matricu();
         EndIf
       EndIf
       matrica[f(i, j)] := (matrica[f(i - 1, 0)] *
                           (j + 1 < broj_stupaca ?
                            matrica[f(i - 2, j + 1)] : 0) -
                           (matrica[f(i - 2, 0)] *
                           (j + 1 < broj_stupaca ?
                            matrica[f(i - 1, j + 1)] : 0))) /
                           matrica[f(i - 1 , 0)];
     EndIf
     j += 1;
   EndWhile
   i += 1;
 EndWhile
 If matrica[f(broj_redaka - 1, 0)] = polinom[stupanj_polinoma] Then
   Return 1;
 EndIf
 Return 0;
EndFunction

Function broj_korijena_u_desnoj_poluravnini() Which Returns Integer16 Does
 Integer16 i := 1, brojac := 0;
 While i < stupanj_polinoma + 1 Loop
   brojac += not(signum(matrica[f(i, 0)]) = signum(matrica[f(i - 1, 0)]));
   i += 1;
 EndWhile
 Return brojac;
EndFunction

Function obrni_polinom() Which Returns Nothing Does
 Decimal64 pomocni_polinom[20];
 Integer16 i := 0, j := stupanj_polinoma;
 While i < stupanj_polinoma + 1 Loop
   pomocni_polinom[i] := polinom[j];
   i += 1;
   j -= 1;
 EndWhile
 i := 0;
 While i < stupanj_polinoma + 1 Loop
   polinom[i] := pomocni_polinom[i];
   i += 1;
 EndWhile
EndFunction
Thief and assassin for hire. Member in good standing of the Rogues Guild.
Reply
#24
RE: Routh-Hurwitz Stability Criterion
(April 22, 2023 at 9:28 am)arewethereyet Wrote: No one here cares.

Stop coming here to get help with your schoolwork.

Wow, the community here is so toxic...
Reply
#25
RE: Routh-Hurwitz Stability Criterion
(April 22, 2023 at 9:24 am)FlatAssembler Wrote: With the help from people from forum.hr, I have modified the code of my program like this:
Code:
Function obrni_polinom() Which Returns Nothing Is Declared;

Function f(Integer16 i, Integer16 j) Which Returns Integer16 Does
 // Za pretvaranje indeksa dvodimenzionalnog polja u indeks jednodimenzionalnog
 // polja. Kada u svoj AEC compiler još nisam implementirao dvodimenzionalna
 // polja...
 Return 20 * i + j;
EndFunction

Function popuni_matricu() Which Returns Integer16 Does
 Integer16 broj_stupaca :=
             (stupanj_polinoma + 1) / 2 + mod(stupanj_polinoma + 1, 2),
           broj_redaka := stupanj_polinoma + 1;
 Integer16 i := 0;
 //Popunimo matricu prvo not-a-numbersima...
 While i < broj_redaka Loop
   Integer16 j := 0;
   While j < broj_stupaca Loop
     matrica[f(i, j)] := 0. / 0.;
     j += 1;
   EndWhile
   i += 1;
 EndWhile
 //Zatim idemo primjeniti Hurwitzov algoritam...
 i := 0;
 While i < broj_redaka Loop
   Integer16 j := 0;
   While j < broj_stupaca Loop
     If i = 0 Then // Prvi redak
       matrica[f(i, j)] := polinom[j * 2];
     ElseIf i = 1 Then // Drugi redak
       matrica[f(i, j)] := (j * 2 + 1 < stupanj_polinoma + 1) ?
                           polinom[j * 2 + 1] :
                           0;
     Else // Ostali reci...
       If matrica[f(i - 1, 0)] = 0 Then // Posebni slučajevi, kada se u prvom
                                        // stupcu matrice pojavi nula.
         If jesmo_li_obrnuli_polinom Then // Obrtanje polinoma nije "upalilo".
           Return 0;
         Else // Možda obrtanje polinoma "upali"...
           obrni_polinom(); // https://www.forum.hr/showpost.php?p=97955497&postcount=16
           jesmo_li_obrnuli_polinom := 1;
           Return popuni_matricu();
         EndIf
       EndIf
       matrica[f(i, j)] := (matrica[f(i - 1, 0)] *
                           (j + 1 < broj_stupaca ?
                            matrica[f(i - 2, j + 1)] : 0) -
                           (matrica[f(i - 2, 0)] *
                           (j + 1 < broj_stupaca ?
                            matrica[f(i - 1, j + 1)] : 0))) /
                           matrica[f(i - 1 , 0)];
     EndIf
     j += 1;
   EndWhile
   i += 1;
 EndWhile
 If matrica[f(broj_redaka - 1, 0)] = polinom[stupanj_polinoma] Then
   Return 1;
 EndIf
 Return 0;
EndFunction

Function broj_korijena_u_desnoj_poluravnini() Which Returns Integer16 Does
 Integer16 i := 1, brojac := 0;
 While i < stupanj_polinoma + 1 Loop
   brojac += not(signum(matrica[f(i, 0)]) = signum(matrica[f(i - 1, 0)]));
   i += 1;
 EndWhile
 Return brojac;
EndFunction

Function obrni_polinom() Which Returns Nothing Does
 Decimal64 pomocni_polinom[20];
 Integer16 i := 0, j := stupanj_polinoma;
 While i < stupanj_polinoma + 1 Loop
   pomocni_polinom[i] := polinom[j];
   i += 1;
   j -= 1;
 EndWhile
 i := 0;
 While i < stupanj_polinoma + 1 Loop
   polinom[i] := pomocni_polinom[i];
   i += 1;
 EndWhile
EndFunction
It seems to work so far.

So, we can focus on my second question: How can I solve the preparation for the laboratory exercise that is asking to calculate the range (interval) of gain for which the system will be stable using both the Hurwitz'es Criterion and the Bode's Criterion? Neither the Hurwitz'es Criterion nor the Bode's Criterion give us ranges. Hurwitz'es Criterion gives us the number of poles on the right-hand-side of the imaginary axis, which is always zero for stable systems. Bode's Criterion gives us, for stable systems, the Amplitude Security and Phase Security. Can you somehow calculate the range of gain for which the system is stable using Amplitude Security and Phase Security? I don't know.

What’s this ‘we’ stuff? You have a mouse in your pocket or something?

Boru
‘But it does me no injury for my neighbour to say there are twenty gods or no gods. It neither picks my pocket nor breaks my leg.’ - Thomas Jefferson
Reply
#26
RE: Routh-Hurwitz Stability Criterion
(April 22, 2023 at 9:24 am)FlatAssembler Wrote: With the help from people from forum.hr, I have modified the code of my program like this:
Code:
Function obrni_polinom() Which Returns Nothing Is Declared;

Function f(Integer16 i, Integer16 j) Which Returns Integer16 Does
  // Za pretvaranje indeksa dvodimenzionalnog polja u indeks jednodimenzionalnog
  // polja. Kada u svoj AEC compiler još nisam implementirao dvodimenzionalna
  // polja...
  Return 20 * i + j;
EndFunction

Function popuni_matricu() Which Returns Integer16 Does
  Integer16 broj_stupaca :=
              (stupanj_polinoma + 1) / 2 + mod(stupanj_polinoma + 1, 2),
            broj_redaka := stupanj_polinoma + 1;
  Integer16 i := 0;
  //Popunimo matricu prvo not-a-numbersima...
  While i < broj_redaka Loop
    Integer16 j := 0;
    While j < broj_stupaca Loop
      matrica[f(i, j)] := 0. / 0.;
      j += 1;
    EndWhile
    i += 1;
  EndWhile
  //Zatim idemo primjeniti Hurwitzov algoritam...
  i := 0;
  While i < broj_redaka Loop
    Integer16 j := 0;
    While j < broj_stupaca Loop
      If i = 0 Then // Prvi redak
        matrica[f(i, j)] := polinom[j * 2];
      ElseIf i = 1 Then // Drugi redak
        matrica[f(i, j)] := (j * 2 + 1 < stupanj_polinoma + 1) ?
                            polinom[j * 2 + 1] :
                            0;
      Else // Ostali reci...
        If matrica[f(i - 1, 0)] = 0 Then // Posebni slučajevi, kada se u prvom
                                         // stupcu matrice pojavi nula.
          If jesmo_li_obrnuli_polinom Then // Obrtanje polinoma nije "upalilo".
            Return 0;
          Else // Možda obrtanje polinoma "upali"...
            obrni_polinom(); // https://www.forum.hr/showpost.php?p=97955497&postcount=16
            jesmo_li_obrnuli_polinom := 1;
            Return popuni_matricu();
          EndIf
        EndIf
        matrica[f(i, j)] := (matrica[f(i - 1, 0)] *
                            (j + 1 < broj_stupaca ?
                             matrica[f(i - 2, j + 1)] : 0) -
                            (matrica[f(i - 2, 0)] *
                            (j + 1 < broj_stupaca ?
                             matrica[f(i - 1, j + 1)] : 0))) /
                            matrica[f(i - 1 , 0)];
      EndIf
      j += 1;
    EndWhile
    i += 1;
  EndWhile
  If matrica[f(broj_redaka - 1, 0)] = polinom[stupanj_polinoma] Then
    Return 1;
  EndIf
  Return 0;
EndFunction

Function broj_korijena_u_desnoj_poluravnini() Which Returns Integer16 Does
  Integer16 i := 1, brojac := 0;
  While i < stupanj_polinoma + 1 Loop
    brojac += not(signum(matrica[f(i, 0)]) = signum(matrica[f(i - 1, 0)]));
    i += 1;
  EndWhile
  Return brojac;
EndFunction

Function obrni_polinom() Which Returns Nothing Does
  Decimal64 pomocni_polinom[20];
  Integer16 i := 0, j := stupanj_polinoma;
  While i < stupanj_polinoma + 1 Loop
    pomocni_polinom[i] := polinom[j];
    i += 1;
    j -= 1;
  EndWhile
  i := 0;
  While i < stupanj_polinoma + 1 Loop
    polinom[i] := pomocni_polinom[i];
    i += 1;
  EndWhile
EndFunction
It seems to work so far.

So, we can focus on my second question: How can I solve the preparation for the laboratory exercise that is asking to calculate the range (interval) of gain for which the system will be stable using both the Hurwitz'es Criterion and the Bode's Criterion? Neither the Hurwitz'es Criterion nor the Bode's Criterion give us ranges. Hurwitz'es Criterion gives us the number of poles on the right-hand-side of the imaginary axis, which is always zero for stable systems. Bode's Criterion gives us, for stable systems, the Amplitude Security and Phase Security. Can you somehow calculate the range of gain for which the system is stable using Amplitude Security and Phase Security? I don't know.

If you ping the Hysenberg criterion with a quantum filiment while goosing the Wilhelm Integer through a Vorpal Complexitor, you'll be able to vector the nunning-Brewger Bridge on the 7th rotation.

And, if done correctly, you can also save the life of Kaiser Wilhelm thus preventing WW1.
Dying to live, living to die.
Reply
#27
RE: Routh-Hurwitz Stability Criterion
(April 25, 2023 at 1:03 pm)BrianSoddingBoru4 Wrote:
(April 22, 2023 at 9:24 am)FlatAssembler Wrote: With the help from people from forum.hr, I have modified the code of my program like this:
Code:
Function obrni_polinom() Which Returns Nothing Is Declared;

Function f(Integer16 i, Integer16 j) Which Returns Integer16 Does
 // Za pretvaranje indeksa dvodimenzionalnog polja u indeks jednodimenzionalnog
 // polja. Kada u svoj AEC compiler još nisam implementirao dvodimenzionalna
 // polja...
 Return 20 * i + j;
EndFunction

Function popuni_matricu() Which Returns Integer16 Does
 Integer16 broj_stupaca :=
             (stupanj_polinoma + 1) / 2 + mod(stupanj_polinoma + 1, 2),
           broj_redaka := stupanj_polinoma + 1;
 Integer16 i := 0;
 //Popunimo matricu prvo not-a-numbersima...
 While i < broj_redaka Loop
   Integer16 j := 0;
   While j < broj_stupaca Loop
     matrica[f(i, j)] := 0. / 0.;
     j += 1;
   EndWhile
   i += 1;
 EndWhile
 //Zatim idemo primjeniti Hurwitzov algoritam...
 i := 0;
 While i < broj_redaka Loop
   Integer16 j := 0;
   While j < broj_stupaca Loop
     If i = 0 Then // Prvi redak
       matrica[f(i, j)] := polinom[j * 2];
     ElseIf i = 1 Then // Drugi redak
       matrica[f(i, j)] := (j * 2 + 1 < stupanj_polinoma + 1) ?
                           polinom[j * 2 + 1] :
                           0;
     Else // Ostali reci...
       If matrica[f(i - 1, 0)] = 0 Then // Posebni slučajevi, kada se u prvom
                                        // stupcu matrice pojavi nula.
         If jesmo_li_obrnuli_polinom Then // Obrtanje polinoma nije "upalilo".
           Return 0;
         Else // Možda obrtanje polinoma "upali"...
           obrni_polinom(); // https://www.forum.hr/showpost.php?p=97955497&postcount=16
           jesmo_li_obrnuli_polinom := 1;
           Return popuni_matricu();
         EndIf
       EndIf
       matrica[f(i, j)] := (matrica[f(i - 1, 0)] *
                           (j + 1 < broj_stupaca ?
                            matrica[f(i - 2, j + 1)] : 0) -
                           (matrica[f(i - 2, 0)] *
                           (j + 1 < broj_stupaca ?
                            matrica[f(i - 1, j + 1)] : 0))) /
                           matrica[f(i - 1 , 0)];
     EndIf
     j += 1;
   EndWhile
   i += 1;
 EndWhile
 If matrica[f(broj_redaka - 1, 0)] = polinom[stupanj_polinoma] Then
   Return 1;
 EndIf
 Return 0;
EndFunction

Function broj_korijena_u_desnoj_poluravnini() Which Returns Integer16 Does
 Integer16 i := 1, brojac := 0;
 While i < stupanj_polinoma + 1 Loop
   brojac += not(signum(matrica[f(i, 0)]) = signum(matrica[f(i - 1, 0)]));
   i += 1;
 EndWhile
 Return brojac;
EndFunction

Function obrni_polinom() Which Returns Nothing Does
 Decimal64 pomocni_polinom[20];
 Integer16 i := 0, j := stupanj_polinoma;
 While i < stupanj_polinoma + 1 Loop
   pomocni_polinom[i] := polinom[j];
   i += 1;
   j -= 1;
 EndWhile
 i := 0;
 While i < stupanj_polinoma + 1 Loop
   polinom[i] := pomocni_polinom[i];
   i += 1;
 EndWhile
EndFunction
It seems to work so far.

So, we can focus on my second question: How can I solve the preparation for the laboratory exercise that is asking to calculate the range (interval) of gain for which the system will be stable using both the Hurwitz'es Criterion and the Bode's Criterion? Neither the Hurwitz'es Criterion nor the Bode's Criterion give us ranges. Hurwitz'es Criterion gives us the number of poles on the right-hand-side of the imaginary axis, which is always zero for stable systems. Bode's Criterion gives us, for stable systems, the Amplitude Security and Phase Security. Can you somehow calculate the range of gain for which the system is stable using Amplitude Security and Phase Security? I don't know.

What’s this ‘we’ stuff? You have a mouse in your pocket or something?

Boru

I mean, I and people who are willing to help me.
Reply
#28
RE: Routh-Hurwitz Stability Criterion
(April 26, 2023 at 10:20 am)FlatAssembler Wrote:
(April 25, 2023 at 1:03 pm)BrianSoddingBoru4 Wrote: What’s this ‘we’ stuff? You have a mouse in your pocket or something?

Boru

I mean, I and people who are willing to help me.

Why don't you simply do your own work instead of cheating your way through?

Do your professors know you pass off the work of others as your own?
Thief and assassin for hire. Member in good standing of the Rogues Guild.
Reply
#29
RE: Routh-Hurwitz Stability Criterion
In case you are interested in how this reversing the polynomial trick that has been explained to me on forum.hr works, here is a simple explanation: https://math.stackexchange.com/a/4689107/791819
Reply
#30
RE: Routh-Hurwitz Stability Criterion
(April 29, 2023 at 5:30 pm)FlatAssembler Wrote: In case you are interested in how this reversing the polynomial trick that has been explained to me on forum.hr works, here is a simple explanation: https://math.stackexchange.com/a/4689107/791819

I’m not.

Boru
‘But it does me no injury for my neighbour to say there are twenty gods or no gods. It neither picks my pocket nor breaks my leg.’ - Thomas Jefferson
Reply





Users browsing this thread: 1 Guest(s)