как данное выражение (см. картинку) считать в цикле???
ganselo, одним циклом не получится, нужно два. Причём второй вложенный в первый.
Первый для финальное суммирования, второй для просчёта составляющих суммы (отнимание хсов, операции в числители и знаменатели и умножении на y, если сразу его к операции в числитель не закинуть).
Что-то типа
int L,n=10,x=1,member;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
member=((x-x1)/(x0-x1))y0;
}
L=L+member;
}
А значения x0,x1...xn и y0,y1...yn имеют какую-то зависимость например от заданных x и от y, если такой имеется, или их должны вводить на каждом этапе цикла?
Admiral »
В общем задача такая: даны n точек в плоскости. Нужно построить многочлен степени n-1, проходящий через эти точки.
Чтобы построить многочлен степени n-1 можно воспользоватся формулой (см. картинку). Если в эту формулу вместо x подставить значение x0, то мы полу4им значение y0 (L(x0)=y0, L(x1)=y1... L(xn)=yn). Вот я никака не соображу как найти этот многочлен. Мб есть у каво какие соображения... хелп)
Подставляешь в формулу вместо букв с индексами значения точек xi и yi, получаешь формулу. Если хочешь многочлен в виде a0 + a1*x + a2*x^2... раскрой скобки
Вот что получилось...
/**Dano n tochek. Postroit' mnogochlen prohodyashiy cherez dannie tochki.
(Postroenie interpolyacionnogo mnogochlena v yavnom vide. Metod Lagranja)
**/
#include <stdio.h>
#include <time.h>
#include <graphics.h>
#define N 10
int driver=DETECT, mode;
int n, xl=80, xr=620, yl=20, yr=430;
double a, b, max=-100000, min=100000;
double f(double *x, double *y, double X);
void OXY(double a, double b, double M, double m);
void tochki(double *x, double *y, double kx, double ky, double x0, double y0);
void graphic(double kx, double ky, double x0, double y0, double *x, double *y);
int main()
{
int i;
double j, Y, kx, ky, x0, y0, m, M;
printf ("Vvedite kol-vo tochek :");
scanf ("%d", &n);
double x[n], y[n];
srand (time(NULL));
for (i=0; i<n; i++)
{
x[i]=1+rand()%400;
y[i]=1+rand()%400;
}
m=x[0];
M=x[0];
for (i=0; i<n; i++)
{
if (M<x[i]) M=x[i];
if (m>x[i]) m=x[i];
}
a=m; b=M;
initgraph(&driver, &mode, "");
for (j=a; j<b; j=j+0.1)
{
if (f(x, y, j)>max) max=f(x, y, j);
if (f(x, y, j)<min) min=f(x, y, j);
}
kx=(xr-xl)/(b-a);
ky=(yr-yl)/(max-min);
x0=xl-a*kx;
y0=yr+min*ky;
OXY(a, b, max, min);
graphic(kx, ky, x0, y0, x, y);
tochki(x, y, kx, ky, x0, y0);
getch();
closegraph();
return 0;
}
double f(double *x, double *y, double X)
{
int i, j;
double B, L=0;
for(j=0; j<n; j++)
{
B=y[j];
for(i=0; i<n; i++)
{
if(i!=j) B=B*(X - x[i])/(x[j] - x[i]);
}
L+=B;
}
return L;
}
void OXY(double a, double b, double M, double m)
{
int i;
double x, y;
char h[10];
setcolor (9);
rectangle (xl, yl, xr, yr);
setcolor (7);
for(i=0; i<=N; i++)
{
x=a+i*(b-a)/N;
sprintf(h,"%.1f",x);
outtextxy(xl+i*(xr-xl)/N-10,yr+10,h);
y=M-i*(M-m)/N;
sprintf(h,"%.1f",y);
outtextxy(xl-70,yl+i*(yr-yl)/N-5,h);
}
}
void tochki(double *x, double *y, double kx, double ky, double x0, double y0)
{
double tx, ty;
setcolor (5);
for (int i=0; i<n; i++)
{
tx=x0+x[i]*kx;
ty=y0-f(x, y, x[i])*ky;
circle (tx, ty, 3);
circle (tx, ty, 2);
circle (tx, ty, 1);
}
}
void graphic(double kx, double ky, double x0, double y0, double *x, double *y)
{
double xm, ym;
for (double j=a; j<b; j=j+0.01)
{
xm=x0+j*kx;
ym=y0-f(x, y, j)*ky;
putpixel(xm,ym,7);
}
}
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.