Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы 1 - 10 / lr_10 / LR_10
.CPP#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define NODES_NUM 11
#define X1 2.2960
#define X2 0.9390
#define X3 1.3920
double Newton(double nodes[][2], double x, FILE *f_out);
double Lagrange(double nodes[][2], double x, FILE *f_out);
void main()
{
double nodes[NODES_NUM][2]=
{
{0.3490, -0.4300},
{0.5590, -0.1060},
{0.7690, 0.0250},
{0.9790, 0.0220},
{1.1890, -0.0610},
{1.3990, -0.1710},
{1.6090, -0.2490},
{1.8190, -0.2410},
{2.0290, -0.0920},
{2.2390, 0.2540},
{2.4490, 0.8530}
};
FILE *f_out;
if ((f_out = fopen("out.txt", "w")) == NULL)
{
fprintf(stderr, "\nCan't open output file!\n");
exit(1);
}
fprintf(f_out, "********* Newton X1 **********\n");
fprintf(f_out, "\nFunction value = %10.6f\n", Newton(nodes, X1, f_out));
fprintf(f_out, "\n\n********* Lagrange X1 **********\n");
fprintf(f_out, "\nFunction value = %10.6f\n", Lagrange(nodes, X1, f_out));
fprintf(f_out, "********* Newton X2 **********\n");
fprintf(f_out, "\nFunction value = %10.6f\n", Newton(nodes, X2, f_out));
fprintf(f_out, "\n\n********* Lagrange X2 **********\n");
fprintf(f_out, "\nFunction value = %10.6f\n", Lagrange(nodes, X2, f_out));
fprintf(f_out, "********* Newton X3 **********\n");
fprintf(f_out, "\nFunction value = %10.6f\n", Newton(nodes, X3, f_out));
fprintf(f_out, "\n\n********* Lagrange X3 **********\n");
fprintf(f_out, "\nFunction value = %10.6f\n", Lagrange(nodes, X3, f_out));
fclose(f_out);
return;
}
double Newton(double nodes[][2], double x, FILE *f_out)
{
double f = 0;
double q = (x - nodes[0][0]) / (nodes[1][0] - nodes[0][0]);
double f0[NODES_NUM];
double koef[NODES_NUM];
int i,j;
for (i=0; i<NODES_NUM; i++)
f0[i] = nodes[i][1];
koef[0] = f0[0];
for (i=1; i<NODES_NUM; i++)
{
fprintf(f_out, "Order %d:\n", i);
for (j=NODES_NUM-1; j>=i; j--)
{
f0[j] -= f0[j-1];
fprintf(f_out, "F(%2d) = % 10.6f\n", j, f0[j]);
}
}
for (i=NODES_NUM-1; i>0; i--)
{
f = (f + f0[i]) * (q - i + 1) / i;
}
f += f0[0];
return f;
}
double Lagrange(double nodes[][2], double x, FILE *f_out)
{
double f, pi;
int i,j;
f = 0;
for (i=0; i < NODES_NUM; i++)
{
pi = 1;
for (j=0; j< NODES_NUM; j++)
{
if (j==i) continue;
pi *= ((x - nodes[j][0])/(nodes[i][0] - nodes[j][0]));
}
fprintf(f_out, "P(%2d) = % 14.6f\n",i,pi);
f += pi*nodes[i][1];
}
return f;
}