Polynomial regression: Difference between revisions

Content added Content deleted
(Added AutoHotkey)
m (→‎{{header|FreeBASIC}}: fixed indent + removed empty lines)
Line 750: Line 750:
=={{header|FreeBASIC}}==
=={{header|FreeBASIC}}==
General regressions for different polynomials, here it is for degree 2, (3 terms).
General regressions for different polynomials, here it is for degree 2, (3 terms).
<lang FreeBASIC>
<lang FreeBASIC>#Include "crt.bi" 'for rounding only

#include "crt.bi" 'for rounding only


Type vector
Type vector
Line 769: Line 766:
'mult operators
'mult operators
Operator *(m1 As matrix,m2 As matrix) As matrix
Operator *(m1 As matrix,m2 As matrix) As matrix
Dim rows As Integer=Ubound(m1.element,1)
Dim rows As Integer=Ubound(m1.element,1)
Dim columns As Integer=Ubound(m2.element,2)
Dim columns As Integer=Ubound(m2.element,2)
If Ubound(m1.element,2)<>Ubound(m2.element,1) Then
If Ubound(m1.element,2)<>Ubound(m2.element,1) Then
Print "Can't do"
Print "Can't do"
Exit Operator
Exit Operator
End If
End If
Dim As matrix ans
Dim As matrix ans
Redim ans.element(rows,columns)
Redim ans.element(rows,columns)
Dim rxc As Double
Dim rxc As Double
For r As Integer=1 To rows
For r As Integer=1 To rows
For c As Integer=1 To columns
For c As Integer=1 To columns
rxc=0
For k As Integer = 1 To Ubound(m1.element,2)
rxc=rxc+m1.element(r,k)*m2.element(k,c)
Next k
ans.element(r,c)=rxc
Next c
Next r
Operator= ans
End Operator

Operator *(m1 As matrix,m2 As vector) As vector
Dim rows As Integer=Ubound(m1.element,1)
Dim columns As Integer=Ubound(m2.element,2)
If Ubound(m1.element,2)<>Ubound(m2.element) Then
Print "Can't do"
Exit Operator
End If
Dim As vector ans
Redim ans.element(rows)
Dim rxc As Double
For r As Integer=1 To rows
rxc=0
rxc=0
For k As Integer = 1 To Ubound(m1.element,2)
For k As Integer = 1 To Ubound(m1.element,2)
rxc=rxc+m1.element(r,k)*m2.element(k,c)
rxc=rxc+m1.element(r,k)*m2.element(k)
Next k
Next k
ans.element(r,c)=rxc
ans.element(r)=rxc
Next c
Next r
Operator= ans
Next r
Operator= ans
End Operator

Operator *(m1 As matrix,m2 As vector) As vector
Dim rows As Integer=Ubound(m1.element,1)
Dim columns As Integer=Ubound(m2.element,2)
If Ubound(m1.element,2)<>Ubound(m2.element) Then
Print "Can't do"
Exit Operator
End If
Dim As vector ans
Redim ans.element(rows)
Dim rxc As Double
For r As Integer=1 To rows
rxc=0
For k As Integer = 1 To Ubound(m1.element,2)
rxc=rxc+m1.element(r,k)*m2.element(k)
Next k
ans.element(r)=rxc
Next r
Operator= ans
End Operator
End Operator


Line 826: Line 823:
Dim As matrix b=This
Dim As matrix b=This
#macro pivot(num)
#macro pivot(num)
For p1 As Integer = num To n - 1
For p1 As Integer = num To n - 1
For p2 As Integer = p1 + 1 To n
For p2 As Integer = p1 + 1 To n
If Abs(b.element(p1,num))<Abs(b.element(p2,num)) Then
If Abs(b.element(p1,num))<Abs(b.element(p2,num)) Then
Swap r.element(p1),r.element(p2)
Swap r.element(p1),r.element(p2)
For g As Integer=1 To n
For g As Integer=1 To n
Swap b.element(p1,g),b.element(p2,g)
Swap b.element(p1,g),b.element(p2,g)
Next g
Next g
End If
End If
Next p2
Next p2
Next p1
Next p1
#endmacro
#endmacro
For k As Integer=1 To n-1
For k As Integer=1 To n-1
Line 926: Line 923:
If n<3 Then g="" Else g="^"+Str(n-1)
If n<3 Then g="" Else g="^"+Str(n-1)
if val(cround(a(n),places))<>0 then
if val(cround(a(n),places))<>0 then
s+= Iif(Sgn(a(n))>=0,"+","")+cround(a(n),places)+ Iif(n=Lbound(a),"","*x"+g)+" "
s+= Iif(Sgn(a(n))>=0,"+","")+cround(a(n),places)+ Iif(n=Lbound(a),"","*x"+g)+" "
end if
end if
Next n
Next n
Line 937: Line 934:


Redim As Double ans()
Redim As Double ans()
regress(x(),y(),ans(),3)
regress(x(),y(),ans(),3)

print show(ans())
print show(ans())
sleep
sleep</lang>
</lang>
{{out}}
{{out}}
<pre>+1 +2*x +3*x^2</pre>
<pre>
+1 +2*x +3*x^2
</pre>


=={{header|GAP}}==
=={{header|GAP}}==