 |
MAGiC
V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
|
Aller à la documentation de ce fichier.
45 double *
aaug=
new double[(n+1)*n];
46 #define a(i,j) (*(a+(i)*(n)+j))
47 #define aaug(i,j) (*(aaug+(i)*(n+1)+j))
53 for (
int j=0;j<n-1;j++)
56 double pvt=fabs(
aaug(j,j));
57 int ligne_pivot_debut=j;
60 for (
int i=j+1;i<n;i++)
61 if (fabs(
aaug(i,j))>pvt)
66 if (ligne_pivot!=ligne_pivot_debut)
68 for (
int col=j;col<n+1;col++)
70 double temp=
aaug(ligne_pivot_debut,col);
71 aaug(ligne_pivot_debut,col)=
aaug(ligne_pivot,col);
72 aaug(ligne_pivot,col)=temp;
76 if (fabs(
aaug(j,j))< 0.00000000000001) {
81 for (
int ii=j+1;ii<n;ii++)
aaug(ii,j)=
aaug(ii,j)/
aaug(j,j);
83 for (
int iii=j+1;iii<n;iii++)
84 for (
int k=j+1;k<n+1;k++)
88 if (fabs(
aaug(n-1,n-1))<0.00000000000001) {
93 for (
int j=n-2;j>-1;j--)
96 for (
int k=n-1;k>j;k--)
97 x[j]=x[j]-
aaug(j,k)*x[k];
104 #undef a // enlever le (i,j) pour enlever le warning
110 double *
mat=
new double[dim1*(dim2+1)];
111 double *r=
new double[dim2];
112 #define mat(i,j) (*(mat+(i)*(dim2+1)+(j)))
113 #define m(i,j) (*(m+(i)*dim2+(j)))
114 for (
int i=0;i<dim1;i++)
116 for (
int j=0;j<dim2;j++)
120 for (
int k=0;k<dim2;k++)
123 for (
int i=k;i<dim1;i++)
124 somme=somme+
mat(i,k)*
mat(i,k);
125 double alpha=
sqrt(somme);
126 double pivot=
mat(k,k);
127 if (pivot>0) alpha=-alpha;
135 double beta=somme-pivot*alpha;
138 for (
int j=k+1;j<dim2+1;j++)
141 for (
int i=k;i<dim1;i++)
142 somme=somme+
mat(i,k)*
mat(i,j);
143 double gamma=somme/beta;
144 for (
int i=k;i<dim1;i++)
148 x[dim2-1]=
mat(dim2-1,dim2)/r[dim2-1];
149 for (
int j=dim2-2;j>-1;j--)
152 for (
int k=dim2-1;k>j;k--)
153 x[j]=x[j]-
mat(j,k)*x[k];
172 #define a(i,j) (*(a+(i)*(dim)+(j)))
173 #define res(i,j) (*(res+(i)*(dim)+(j)))
176 for (
int i=0;i<dim;i++)
178 for (
int j=1;j<dim;j++)
182 for (
int j=1;j<dim;j++)
184 for (
int i=j;i<dim;i++)
187 for (
int k=0;k<j;k++)
188 sum=sum+
res(i,k)*
res(k,j);
191 for (
int i=j+1;i<dim;i++)
195 for (
int k=0;k<j;k++)
196 sum=sum+
res(j,k)*
res(k,i);
197 res(j,i)=(
a(j,i)-sum)/
res(j,j);
210 #define matlu(i,j) (*(matlu+(i)*(dim)+(j)))
212 double* bb=
new double[dim];
213 bb[0]=b[0]/
matlu(0,0);
214 for (
int i=1;i<dim;i++)
217 for (
int k=0;k<i;k++)
218 sum=sum+
matlu(i,k)*bb[k];
219 bb[i]=(b[i]-sum)/
matlu(i,i);
223 for (
int j=dim-2;j>=0;j--)
226 for (
int k=j+1;k<dim;k++)
227 sum=sum+
matlu(j,k)*x[k];
245 #define mat(i,j) (*(mataug+(j)*n+i))
246 #define mat1(i,j) (*(mat1+(j)*n+i))
247 #define mat2(i,j) (*(mat2+(j)*n+i))
249 double *mataug=(
double*)calloc(2*n*n,
sizeof(
double));
251 for (
int i=0;i<n;i++)
253 for (
int j=0;j<n;j++)
261 for (
int j=0;j<n;j++)
263 double pivot=fabs(
mat(j,j));
265 for (
int i=j+1;i<n;i++)
267 if (fabs(
mat(i,j))>pivot)
269 pivot=fabs(
mat(i,j));
273 if (pivot<0.000000001) {
280 for (
int i=j;i<2*n;i++)
282 double temp=
mat(j,i);
283 mat(j,i)=
mat(ligne_pivot,i);
284 mat(ligne_pivot,i)=temp;
287 for (
int i=j+1;i<n;i++)
289 for (
int i=j+1;i<n;i++)
290 for (
int k=j+1;k<2*n;k++)
294 for (
int i=0;i<n;i++)
297 for (
int j=n-2;j>-1;j--)
300 for (
int k=n-1;k>j;k--)
int resoud_gauss(double *a, double *b, double *x, int n)
void get_inv(double *mat1, double *mat2, int n, int *ierr)
static int egal(double a, double b, double eps)
int decompose_LU(double *a, double *res, int dim)
int resoud_LU(double *lu, double *b, double *x, int dim)
int resoud_QR(double *m, double *b, double *x, int dim1, int dim2)
double2 sqrt(double2 &val)