Equazioni numeri complessi in Ch

alecxio
Salve, sto provando a creare un programma, in formato Ch, che mi risolva la seguente equazione complessa:
$ L1e^{itheta1} + L2 e^{itheta2} + L3e^{itheta3} + L4e^{itheta4}=0 $

Sono note le grandezze L1, L2, L3, L4 e l'angolo $ theta4 $ pari a $ pi $ .

Devo cercare di studiare il tutto in funzione dell'angolo $ theta1 $ che deve compiere rotazioni da 0 a 360 gradi.

Ho provato quindi a risolvere il seguente problema arrivando a scrivere il codice che riporto qui sotto:

#include <math.h>
#include <array.h>
#include <stdio.h>
#include <chplot.h>


int main () {

  int n1, n2;
  int nstep=360;
  array double theta1[nstep]; 
  array complex z3[nstep], num[nstep], x1[nstep], x2[nstep], x3[nstep], x4[nstep];
  double theta_or_r1, theta_or_r2, t2;
  complex error;
  int i=0;  
    
       for(t2=0;t2<=nstep-1;t2=t2+1){
            theta1[i]=M_PI*t2/180;
            
            theta_or_r1 = 2.3812; 
            theta_or_r2 = 2.2361;
            z3[i] = polar(1,0)-polar(1.8778*cos(theta1[i]),1.8778*sin(theta1[i]));
            i=i+1;  
       }
 
  /* problem (2), n1 = 2, n2 = 4 */
  n1 = 2, 
  n2 = 4;
  num[i] = complexsolve(n1, n2, theta_or_r1, theta_or_r2, z3, x1[i], x2[i], x3[i], x4[i]);
  printf("For n1=2, n2=4, the number of solution is = %d\n", num);
  printf("phi1 = %f phi2 = %f\n", x1, x2);
  printf("phi1 = %f phi2 = %f\n", x3, x4);
  
  printf (theta1);
  
}

Il codice è sbagliato ma non riesco a capire dove. :oops: :cry:
Molto probabilmente starò facendo una grossa cavolata da qualche parte ma non so dove, l'unica cosa che mi è venuta in mente è che in complexsolve gli arrey vengono inseriti in modo diverso da come ho fatto io o che non abbia senso definire arrey complex.
Vi ringrazio in anticipo per l'attenzione.

Risposte
vict85
n1 = 2 ;

Prova ora...

alecxio
Grazie per il tentativo ma il complexsolve li vuole la virgola, con n1=2 viene indicata la posizione della variabile che deve calcolare ossia l'esponente del primo numero complesso.

Rggb1
Il codice è sbagliato ma non riesco a capire dove.

Come fai a dirlo? Ottieni risultati errati? Puoi sapere quanto errati oppure sono palesemente errati?
Giustifica meglio questa affermazione.

alecxio
Mi printa un a schermata di risposta di questo tipo :
"For n1=2, n2=4, the number of solution is = complex(z,z)" mentre io come risposta vorrei i valori di $ theta2 $ e $ theta3 $ al variare di $ theta1 $

Rggb1
Eh si sembra ti manchi un ciclo... ;)

Comunque 'num' è un array, che passi ad una printf(). In Ch puoi farlo ed ha senso farlo? A quanto vedo dall'output della printf(), direi di no.

Credo tu abbia da revisionare il tuo codice un po'. Non è che hai fatto copiancolla da un'altra parte senza sapere bene cosa facevi?

alecxio
No non ho fatto il copia incolla perchè non sono riuscito a trovare nulla su internet, comunque ho sistemato il codice ed ora funziona quasi del tutto l'unico problema che mi resta da risolvere è che mi restituisce valori negativi dell'angolo (ad esempio se l'angolo fosse di 110° mi printa il valore -110°) per il resto sono riuscito a farlo girare. :)
Il problema maggiore era nel fatto che dovevo dichiarare "num" come int invece che come array complex.

Se volete posso printare il nuovo codice corretto...

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.