Главная страница
Навигация по странице:

  • «КУБАНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ» (ФГБОУ ВО «КубГУ») Факультет математики и компьютерных наук Кафедра вычислительной математики и информатики

  • СОДЕРЖАНИЕ 1Условие 42Программа 53Результат работы 11 11 Условие

  • Результат работы

  • Факультет математики и компьютерных наук Кафедра вычислительной математики и информатики индивидуальное задание по учебной практике


    Скачать 41.24 Kb.
    НазваниеФакультет математики и компьютерных наук Кафедра вычислительной математики и информатики индивидуальное задание по учебной практике
    Дата05.06.2022
    Размер41.24 Kb.
    Формат файлаdocx
    Имя файлаletnyia_practica.docx
    ТипПрограмма
    #569940

    МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

    Федеральное государственное бюджетное образовательное учреждение высшего образования

    «КУБАНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ» (ФГБОУ ВО «КубГУ»)
    Факультет математики и компьютерных наук

    Кафедра вычислительной математики и информатики


    ИНДИВИДУАЛЬНОЕ ЗАДАНИЕ ПО УЧЕБНОЙ ПРАКТИКЕ


    Работу выполнил И.А. Сафонов

    (подпись)
    Направление подготовки 02.03.01 курс 2
    Научный руководитель

    Канд. тех. наук, доцентЕ.Р. Алексеев

    (подпись, дата)

    Нормоконтролер

    преподавательЕ.Р. Алексеев

    (подпись, дата)


    Краснодар 2022

    СОДЕРЖАНИЕ

    1Условие 4

    2Программа 5

    3Результат работы 11

    11




    1. Условие

    Задание № 1. Обработка результатов эксперимента. Интерполяция функций.

    В результате эксперимента была определена некоторая табличная зависимость.

    Построить интерполяционную функцию. Вычислить ожидаемое значение функции в указанных точках. Построить график, на котором изобразить экспериментальные точки, график интерполяционной зависимости, ожидаемое значение в указанных точках. Реализовать следующие методы интерполяции:

    • интерполяционный полином Лагранжа;

    • интерполяционный полином Ньютона;

    • канонический полином;

    • функция линейной интерполяции.

    Задачу решить двумя способами.

    1. Используя математический пакет (Scilab или любой другой).

    2. Написав программу на языке С(С++).





    1. Программа

    #include #include #include #include #include #define BUF_SIZE 16 char const path[] = "./lagrange_inter.txt"; void entry_the_value(float **,int); int main() { float ** pval_arr,inter_val; int quan_dot,i,k,j; int quan_tdot, fd,len; printf("\nInput quan of dots : ");scanf("%d",&quan_dot); pval_arr = (float **)malloc(sizeof(int *)*quan_dot);

    for(i=0;i
    {

    *pval_arr++ = (float *)malloc(sizeof(float)*2);

    }

    pval_arr-=quan_dot;

    entry_the_value(pval_arr,quan_dot);
    fd = open(path,O_WRONLY|O_TRUNC);

    char buf[BUF_SIZE];

    for(i=0;i
    {

    len = sprintf(buf,"%f",pval_arr[i][0]);

    write(fd,buf,len);

    write(fd," ",1);

    len = sprintf(buf,"%f",pval_arr[i][1]);

    write(fd,buf,len);

    write(fd,"\n",1);

    }

    printf("\nInput quan of test dots :"); scanf("%d",&quan_tdot);

    float * ptdot_arr = (float *)malloc(sizeof(float)*quan_tdot);

    for(i=0;i
    {

    printf("\nInput test dot[%d] = ",i);scanf("%f",ptdot_arr++);

    }

    ptdot_arr-=quan_tdot;

    float res_cur=0;

    int flag;

    for(i=0;i
    {

    res_cur=0;

    for(j=0;j
    {

    inter_val=1;

    for(k=0;k
    {

    if(k==j)

    continue;

    if(*ptdot_arr== (*pval_arr)[0])

    {

    flag = 1;

    break;

    }

    inter_val*=(*ptdot_arr-pval_arr[k][0])/(pval_arr[j][0]- pval_arr[k][0]);

    }

    res_cur+= flag ? pval_arr[j][1] : pval_arr[j][1]*inter_val;

    flag =0;

    }

    len = sprintf(buf,"%f",*ptdot_arr);

    write(fd,buf,len);

    write(fd," ",1);

    len = sprintf(buf,"%f",res_cur);

    write(fd,buf,len);

    if(i!=quan_tdot-1)

    {
    write(fd,"\n",1);

    }
    printf("\nf(%f) = %f",*ptdot_arr,res_cur);

    ptdot_arr++;

    }

    ptdot_arr-=quan_tdot;

    for(i=0;i
    {

    free(*pval_arr++);

    }

    pval_arr-=quan_dot;

    free(pval_arr);

    free(ptdot_arr);

    close(fd);

    }

    #include

    #include

    #include

    #include

    #include

    #include "gauss_method.h"
    #define BUF_SIZE 16
    const char path[] = "./canpolin_inter.txt";
    void quasivand_constructor(struct Node *,float **,int);

    void gauss_solution(struct Node *,float **,float *,int);

    float spow(float ,int);

    void canpolin_inter(float *,float * ,int, int,int);

    int main()

    {

    int node_quan,i,fd,len;

    printf("\nInput quantity of nodes : ");

    scanf("%d",&node_quan);
    struct Node * p_nodearr = (struct Node *)malloc

    (sizeof(struct Node)*node_quan);
    //quasi vandermond pointer

    float ** p_qvand = (float **)malloc

    (sizeof(float *)*node_quan);

    for(i=0;i
    {

    *p_qvand++ = (float *)malloc

    (sizeof(float)*node_quan);

    }

    p_qvand-=node_quan;
    for(i=0;i
    {

    printf("\nInput Node[%d].x_value : ",i);

    scanf("%f",&p_nodearr->x_val);

    printf("\nInput Node[%d].y_value : ",i);

    scanf("%f",&p_nodearr++->y_val);

    }

    p_nodearr-=node_quan;

    char buf[BUF_SIZE];

    fd = open(path,O_TRUNC|O_WRONLY);

    for(i=0;i
    {

    len = sprintf(buf,"%f",p_nodearr->x_val);

    write(fd,buf,len);

    write(fd," ",1);

    len = sprintf(buf,"%f",p_nodearr++->y_val);

    write(fd,buf,len);

    }

    p_nodearr-=node_quan;

    quasivand_constructor(p_nodearr,p_qvand,node_quan);

    gauss_method(p_qvand,p_nodearr,node_quan);

    float * p_arrcoef = (float *)malloc

    (sizeof(float)*node_quan);

    gauss_solution(p_nodearr,p_qvand,p_arrcoef,node_quan);

    int tdot_quan;

    printf("\nInput quan of test dots : ");scanf("%d",&tdot_quan);

    float * p_tdot = (float *)malloc(sizeof(float)*tdot_quan);

    for(i=0;i
    {

    printf("\nInput test_dot[%d] : ",i);

    scanf("%f",p_tdot++);

    }

    p_tdot-=tdot_quan;

    canpolin_inter(p_tdot,p_arrcoef,tdot_quan,node_quan,fd);

    for(i=0;i
    {

    free(*p_qvand++);

    }

    p_qvand-=node_quan;

    free(p_nodearr);

    free(p_qvand);

    free(p_arrcoef);

    free(p_tdot);

    close(fd);
    }
    //almost vandermond

    void

    quasivand_constructor(struct Node * p_arr,float ** p_matrix,int dim)

    {

    int i,k;

    for(i=0;i
    {

    for(k=0;k
    {

    if(!k)

    {

    *(*p_matrix)++ = 1;

    continue;

    }

    *(*p_matrix)++ = spow(p_arr->x_val,k);

    }

    *p_matrix-=dim;

    p_arr++;

    p_matrix++;

    }

    }

    Полный код можно получить перейдя по ссылке – https://drive.google.com/drive/folders/1RtXObqkX9pVUs_mTSqSTbjcELdH9B6eV?usp=sharing .


    1. Результат работы

    Ожидаемые значения в точках

    X

    0.896

    0.774

    0.955

    Полином Лагранжа

    1.249852

    0.977459

    1.413269

    Полином Ньютона

    1.249853

    0.977461

    1.413267

    Канонические полином

    1.249877

    0.977470

    1.413403

    Линейная интерполяция

    1.181303

    0.970829

    1.283090

    График







    написать администратору сайта