Ejemplo n.º 1
0
void polyfit(const emxArray_real_T *x, const emxArray_real_T *y, double p[2])
{
  emxArray_real_T *V;
  int n;
  unsigned int unnamed_idx_0;
  int i5;
  int k;
  emxArray_real_T *b_y;
  double rr;
  double p1[2];
  emxInit_real_T(&V, 2);
  n = x->size[0] - 1;
  unnamed_idx_0 = (unsigned int)x->size[0];
  i5 = V->size[0] * V->size[1];
  V->size[0] = (int)unnamed_idx_0;
  V->size[1] = 2;
  emxEnsureCapacity((emxArray__common *)V, i5, (int)sizeof(double));
  if ((int)unnamed_idx_0 == 0) {
  } else {
    for (k = 0; k <= n; k++) {
      V->data[k + V->size[0]] = 1.0;
    }

    for (k = 0; k <= n; k++) {
      V->data[k] = x->data[k];
    }
  }

  b_emxInit_real_T(&b_y, 1);
  i5 = b_y->size[0];
  b_y->size[0] = y->size[0];
  emxEnsureCapacity((emxArray__common *)b_y, i5, (int)sizeof(double));
  k = y->size[0];
  for (i5 = 0; i5 < k; i5++) {
    b_y->data[i5] = y->data[i5];
  }

  eml_qrsolve(V, b_y, p1, &rr);
  emxFree_real_T(&b_y);
  emxFree_real_T(&V);
  for (i5 = 0; i5 < 2; i5++) {
    p[i5] = p1[i5];
  }
}
Ejemplo n.º 2
0
void mldivide(const emxArray_real_T *A, emxArray_real_T *B)
{
  emxArray_real_T *Y;
  emxArray_real_T *b_B;
  int32_T n;
  int32_T i17;
  int32_T jy;
  emxArray_int32_T *ipiv;
  int32_T ldap1;
  int32_T u0;
  int32_T j;
  int32_T mmj;
  int32_T jj;
  int32_T jp1j;
  int32_T c;
  int32_T ix;
  real_T temp;
  int32_T k;
  real_T s;
  int32_T jA;
  emxArray_real_T *r77;
  emxInit_real_T(&Y, 1);
  if (A->size[0] == A->size[1]) {
    b_emxInit_real_T(&b_B, 2);
    n = A->size[1];
    i17 = b_B->size[0] * b_B->size[1];
    b_B->size[0] = A->size[0];
    b_B->size[1] = A->size[1];
    emxEnsureCapacity((emxArray__common *)b_B, i17, (int32_T)sizeof(real_T));
    jy = A->size[0] * A->size[1] - 1;
    for (i17 = 0; i17 <= jy; i17++) {
      b_B->data[i17] = A->data[i17];
    }

    emxInit_int32_T(&ipiv, 2);
    eml_signed_integer_colon(n, ipiv);
    ldap1 = n + 1;
    u0 = n - 1;
    if (u0 <= n) {
    } else {
      u0 = n;
    }

    for (j = 1; j <= u0; j++) {
      mmj = n - j;
      jj = (j - 1) * ldap1;
      jp1j = jj + 2;
      c = mmj + 1;
      if (c < 1) {
        jy = 0;
      } else {
        jy = 1;
        if (c > 1) {
          ix = jj;
          temp = fabs(b_B->data[jj]);
          for (k = 2; k <= c; k++) {
            ix++;
            s = fabs(b_B->data[ix]);
            if (s > temp) {
              jy = k;
              temp = s;
            }
          }
        }
      }

      if (b_B->data[(jj + jy) - 1] != 0.0) {
        if (jy - 1 != 0) {
          ipiv->data[j - 1] = (j + jy) - 1;
          eml_xswap(n, b_B, j, n, (j + jy) - 1, n);
        }

        i17 = (jp1j + mmj) - 1;
        for (jy = jp1j; jy <= i17; jy++) {
          b_B->data[jy - 1] /= b_B->data[jj];
        }
      }

      c = n - j;
      jA = jj + ldap1;
      jy = jj + n;
      for (k = 1; k <= c; k++) {
        temp = b_B->data[jy];
        if (b_B->data[jy] != 0.0) {
          ix = jp1j;
          i17 = mmj + jA;
          for (jj = jA; jj + 1 <= i17; jj++) {
            b_B->data[jj] += b_B->data[ix - 1] * -temp;
            ix++;
          }
        }

        jy += n;
        jA += n;
      }
    }

    for (jy = 0; jy + 1 <= n; jy++) {
      if (ipiv->data[jy] != jy + 1) {
        temp = B->data[jy];
        B->data[jy] = B->data[ipiv->data[jy] - 1];
        B->data[ipiv->data[jy] - 1] = temp;
      }
    }

    emxFree_int32_T(&ipiv);
    for (k = 0; k + 1 <= n; k++) {
      c = n * k;
      if (B->data[k] != 0.0) {
        for (jy = k + 2; jy <= n; jy++) {
          B->data[jy - 1] -= B->data[k] * b_B->data[(jy + c) - 1];
        }
      }
    }

    for (k = n - 1; k + 1 > 0; k--) {
      c = n * k;
      if (B->data[k] != 0.0) {
        B->data[k] /= b_B->data[k + c];
        for (jy = 1; jy <= k; jy++) {
          B->data[jy - 1] -= B->data[k] * b_B->data[(jy + c) - 1];
        }
      }
    }

    emxFree_real_T(&b_B);
  } else {
    emxInit_real_T(&b_B, 1);
    i17 = b_B->size[0];
    b_B->size[0] = B->size[0];
    emxEnsureCapacity((emxArray__common *)b_B, i17, (int32_T)sizeof(real_T));
    jy = B->size[0] - 1;
    for (i17 = 0; i17 <= jy; i17++) {
      b_B->data[i17] = B->data[i17];
    }

    emxInit_real_T(&r77, 1);
    eml_qrsolve(A, b_B, r77);
    i17 = B->size[0];
    B->size[0] = r77->size[0];
    emxEnsureCapacity((emxArray__common *)B, i17, (int32_T)sizeof(real_T));
    emxFree_real_T(&b_B);
    jy = r77->size[0] - 1;
    for (i17 = 0; i17 <= jy; i17++) {
      B->data[i17] = r77->data[i17];
    }

    emxFree_real_T(&r77);
  }

  emxFree_real_T(&Y);
}