⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 luserver.cpp

📁 linux下简单对象应用协议的开发库
💻 CPP
字号:
#include "soapH.h"#include <math.h>////////////////////////////////////////////////////////////////////////////////////  main//////////////////////////////////////////////////////////////////////////////////int main(int argc, char **argv){ struct soap *soap;  int m, s;  soap = soap_new();  if (argc < 3)    soap_serve(soap); // run as CGI application over the Web  else // run as stand-alone server on machine given by argv[1] listening to port argv[2]  { m = soap_bind(soap, argv[1], atoi(argv[2]), 100);    if (m < 0)    { soap_print_fault(soap, stderr);      exit(-1);    }    fprintf(stderr, "Socket connection successful: master socket = %d\n", m);    for (int i = 1; ; i++)    { s = soap_accept(soap);      if (s < 0)      { soap_print_fault(soap, stderr);        exit(-1);      }      fprintf(stderr, "%d: accepted connection from IP = %d.%d.%d.%d socket = %d ... ", i, (int)(soap->ip>>24)&0xFF, (int)(soap->ip>>16)&0xFF, (int)(soap->ip>>8)&0xFF, (int)soap->ip&0xFF, s);      soap_serve(soap);		// process request      fprintf(stderr, "request served\n");      soap_destroy(soap);	// delete class instances      soap_end(soap);		// clean up everything and close socket    }  }  soap_done(soap);  return 0;}////////////////////////////////////////////////////////////////////////////////////  LU decomposition: remote method interface//////////////////////////////////////////////////////////////////////////////////int ludcmp(struct soap*, matrix&, ivector&, double&);int ns1__ludcmp(struct soap *soap, matrix *a, struct ns1__ludcmpResponse &result){ result.a = a;  result.i = soap_new_ivector(soap, -1);  if (ludcmp(soap, *result.a, *result.i, result.d))    return soap_sender_fault(soap, "Singular matrix in routine ludcmp", NULL);  return SOAP_OK;}////////////////////////////////////////////////////////////////////////////////////  LU decomposition: algorithm//////////////////////////////////////////////////////////////////////////////////int ludcmp(struct soap *soap, matrix &a, ivector &indx, double &d){ int i, imax = 0, j, k, n;  double big, dum, sum, temp;  n = a.size();  vector vv(soap);  vv.resize(n);  indx.resize(n);  d = 1.0;  for (i = 1; i <= n; i++)  { big = 0.0;    a[i].resize(n);    for (j = 1; j <= n; j++)      if ((temp = fabs(a[i][j])) > big)        big = temp;    if (big == 0.0)      return -1;    vv[i] = 1.0/big;  }  for (j = 1; j <= n; j++)  { for (i = 1; i < j; i++)    { sum = a[i][j];      for (k = 1; k < i; k++)        sum -= a[i][k]*a[k][j];      a[i][j] = sum;    }    big = 0.0;    for (i = j; i <= n; i++)    { sum = a[i][j];      for (k = 1; k < j; k++)        sum -= a[i][k]*a[k][j];      a[i][j] = sum;      if ((dum = vv[i]*fabs(sum)) >= big)      { big = dum;        imax = i;      }    }    if (j != imax)    { for (k = 1; k <= n; k++)      { dum = a[imax][k];        a[imax][k] = a[j][k];        a[j][k] = dum;      }      d = -d;      vv[imax] = vv[j];    }    indx[j] = imax;    if (a[j][j] == 0.0)      a[j][j] = 1.0e-20;    if (j != n)    { dum = 1.0/a[j][j];      for (i = j+1; i <= n; i++)        a[i][j] *= dum;    }  }  for (i = 1; i <= n; i++)  { for (j = 1; j <= n; j++)      if (fabs(a[i][j]) > 1.0e-15)        break;    for (k = n; k > j; k--)      if (fabs(a[i][k]) > 1.0e-15)        break;    a[i].resize(j, k);  }  return 0;}////////////////////////////////////////////////////////////////////////////////////  Forward- and backsubstitution: remote method interface//////////////////////////////////////////////////////////////////////////////////int lubksb(matrix&, ivector&, vector &b);int ns1__lubksb(struct soap *soap, matrix *a, ivector *i, vector *b, vector *x){ lubksb(*a, *i, *b);  *x = *b;  return SOAP_OK;}////////////////////////////////////////////////////////////////////////////////////  Forward- and backsubstitution: algorithm//////////////////////////////////////////////////////////////////////////////////int lubksb(matrix &a, ivector &indx, vector &b){ int i, j, k, ip, n, m, ii = 0;  double sum;  n = a.size();  b.resize(n);  for (i = 1; i <= n; i++)  { ip = indx[i];    sum = b[ip];    b[ip] = b[i];    if (ii)    { k = a[i].start();      if (ii > k)        k = ii;      m = a[i].end();      if (i-1 < m)        m = i-1;      for (j = k; j <= m; j++)        sum -= a[i][j]*b[j];    }    else if (sum)      ii = i;    b[i] = sum;  }  for (i = n; i >= 1; i--)  { sum = b[i];    k = a[i].start();    if (i+1 > k)      k = i+1;    m = a[i].end();    if (n < m)      m = n;    for (j = k; j <= m; j++)      sum -= a[i][j]*b[j];    b[i] = sum/a[i][i];  }  return SOAP_OK;}////////////////////////////////////////////////////////////////////////////////////  LU solve: remote method interface//////////////////////////////////////////////////////////////////////////////////int ns1__lusol(struct soap *soap, matrix *a, vector *b, vector *x){ ivector indx(soap);  double d;  if (ludcmp(soap, *a, indx, d))    return soap_sender_fault(soap, "Singular matrix in routine ludcmp", NULL);  lubksb(*a, indx, *b);  *x = *b;  return SOAP_OK;}////////////////////////////////////////////////////////////////////////////////////  LU solve multiple: remote method interface//////////////////////////////////////////////////////////////////////////////////int ns1__lusols(struct soap *soap, matrix *a, matrix *b, matrix *x){ ivector indx(soap);  double d;  if (ludcmp(soap, *a, indx, d))    return soap_sender_fault(soap, "Singular matrix in routine ludcmp", NULL);  for (int i = 1; i <= b->size(); i++)    lubksb(*a, indx, (*b)[i]);  *x = *b;  return SOAP_OK;}////////////////////////////////////////////////////////////////////////////////////  LU inverse: remote method interface//////////////////////////////////////////////////////////////////////////////////int ns1__luinv(struct soap *soap, matrix *a, matrix *b){ vector col(soap);  ivector indx(soap);  double d;  int i, j, k, n;  if (ludcmp(soap, *a, indx, d))    return soap_sender_fault(soap, "Singular matrix in routine ludcmp", NULL);  n = a->size();  col.resize(n);  b->resize(n, n);  for (j = 1; j <= n; j++)  { for (i = 1; i <= n; i++)      col[i] = 0.0;    col[j] = 1.0;    lubksb(*a, indx, col);    for (i = 1; i <= n; i++)      (*b)[i][j] = col[i];  }  for (i = 1; i <= n; i++)  { for (j = 1; j <= n; j++)      if (fabs((*b)[i][j]) > 1.0e-15)        break;    for (k = n; k > j; k--)      if (fabs((*b)[i][k]) > 1.0e-15)        break;    (*b)[i].resize(j, k);  }  return SOAP_OK;}////////////////////////////////////////////////////////////////////////////////////  LU determinant: remote method interface//////////////////////////////////////////////////////////////////////////////////int ns1__ludet(struct soap *soap, matrix *a, double &d){ ivector indx(soap);  if (ludcmp(soap, *a, indx, d))    return soap_sender_fault(soap, "Singular matrix in routine ludcmp", NULL);  for (int i = 1; i <= a->__size; i++)    d *= (*a)[i][i];  return SOAP_OK;}struct Namespace namespaces[] ={// "ns-prefix", "ns-name", "ns-pattern"  {"SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/"},  {"SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/"},  {"xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://wwww.w3.org/*/XMLSchema-instance"},  {"xsd", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema"},  {"ns1", "urn:lu"},  {NULL, NULL}};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -