1、计算机辅助分析与设计c语言 二分法牛顿迭代法求方程解计算机辅助分析与设计实验报告实验一:编程作业1:用二分法求方程 的一个正的近似解(精确到0.1)。程序:#include#include#define F(x) (x)*(x)*(x)-3*(x)+1) /*宏定义F(x)为方程式的左边*/ void main() int k=0; float a,b,c,m; printf(input a,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为止*/ pri
2、ntf(input a,b again:); 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(A root of equation is:%f k=%dn,a,k); else printf(A root of equation is;%f k=%dn,b,k);break; else m=(a+b)/2; /*取a,b的中点*/ if(fabs(a-b)0) /*找出二分后区间两端点值异号的区
3、间,并赋给a,b*/ a=m; else b=m; 程序运行结果如下图编程作业2: 用牛顿迭代法求方程 在附近的根(精确到0.001)。程序:#include#includefloat f(float x) /*定义函数f返回的值(其中f(x)为方程式的左边)*/ float y; y=(x*x*x-x-1)/(3*x*x-1); return(y); void main() float x1,x2,x0,c; printf(input x0,c:); scanf(%f,%f,&x0,&c); /*输入x0及精确度c的值*/ x2=x0; do /*牛顿迭代法开始求方程的根*/ x1=x2;
4、x2=x1-f(x1); while(fabs(f(x1)c); /*若不满足精度要求执行循环,反之则得到方程的根就是x2*/ printf(A root of equation is:%fn,x2);程序运行结果如下图:实验二:编程作业1: 用梯形法计算定积分 ( 取 n=100)。程序:#include#includefloat f(float x) /*定义函数f返回1/(1+)*/float y; y=1/(x*x+1); return(y);void main() float a,b,h,F=0; int n,k; printf(Input a,b,n:); scanf(%f,%f,
5、%d,&a,&b,&n); /*输入积分上下限a,b及n的值*/ F=(f(a)+f(b)/2.0; h=fabs(b-a)/n; /*计算每一个小梯形的高度h*/ for(k=1;kn;k+) /*求n等分后所有小梯形上下底之和并减半*/ F+=f(a+k*h); F=F*h; printf(The integral of 1/(1+x*x) is:%fn,F); getch();程序运行结果如下图:编程作业2:用抛物线法计算定积分 ( 取 n=100)。程序:#includefloat f(float x) /*定义函数f返回1/(1+)*/ float y; y=1/(1+x*x); r
6、eturn(y);void main() float a,b,h,F; int n,k; printf(input a,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(The integral of 1/(1+x*x) is:%fn,F); getch();程序运行结果如下图
7、:实验三:编程作业1: 用欧拉法求初值问题 在处的近似值。程序:#includefloat f(float x,float y) /*定义函数f返回y-(2x/y)的值*/ float z; z=y-(2*x/y); return(z);void main() int i=0,N; float x0,y0,h,x,y; printf(input x0,y0,h,N:); scanf(%f,%f,%f,%d,&x0,&y0,&h,&N); /*输入起始点x0、y0及步长h、步数N的值*/for(;iN;i+) /*用欧拉法求出每步的x以及对应的y的值*/ y=y0+f(x0,y0)*h; /*用
8、欧拉公式y=y0+hf(x0,y0)求y的值*/ x=x0+h; x0=x; y0=y; printf(n x=%4.2f, y=%f,x,y); /*输出运算到第i+1步时x、y的值*/ getch();_程序运行结果如下图:编程作业2: 用改进欧拉法求初值问题 在处的近似值。程序:#includefloat f(float x,float y) /*定义函数f返回y-(2x/y)的值*/ float z; z=y-(2*x/y); return(z);void main() int i=0,N; float x0,y0,h,x1,y1; printf(ninput x0,y0,h,N:);
9、 scanf(%f,%f,%f,%d,&x0,&y0,&h,&N); /*输入起始点x0、y0及步长h、步数N的值*/ for(;iN;i+) /*用改进欧拉法求出每步的x以及对应的y的值*/ 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+hf(x0,y0)+f(x1,y1)/2的值*/ x0=x1; y0=y1; printf(n x=%4.2f, y=%f,x1,y1); /*输出运算到第i+1步时x、y的值*/ getch();程序运行结果如下图:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1