文档介绍:目录
一、实****题目编号
二、需求分析及总体设计
三、程序实现
四、上机操作
五、心得与总结
一实验编号
利用牛顿迭代法求在x=。
利用高斯消去法求三元一次方程的解。
二需求分析和总体设计
编号01 用牛顿迭代求解高次方程
因为题目限制比较多,即给出确定方程以及迭代初值,并且限制了迭代方法,所以算法比较简单也比较唯一,简单利用循环即可实现。不作详细介绍,只附上代码。
编号03 高斯方程求解三元一次方程。
同样,题目限制了高斯方程,并且给出了确定方程。在这里,为了提高代码的通用性,所以选择了方程由键盘输入。同时对矩阵的行列数利用了宏定义,提高了代码的利用率,可以用来解决任何多远一次方程,当然这里并没有考虑到主元素为0的情况,即并未使用列主元素的高斯消去,害怕离题太远。
至于高斯消去算法的实现,主要通过灵活运用循环迭代实现。并且在程序实现的过程中加进去了中间过程的输出,这样代码也可以用来求解逆矩阵。进一步提高了代码的利用率。
三程序实现
编号1 代码如下所示
#include""
#include""
#include""
void main()
{
float x0,f,f1;
float x1;
x1 = ;
do
{
x0=x1;
f=x0*x0*x0-3*x0-1;
f1=3*x0*x0-3;
x1=x0-f/f1;
}
while(fabs(x1-x0)>=1e-5); /*牛顿迭代的实现*/
printf("根是%f\n",x1);
}
编号2 高斯消去法
#define N 3
#define M 4 /*宏定义*/
#include""
void main()
{
float a[N][M];
int i,j;
for(i=0;i<N;i++)
for(j=0;j<M;j++)
scanf("%f",&a[i][j]); /*方程由键盘输入*/
int m;
for (m=0;m<N-1;m++)
{
for(i=m+1;i<N;i++)
{
float t;
t = a[i][m];
for(j=m;j<M;j++)
{
a[i][j]=a[i][j]-t/a[m][m]*a[m][j];
}
}
} /*实现高斯消去*/
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
printf("%f ",a[i][j]) ;
/*输出中间过程,提高代码利用率*/
printf("\n");
}
for(m=N-1;m>0;m--)
{
for(i=m-1;i>=0;i--)
{
float t ;
t = a[i][m];
for(j=M-1;j>=0;j--)
a[i][j]=a[i][j]-t/a[m][m]*a[m][j];
}
}
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
pr