📄 newton_method.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 + -