Advertisement
Guest User

Untitled

a guest
Jan 16th, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.26 KB | None | 0 0
  1. let solve3 (np: normalized_polynomial) : (float * float option * float option) option =
  2.  
  3.  
  4. let extract p =
  5. match np with
  6. NormalizedPolynomial(p) -> p
  7. let array = extract np // applico la funzione extract al polinomio normalizzato in input
  8. let d = float(float(array.[0].N)/float(array.[0].D)) // accedo alla posizione 0 del vettore considerando 0 come il grado dell'equazione e quindi assegno a zero il coefficente del grado 0 , divido numeratore per il denominatore in modo da ottenere un numero float
  9. let c = float(float(array.[1].N)/float(array.[1].D)) // accedo alla posizione 1 del vettore considerando 1 come il grado dell'equazione e quindi assegno a one il coefficente del grado 1 , divido numeratore per il denominatore in modo da ottenere un numero float
  10. let b = float(float(array.[2].N)/float(array.[2].D)) // accedo alla posizione 2 del vettore considerando 2 come il grado dell'equazione e quindi assegno a two il coefficente del grado 2 , divido numeratore per il denominatore in modo da ottenere un numero float
  11. let a = float(float(array.[3].N)/float(array.[3].D)) // accedo alla posizione 3 del vettore considerando 3 come grado dell'equazione e quindi assegno a three il coefficiente del grado 3, dividendo numeratore per denoinatore in modo da ottenere un numero float.
  12. let f = ((3.*c/a)-((b*b)/(a*a)))/3.
  13. let g = ((2.*(b*b*b))/(a*a*a))-((9.*b*c)/(a*a))+(27.*d/a)
  14. let h = ((g*g)/4.)+((f*f*f)/27.)
  15. if h>0. then
  16. let r = (-1.*(g)/2.)+ Math.Pow(h,0.5)
  17. let s = Math.Pow(r,1./3.)
  18. let t = (-1.*(g)/2.)- Math.Pow(h,0.5)
  19. let u = Math.Pow(t,1./3.)
  20. let x1= (s+u)-(b/3.*a)
  21. Some(x1,None,None)
  22.  
  23. elif (h=0.) &&(g=0.) &&(f=0.) then
  24. let x1 = Math.Pow((d/a),1./3.)
  25. Some(x1,Some x1,Some x1)
  26.  
  27. elif(h<=0.) then
  28. let i= Math.Pow((((g*g)/4.)- h),0.5)
  29. let j= Math.Pow(i,1./3.)
  30. let k= Math.Acos(-1.*(g/(2.*i)))
  31. let l = j*(-(1.))
  32. let m =Math.Cos(k/3.)
  33. let n = Math.Pow(3.,0.5)*Math.Sin(k/3.)
  34. let p=(b/3.*a)*(-1.)
  35. let x1= (2.*m) -(b/3.*a)
  36. let x2= l*(m+n)+p
  37. let x3= l*(m-n)+p
  38. Some(x1,Some x2,Some x3)
  39. else
  40. Some(None,None,None)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement