Разработка и исследование распределенного клиент-серверного приложения для задач управления на примере метода среднезначной интерполяции Лагранжа

Страницы работы

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

Содержание работы

Разработка и исследование распределенного клиент-серверного приложения для задач управления

на примере метода среднезначной интерполяции Лагранжа

Цель …

План

Реализация, испытания, анализ

Рассмотрим пример реализации метода среднезначной интерполяции Лагранжа, он достаточно просто реализуем и создаёт большую вычислительную нагрузку, что требуется для анализа производительности серверного приложения.

Программная реализация алгоритма поточечной интерполяции по методу Лагранжа

// функция интерполяции (файл int_server.cpp)

void interpolate

(

int p_numb,       // Количество исходных точек

int i_numb,       // Требуемое количество точек после интерполяции

float* data,      // Буфер исходных данных

float* result     // Буфер результата

)

{

float time[50];               // Абсциссы исходных точек

float value[50];              // Ординаты исходных точек

float coeffs[50];             // Коэффициенты

float buf,maxt,mint,step;     // Промежуточные переменные

int i,j,k;                    // Счётчики

// Получение временных границ

maxt=data[0];

mint=data[0];

// Выделение данных

for (i=0; i<p_numb; i++)

{

time[i]=data[2*i];

value[i]=data[2*i+1];

if (time[i]>maxt) maxt=time[i];

if (time[i]<mint) mint=time[i];

}

// Расчёт коэффициента домножения для каждого из полиномов

for (i=0; i<p_numb; i++)

{

coeffs[i]=1;

for (j=0; j<p_numb; j++)

{

// Задаём множители так, чтобы в остальных

// точках значение полинома было равно нулю

if (i!=j) coeffs[i]=coeffs[i]*(time[i]-time[j]);

}

// Расчёт функции в исходной точке и получение

// коэффициента домножения

coeffs[i]=value[i]/coeffs[i];

}

// Получение шага интерполяции

step=(maxt-mint)/(i_numb-1);


// Расчёт значений интерполянта в искомых точках

for (k=0; k<i_numb; k++)

{

// Расчёт абсциссы точки

result[2*k]=mint+step*k;

result[2*k+1]=0;

// Последовательное сложение значений полиномов в точке

for (i=0; i<p_numb; i++)

{

buf=coeffs[i];

for (j=0; j<p_numb; j++)

{

if(i!=j)buf=buf*(result[2*k]-time[j]);

}

// Сохранение результата в буфер

result[2*k+1]+=buf;

}

}    

return;

}

Реализация серверного приложения, решающего задачу интерполяции

#include <stdio.h>

#include <errno.h>

#include <sys/iofunc.h>

#include <sys/dispatch.h>

#include <unistd.h>

// Прототип функции интерполяции

void interpolate(int p_numb, int i_numb, float* data, float* result);

// Основная функция проекта

int main(void)

{

int               rcvid;            // VID клиента

float             msg_buf[1002];    // Буфер приёма и передачи

name_attach_t     *res;             // Информация о клиенте

int               p_numb;           // Количество исходных точек

// Создание именованного канала

res = name_attach(NULL, "int_server", 0 );

if (res==NULL)

{

printf("Error #%d: Cant't create channel\n", errno);

return 1;

}

else printf ("Server's channel created\n");

// Цикл обработки сообщений от клиента

while(1)

{

// приём сообщения в буфер msg_buf

rcvid = MsgReceive(res->chid, &msg_buf[0], 102*sizeof(float), NULL);

if (rcvid!=0)

{

p_numb= msg_buf[1];

// Интерполяция

interpolate (msg_buf[0], msg_buf[1], &msg_buf[2], msg_buf);

// Отправка результата клиенту                           MsgReply(rcvid,p_numb*sizeof(float),msg_buf,p_numb*2*sizeof(floa     

}

}

return 0;

}

Разработка консольного клиентского приложения, использующего сервер для выполнения интерполяции

#include <stdio.h>

#include <errno.h>

#include <sys/iofunc.h>

#include <sys/dispatch.h>

#include <unistd.h>

// Основная функция программы

int main( int argc, char **argv)

{

int         p_numb, i_numb;         // Количества исходных и требуемых точек

int         res, i;                 // промежуточные переменные

int         coid;                   // Идентификатор канала сервера

float       smsg [102];             // Буфер отправляемого сообщения

float       rmsg [1000];            // Буфер принимаемого сообщения

FILE*       finp;                   // Указатель на файл исходных данных

FILE*       foutp;                  // Указатель на файл результатов

// Если не указаны имена файлов ввода и вывода, то выход

if (argc !=3)

{

printf ("Error #1: Input and output files haven't specified.");

return 1;  

}

// Открытие файла ввода

finp=fopen(argv[1],"r");

if (finp==NULL)

{

printf ("Error #6: Can't open file %s.", argv [1]);

return 6;  

}

// Считывание данных из файла ввода

res=fscanf(finp," %d %d",&p_numb, &i_numb);

if (res!=2)

{

printf("Error #3: Can't get point numbers.");

return 3;  

}

// Проверка допустимости значения количества исходных точек

if ((p_numb<2)||(p_numb>50))

{

printf("Error #4: Data points number must be numeric in [2..50].");

return 4;        

}

// Проверка допустимости количества требуемых точек

if ((i_numb<2)||(i_numb>500))

{

printf("Error #5: Data points number must be numeric in [2..500].");

Похожие материалы

Информация о работе

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.