⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 newton_method.cpp

📁 牛顿法图解方程。利用牛顿切线法求解固定方程
💻 CPP
字号:
/*牛顿法图解方程*/
#include<graphics.h>
#include<math.h>
#include<stdio.h>
float flRatioX,flRatioY,flX0=10,flY0=10,flXmin,flXmax,flYmin,flYmax;
double Cla_f(double flX)/*方程*/
{
   return flX*flX-5*flX+6;
}

double Cald_f(double flX)/*方程求导*/
{  return 2*flX-5; }
float Xcoor_f(float flX) /*已知x求解x的坐标*/
{  return flX0+(flX-flXmin)*flRatioX;}
float Ycoor_f(float y)  /*已知y求解y的坐标*/
{ return 459-(flY0+(y-flYmin)*flRatioY);}
main()
{
    int gdriver=DETECT,gmode;
    float flX;
    char szStr[100];
    float flXstart,flYstart,flX1,flX2;
    float flXlength,flYlength;
    printf("Input the range of x:");
    scanf("%f%f",&flXmin, &flXmax);
    printf("input start x:");
    scanf("%f", &flXstart);
    flYstart=Cla_f(flXstart);
    initgraph(&gdriver,&gmode,"");/*设置图形格式*/
    setbkcolor(1);/*背景色*/
    setcolor(12);/*画笔色*/
    rectangle(0,0,639,479);
    setlinestyle(0,0,2);/*线宽*/
    flXlength=flXmax-flXmin;  /*x的范围*/
    flRatioX=619/flXlength; /*x放大的比率*/
    flYmin=flYmax=Cla_f(flXmin);
    for(flX=flXmin;flX<=flXmax;flX=flX+0.01)
      if(flYmin>Cla_f(flX))
	 flYmin=Cla_f(flX);
      else
	 if(flYmax<Cla_f(flX))
	   flYmax=Cla_f(flX);
    flYlength=flYmax-flYmin;  /*y的范围*/
    flRatioY=459/flYlength; /*y放大的比率*/
    moveto(Xcoor_f(flXmin),Ycoor_f(Cla_f(flXmin)));
    for(flX=flXmin;flX<=flXmax;flX=flX+(flXmax-flXmin)/100) /*画方程曲线*/
    {
	  lineto(Xcoor_f(flX),Ycoor_f(Cla_f(flX)));
    }
    setcolor(9);
    line(Xcoor_f(0),10, Xcoor_f(0),469);
    line(10,Ycoor_f(0), 629,Ycoor_f(0));
    outtextxy(Xcoor_f(0)+5,Ycoor_f(0)+5, "(0,0)"); /*画原点坐标*/
    sprintf(szStr,"(%.1f,0)",flXmin);
    outtextxy(Xcoor_f(flXmin),Ycoor_f(0)+5,szStr);
    sprintf(szStr,"(%.1f,0)",flXmax);
    outtextxy(Xcoor_f(flXmax)-20,Ycoor_f(0)+5,szStr);/*初值说明*/
    flX1=flX2=flXstart;
    setcolor(15);
    outtextxy(Xcoor_f(flX2)+5,Ycoor_f(0)+5, "start");
    do
    {
	setcolor(10);
	line(Xcoor_f(flX1),Ycoor_f(0),Xcoor_f(flX1), Ycoor_f(Cla_f(flX1)));/*垂直x轴直线*/
	flX2=flX1;
	flX1=flX2-Cla_f(flX2)/Cald_f(flX2);
	setcolor(14);
	line(Xcoor_f(flX2),Ycoor_f(Cla_f(flX2)), Xcoor_f(flX1), Ycoor_f(0));/*切线*/
    }while(fabs(Cla_f(flX1))>0.01);
    sprintf(szStr,"%.2f",flX1);
    setcolor(15);
    outtextxy(Xcoor_f(flX2)+5,Ycoor_f(0)+5, szStr);/*标注方程解*/
    getch();
    closegraph();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -