工程数值方法上机实验例题与答案
实验名称:非线性方程和非线性方程组求根(3学时)。
实验目的:掌握非线性方程和非线性方程组求根常见迭代方法,培养编程与上机调试能力。
基本要求:
(1)已知方程x x 1 0在x=2附近有一个实根。参考教材§4.2中源程序newton.c,应用C语言(或者C++、Fortran)编写割线法(插值法)迭代程序求出方程的根。
(2)已知非线性方程组 3
x2 y2 2cos(xyz) 11.07966 3 (初值取x=1, y= -1, z=0), x sin(y z) 7.24320
x y z2 2
利用教材§4.6中源程序snse.c, 应用梯度法迭代程序求出方程组的根, 并对比利用Matlab中的fsolve或者solve命令求出方程组的根结果。
实验的源程序代码:
(1)C语言(或者C++、Fortran)编写割线法(插值法)迭代程序
(2)C语言(或者C++、Fortran)编写梯度法迭代程序
#include
#include
#include
int snse(n, x, eps, f)
int n;
double x[], eps, (*f)(double [],double []);
{
int k=1000,j;
double z,d,s,*y;
y=(double *)malloc(n*sizeof(double));
z=(*f)(x,y);
while (z >= eps)
{
k = k - 1;
if (k == 0) { free(y); return(k);}
d=0.0;
for (j=0; j<=n-1; j++) d=d+y[j]*y[j];
if (d+1.0==1.0) { free(y); return(-1);}
s=z/d;
for (j=0; j<=n-1; j++) x[j]=x[j]-s*y[j];
z=(*f)(x,y);
}
free(y); return(k);
}
//包含在文件SNSE.C中