src/polyfit.cpp

Sat, 08 Jun 2024 15:54:30 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Sat, 08 Jun 2024 15:54:30 +0200
changeset 527
84091b9cb800
parent 508
7f2ec2bc9d2e
permissions
-rw-r--r--

Version 0.4.6a1. Added HLT equipment volume and deadspace settings. In EditProduct the target water selection is now sticky. Changed the water treatment tab. Added a row wich displays the salt adjustments. This can be selected between actual and target values. The treated water show can select between mash or sparge water. The total line will become the final water in the boil kettle. Database update function is expanded with the new settings. Added a popup message warning that the database is upgraded and user action is required for the equipment profiles.

508
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1 /**
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2 * @brief Simple polynomial fitting functions.
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
3 * @file polyfit.cpp
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
4 * @autor Henry M. Forson, Melbourne, Florida USA
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
5 *
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
6 *------------------------------------------------------------------------------------
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
7 * MIT License
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
8 *
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
9 * Copyright (c) 2020 Henry M. Forson
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
10 *
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
11 * Permission is hereby granted, free of charge, to any person obtaining a copy
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
12 * of this software and associated documentation files (the "Software"), to deal
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
13 * in the Software without restriction, including without limitation the rights
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
14 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
15 * copies of the Software, and to permit persons to whom the Software is
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
16 * furnished to do so, subject to the following conditions:
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
17 *
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
18 * The above copyright notice and this permission notice shall be included in all
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
19 * copies or substantial portions of the Software.
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
20 *
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
22 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
23 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
24 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
25 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
26 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
27 * SOFTWARE.
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
28 *------------------------------------------------------------------------------------
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
29 */
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
30
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
31 #include "polyfit.h"
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
32
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
33 #include <QDebug>
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
34 #include <math.h>
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
35
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
36
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
37
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
38 // Structure of a matrix.
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
39 typedef struct matrix_s
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
40 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
41 int rows;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
42 int cols;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
43 double *pContents;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
44 } matrix_t;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
45
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
46 // MACRO to access a value with a matrix.
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
47 #define MATRIX_VALUE_PTR( pA, row, col ) (&(((pA)->pContents)[ (row * (pA)->cols) + col]))
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
48
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
49
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
50 //------------------------------------------------
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
51 // Private Function Prototypes
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
52 //------------------------------------------------
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
53
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
54 static matrix_t * createMatrix( int rows, int cols );
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
55 static void destroyMatrix( matrix_t *pMat );
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
56 static matrix_t * createTranspose( matrix_t *pMat );
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
57 static matrix_t * createProduct( matrix_t *pLeft, matrix_t *pRight );
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
58
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
59
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
60 //=========================================================
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
61 // Global function definitions
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
62 //=========================================================
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
63
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
64
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
65 //--------------------------------------------------------
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
66 // polyfit()
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
67 // Computes polynomial coefficients that best fit a set
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
68 // of input points.
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
69 //
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
70 // The degree of the fitted polynomial is one less than
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
71 // the count of elements in the polynomial vector.
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
72 //
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
73 // Uses matrix algebra of the form:
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
74 // A * x = b
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
75 // To solve the MLS equation:
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
76 // (AT) * A * x = (AT) * b
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
77 // where (AT) is the transpose of A.
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
78 //
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
79 // If the n+1 input points are {(x0, y0), (x1, y1), ... (xn, yn)},
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
80 // then the i'th row of A is: {(xi)^0, (xi)^1, ... (xn)^n},
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
81 // and the i'th row of b is: {yi}.
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
82 //
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
83 // Returns 0 if success,
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
84 // -1 if passed a NULL pointer,
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
85 // -2 if (pointCount < coefficientCount),
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
86 // -3 if unable to allocate memory,
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
87 // -4 if unable to solve equations.
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
88 //--------------------------------------------------------
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
89 //int polyfit( int pointCount, point_t pointArray[], int coeffCount, double coeffArray[] )
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
90 int Polyfit::polyfit( int pointCount, double *xValues, double *yValues, int coefficientCount, double *coefficientResults )
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
91 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
92 int rVal = 0;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
93 int degree = coefficientCount - 1;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
94
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
95 // Check that the input pointers aren't null.
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
96 if( (NULL == xValues) || (NULL == yValues) || (NULL == coefficientResults) )
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
97 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
98 return -1;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
99 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
100 // Check that pointCount >= coefficientCount.
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
101 if(pointCount < coefficientCount)
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
102 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
103 return -2;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
104 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
105
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
106 // Make the A matrix:
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
107 matrix_t *pMatA = createMatrix( pointCount, coefficientCount );
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
108 if( NULL == pMatA)
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
109 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
110 return -3;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
111 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
112
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
113 for( int r = 0; r < pointCount; r++)
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
114 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
115 for( int c = 0; c < coefficientCount; c++)
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
116 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
117 *(MATRIX_VALUE_PTR(pMatA, r, c)) = powl((xValues[r]), (double) (degree -c));
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
118 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
119 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
120
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
121 // Make the b matrix
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
122 matrix_t *pMatB = createMatrix( pointCount, 1);
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
123 if( NULL == pMatB )
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
124 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
125 return -3;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
126 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
127
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
128 for( int r = 0; r < pointCount; r++)
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
129 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
130 *(MATRIX_VALUE_PTR(pMatB, r, 0)) = yValues[r];
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
131 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
132
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
133 // Make the transpose of matrix A
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
134 matrix_t * pMatAT = createTranspose( pMatA );
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
135 if( NULL == pMatAT )
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
136 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
137 return -3;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
138 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
139
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
140 // Make the product of matrices AT and A:
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
141 matrix_t *pMatATA = createProduct( pMatAT, pMatA );
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
142 if( NULL == pMatATA )
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
143 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
144 return -3;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
145 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
146
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
147 // Make the product of matrices AT and b:
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
148 matrix_t *pMatATB = createProduct( pMatAT, pMatB );
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
149 if( NULL == pMatATB )
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
150 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
151 return -3;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
152 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
153
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
154 // Now we need to solve the system of linear equations,
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
155 // (AT)Ax = (AT)b for "x", the coefficients of the polynomial.
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
156
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
157 for( int c = 0; c < pMatATA->cols; c++ )
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
158 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
159 int pr = c; // pr is the pivot row.
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
160 double prVal = *MATRIX_VALUE_PTR(pMatATA, pr, c);
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
161 // If it's zero, we can't solve the equations.
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
162 if( 0.0 == prVal )
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
163 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
164 // printf( "Unable to solve equations, pr = %d, c = %d.\n", pr, c );
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
165 rVal = -4;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
166 break;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
167 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
168 for( int r = 0; r < pMatATA->rows; r++)
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
169 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
170 if( r != pr )
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
171 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
172 double targetRowVal = *MATRIX_VALUE_PTR(pMatATA, r, c);
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
173 double factor = targetRowVal / prVal;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
174 for( int c2 = 0; c2 < pMatATA->cols; c2++ )
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
175 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
176 *MATRIX_VALUE_PTR(pMatATA, r, c2) -= *MATRIX_VALUE_PTR(pMatATA, pr, c2) * factor;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
177 // printf( "c = %d, pr = %d, r = %d, c2=%d, targetRowVal = %f, prVal = %f, factor = %f.\n",
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
178 // c, pr, r, c2, targetRowVal, prVal, factor );
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
179
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
180 // showMatrix( pMatATA );
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
181
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
182 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
183 *MATRIX_VALUE_PTR(pMatATB, r, 0) -= *MATRIX_VALUE_PTR(pMatATB, pr, 0) * factor;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
184 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
185 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
186 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
187 for( int c = 0; c < pMatATA->cols; c++ )
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
188 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
189 int pr = c;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
190 // now, pr is the pivot row.
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
191 double prVal = *MATRIX_VALUE_PTR(pMatATA, pr, c);
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
192 *MATRIX_VALUE_PTR(pMatATA, pr, c) /= prVal;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
193 *MATRIX_VALUE_PTR(pMatATB, pr, 0) /= prVal;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
194 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
195
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
196 for( int i = 0; i < coefficientCount; i++)
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
197 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
198 coefficientResults[i] = *MATRIX_VALUE_PTR(pMatATB, i, 0);
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
199 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
200
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
201
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
202 destroyMatrix( pMatATB );
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
203 destroyMatrix( pMatATA );
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
204 destroyMatrix( pMatAT );
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
205
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
206 destroyMatrix( pMatA );
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
207 destroyMatrix( pMatB );
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
208 return rVal;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
209 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
210
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
211
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
212 //=========================================================
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
213 // Private function definitions
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
214 //=========================================================
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
215
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
216
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
217 //--------------------------------------------------------
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
218 // createTranspose()
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
219 // Returns the transpose of a matrix, or NULL.
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
220 //
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
221 // The caller must free both the allocated matrix
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
222 // and its contents array.
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
223 //--------------------------------------------------------
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
224 static matrix_t * createTranspose( matrix_t *pMat )
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
225 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
226 matrix_t *rVal = (matrix_t *) calloc(1, sizeof(matrix_t));
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
227 rVal->pContents = (double *) calloc( pMat->rows * pMat->cols, sizeof( double ));
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
228 rVal->cols = pMat->rows;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
229 rVal->rows = pMat->cols;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
230 for( int r = 0; r < rVal->rows; r++ )
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
231 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
232 for( int c = 0; c < rVal->cols; c++ )
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
233 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
234 *MATRIX_VALUE_PTR(rVal, r, c) = *MATRIX_VALUE_PTR(pMat, c, r);
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
235 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
236 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
237 return rVal;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
238 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
239
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
240 //--------------------------------------------------------
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
241 // createProduct()
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
242 // Returns the product of two matrices, or NULL.
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
243 //
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
244 // The caller must free both the allocated product matrix
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
245 // and its contents array.
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
246 //--------------------------------------------------------
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
247 static matrix_t * createProduct( matrix_t *pLeft, matrix_t *pRight )
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
248 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
249 matrix_t *rVal = NULL;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
250 if( (NULL == pLeft) || (NULL == pRight) || (pLeft->cols != pRight->rows) )
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
251 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
252 printf( "Illegal parameter passed to createProduct().\n");
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
253 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
254 else
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
255 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
256 // Allocate the product matrix.
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
257 rVal = (matrix_t *) calloc(1, sizeof(matrix_t));
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
258 rVal->rows = pLeft->rows;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
259 rVal->cols = pRight->cols;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
260 rVal->pContents = (double *) calloc( rVal->rows * rVal->cols, sizeof( double ));
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
261
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
262 // Initialize the product matrix contents:
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
263 // product[i,j] = sum{k = 0 .. (pLeft->cols - 1)} (pLeft[i,k] * pRight[ k, j])
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
264 for( int i = 0; i < rVal->rows; i++)
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
265 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
266 for( int j = 0; j < rVal->cols; j++ )
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
267 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
268 for( int k = 0; k < pLeft->cols; k++)
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
269 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
270 *MATRIX_VALUE_PTR(rVal, i, j) +=
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
271 (*MATRIX_VALUE_PTR(pLeft, i, k)) * (*MATRIX_VALUE_PTR(pRight, k, j));
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
272 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
273 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
274 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
275 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
276
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
277 return rVal;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
278 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
279
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
280 //--------------------------------------------------------
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
281 // destroyMatrix()
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
282 // Frees both the allocated matrix and its contents array.
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
283 //--------------------------------------------------------
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
284 static void destroyMatrix( matrix_t *pMat )
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
285 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
286 if(NULL != pMat)
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
287 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
288 if(NULL != pMat->pContents)
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
289 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
290 free(pMat->pContents);
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
291 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
292 free( pMat );
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
293 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
294 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
295
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
296 //--------------------------------------------------------
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
297 // createMatrix()
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
298 // Allocates the matrix and clears its contents array.
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
299 //--------------------------------------------------------
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
300 static matrix_t *createMatrix( int rows, int cols )
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
301 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
302 matrix_t *rVal = (matrix_t *) calloc(1, sizeof(matrix_t));
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
303 if(NULL != rVal)
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
304 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
305 rVal->rows = rows;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
306 rVal->cols = cols;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
307 rVal->pContents = (double *) calloc( rows * cols, sizeof( double ));
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
308 if(NULL == rVal->pContents)
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
309 {
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
310 free( rVal );
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
311 rVal = NULL;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
312 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
313 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
314
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
315 return rVal;
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
316 }
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
317
7f2ec2bc9d2e Added polyfit files.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
318

mercurial