计算机辅助分析与设计c语言 二分法牛顿迭代法求方程解.docx
《计算机辅助分析与设计c语言 二分法牛顿迭代法求方程解.docx》由会员分享,可在线阅读,更多相关《计算机辅助分析与设计c语言 二分法牛顿迭代法求方程解.docx(9页珍藏版)》请在冰豆网上搜索。
![计算机辅助分析与设计c语言 二分法牛顿迭代法求方程解.docx](https://file1.bdocx.com/fileroot1/2022-12/7/1bd40523-85f4-4cda-a1f7-dd3c10517938/1bd40523-85f4-4cda-a1f7-dd3c105179381.gif)
计算机辅助分析与设计c语言二分法牛顿迭代法求方程解
《计算机辅助分析与设计》实验报告
实验一:
编程作业1:
用二分法求方程
的一个正的近似解(精确到0.1)。
程序:
#include
#include
#defineF(x)((x)*(x)*(x)-3*(x)+1)/*宏定义F(x)为方程式的左边*/
voidmain()
{intk=0;
floata,b,c,m;
printf("inputa,b,c:
");
scanf("%f,%f,%f",&a,&b,&c);/*输入a,b的值以及精确度c的值*/
while(F(a)*F(b)>0)/*输入的a,b的值直到满足F(a)F(b)
0为止*/
{printf("inputa,bagain:
");
scanf("%f,%f",&a,&b);}
for(;F(a)*F(b)<=0;k++)/*二分法开始求方程的根*/
{if(F(a)*F(b)==0)/*若F(a)F(b)=0,则方程的解在a,b两者中,并找出其根*/
if(F(a)==0)
printf("Arootofequationis:
%fk=%d\n",a,k);
else{printf("Arootofequationis;%fk=%d\n",b,k);break;}
elsem=(a+b)/2;/*取a,b的中点*/
if(fabs(a-b){printf("Arootofequationis:
%fk=%d\n",m,k);break;}
elseif(F(a)*F(m)>0)/*找出二分后区间两端点值异号的区间,并赋给[a,b]*/
a=m;
elseb=m;
}
}
程序运行结果如下图
编程作业2:
用牛顿迭代法求方程
在
附近的根(精确到0.001)。
程序:
#include
#include
floatf(floatx)/*定义函数f返回
的值(其中f(x)为方程式的左边)*/
{
floaty;
y=(x*x*x-x-1)/(3*x*x-1);
return(y);
}
voidmain()
{
floatx1,x2,x0,c;
printf("inputx0,c:
");
scanf("%f,%f",&x0,&c);/*输入x0及精确度c的值*/
x2=x0;
do/*牛顿迭代法开始求方程的根*/
{x1=x2;
x2=x1-f(x1);}
while(fabs(f(x1))>c);/*若不满足精度要求执行循环,反之则得到方程的根就是x2*/
printf("Arootofequationis:
%f\n",x2);
}
程序运行结果如下图:
实验二:
编程作业1:
用梯形法计算定积分
(取n=100)。
程序:
#include
#include
floatf(floatx)/*定义函数f返回[1/(1+
)]*/
{
floaty;
y=1/(x*x+1);
return(y);
}
voidmain()
{
floata,b,h,F=0;
intn,k;
printf("Inputa,b,n:
");
scanf("%f,%f,%d",&a,&b,&n);/*输入积分上下限a,b及n的值*/
F=(f(a)+f(b))/2.0;
h=fabs(b-a)/n;/*计算每一个小梯形的高度h*/
for(k=1;kF+=f(a+k*h);
F=F*h;
printf("Theintegralof1/(1+x*x)is:
%f\n",F);
getch();
}
程序运行结果如下图:
编程作业2:
用抛物线法计算定积分
(取n=100)。
程序:
#include
floatf(floatx)/*定义函数f返回[1/(1+
)]*/
{
floaty;
y=1/(1+x*x);
return(y);
}
voidmain()
{
floata,b,h,F;
intn,k;
printf("inputa,b,n:
");
scanf("%f,%f,%d",&a,&b,&n);/*输入积分下上限a,b及n的值*/
h=(b-a)/(4*n);
F=f(a)+f(b);
for(k=0;k<(2*n);k++)/*求
的和*/
F+=4*f(((2*k+1)*h+a));
/*求
的和*/
for(k=1;k<(2*n);k++)
F+=2*f((2*k*h+a));
F=F*h/3;
printf("Theintegralof1/(1+x*x)is:
%f\n",F);
getch();
}
程序运行结果如下图:
实验三:
编程作业1:
用欧拉法求初值问题
在
处的近似值。
程序:
#include
floatf(floatx,floaty)/*定义函数f返回[y-(2x/y)]的值*/
{
floatz;
z=y-(2*x/y);
return(z);
}
voidmain()
{
inti=0,N;
floatx0,y0,h,x,y;
printf("inputx0,y0,h,N:
");
scanf("%f,%f,%f,%d",&x0,&y0,&h,&N);/*输入起始点x0、y0及步长h、步数N的值*/
for(;i{
y=y0+f(x0,y0)*h;/*用欧拉公式y=y0+hf(x0,y0)求y的值*/
x=x0+h;
x0=x;
y0=y;
printf("\nx=%4.2f,y=%f",x,y);/*输出运算到第i+1步时x、y的值*/
}
getch();
}_
程序运行结果如下图:
编程作业2:
用改进欧拉法求初值问题
在
处的近似值。
程序:
#include
floatf(floatx,floaty)/*定义函数f返回[y-(2x/y)]的值*/
{
floatz;
z=y-(2*x/y);
return(z);
}
voidmain()
{
inti=0,N;
floatx0,y0,h,x1,y1;
printf("\ninputx0,y0,h,N:
");
scanf("%f,%f,%f,%d",&x0,&y0,&h,&N);/*输入起始点x0、y0及步长h、步数N的值*/
for(;i{
x1=x0+h;
y1=y0+f(x0,y0)*h;/*求预报值y1=y0+hf(x0,y0)的值*/
y1=y0+(f(x0,y0)+f(x1,y1))*h/2;/*求校正值y1=y0+h[f(x0,y0)+f(x1,y1)]/2的值*/
x0=x1;
y0=y1;
printf("\nx=%4.2f,y=%f",x1,y1);/*输出运算到第i+1步时x、y的值*/
}
getch();
}
程序运行结果如下图: