矩阵与数值分析编程实验报告..doc
文本预览下载声明
《矩阵与数值分析》实验报告
对于数列,有如下两种生成方式
1、首项为,递推公式为;
2、前两项为,递推公式为;
给出利用上述两种递推公式生成的序列的第50项。
解:首先对递推公式1,用C++编程如下:
#include iostream.h
void main()
{
double A[50]={1.0,1.0/3};
for (int i=1;i50;i++)
{
A[i]=1.0/3*A[i-1];
cout第i+1项的值:A[i]endl;
}
}
运行结果如下图所示:
对递推公式2,用C++编程如下:
#include iostream.h
void main()
{
double A[50]={1.0,1.0/3};
for (int i=2;i50;i++)
{
A[i]=10.0/3*A[i-1]-A[i-2];
cout第i+1项的值:A[i]endl;
}
}
运行结果如下图所示:
利用迭代格式
及Aitken加速后的新迭代格式求方程在内的根
解:利用一般迭代格式用C++编程代码如下:
#includeiostream
#includemath.h
using namespace std;
double Fun(double x);
int main()
{
double a,B,Number,r=1.0e-6;
a=1.0;
Number=0;
do
{
B=a;
a=Fun(a);
Number++;
} while((a-B)r||(a-B)-r);
coutThe formal iterative way!endl;
coutIteration Numbers is Numberendl;
coutThe answer is aendl; //输出迭代次数和结果
return 0;
}
double Fun(double x)
{
return sqrt(10.0/(x+4));
}
计算结果如下图所示:
用Aiken加速后的新迭代格式求解用C+编程代码如下:
#includeiostream
#includemath.h
using namespace std;
double Function(double x)//定义函数
{
return sqrt(10.0/(x+4));
}
int main()
{
double a,i=0,a1,y1,y2,r=1.0e-6;
a=1.0;
do
{
a1=a;
y1=Function(a);
y2=Function(y1);
a=y2-(y2-y1)*(y2-y1)/(y2-y1*2+a);
i++;
}while((a-a1)r||(a-a1)-r);
cout用Aitken迭代法计算结果如下:\n;
cout迭代次数为: iendl;
cout计算结果为: aendl;//输出迭代次数和结果
return 0;
}
解线性方程组
分别Jacobi迭代法和Gauss-Seidel迭代法求解线性方程组
迭代法计算停止的条件为:.
解:1Jacobi迭代法解方程,代码如下:
#include iostream
#include math.h
using namespace std;
void main()
{
double a[4][4]={{6.0,2.0,1.0,-2.0},{2.0,5.0,0.0,-2.0},
{-2.0,0.0,8.0,5.0},{1.0,3.0,2.0,7.0}};
double b[4]={4.0,7.0,-1.0,0.0}, x[4]={0},x1[4],r=1.0e-6,t,s;
int i,j,c,d,e=0;
cout.precision(8);
do
{
for (c=0;c4;c++)
{
x1[c]=x[c];
}
for (i=0;i4;i++)
{
s=0.0;
for (j=0;j4;j++)
{
if(j!=i)
s+=a[i][j]*x[j];
}
x[i]=(b[i]-s)/a[i][i];
}
t=fabs(x[0]-x1[0]);
for (d=0;d4;d++)
{
coutx[d] ;
if (tfabs(x[d]-x1[d]))
t=fabs(x[d]-x1[d]);
}
coutendl;
e++;
if(tr)
break;
} whi
显示全部