您的位置:首页 > 编程语言 > C语言/C++

计算方法_拉格朗日插值_C++实现_方法4

2016-11-03 22:00 465 查看
#include<time.h>

#include<stdio.h>

#include<graphics>

#include<dos.h>

#include<stdlib.h>

#define N 7

int minX,maxX;

int x[N+1],y[N+1];

int main()

{

    int i;

    char pp[30];

    int driver=DETECT,mode;

    initgraph(&driver,&mode," ");

    setcolor(15);

    line(30,400,600,400);/*划x轴*/

    line(30,400,30,30);/*划y轴*/

    line(587,405,600,400);/*划x轴的箭头*/

    line(587,395,600,400);

    line(30,30,25,43);/*划y轴的箭头*/

    line(30,30,35,43);

    setcolor(6);

    line(400,45,450,45);

    setcolor(1);

    line(400,65,450,65);

    setcolor(2);

    line(400,85,450,85);

    setcolor(13);

    settextstyle(1,0,1);

    outtextxy(600,407,"X");

    outtextxy(15,10,"Y");

    outtextxy(30,407,"O");

    setcolor(6);

    outtextxy(455,35,"Lagrange");

    setcolor(1);

    outtextxy(455,55,"Newton");

    setcolor(2);

    outtextxy(455,75,"spline");

    randomize();

    for(i=0;i<=N;i++)/*随机产生N个点*/

    {

        x[i]=random(60)+i*70;

        y[i]=random(80)+100;

        /*putpixel(30+x[i],400-y[i],1);*/

    }

    setcolor(2);

    settextstyle(2,0,4);

    for(i=0;i<=N;i++)/*划N个点坐标*/

    {

        circle(30+x[i],400-y[i],2);

        sprintf(pp,"(%d,%d)",x[i],y[i]);

        outtextxy(32+x[i],400-y[i],pp);

    }

    getch();

    minX=x[0];

    maxX=x
;

    Lagrange();/*调用拉格朗日插值子函数*/

    getch();

    

    Newton();/*调用牛顿插值子函数*/

    getch();

    

    Spline();

    getch();

    closegraph();

}

Lagrange()/*拉格朗日插值子函数*/

{

    float L,LI;

    int i,j,k;

    moveto(30+x[0],400-y[0]);

    for(k=minX;k<=maxX;k++)

    {

        L=0;

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

        {

            LI=1;

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

            if(j!=i) LI=LI*(k-x[j])/(x[i]-x[j]);

            L=L+LI*y[i];

        }

        setcolor(6);

        lineto(30+k,400-L);

        delay(50);

    }

}

Newton()/*牛顿插值子函数*/

{

}

Spline()/*样条插值子函数*/

{

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息