Скачиваний:
23
Добавлен:
01.05.2014
Размер:
2.5 Кб
Скачать
#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;
}
Соседние файлы в папке lr_10