计算数值实验报告太原理工大学文档格式.docx
- 文档编号:14862141
- 上传时间:2022-10-25
- 格式:DOCX
- 页数:31
- 大小:128.21KB
计算数值实验报告太原理工大学文档格式.docx
《计算数值实验报告太原理工大学文档格式.docx》由会员分享,可在线阅读,更多相关《计算数值实验报告太原理工大学文档格式.docx(31页珍藏版)》请在冰豆网上搜索。
实验一方程求根
一、课题名称
方程求根:
熟悉使用、迭代法、牛顿法、割线法等方法对给定的方程进行根的求解。
选择上述方法中的两种方法求方程:
二分法f(x)=x3+4x2-10=0在[1,2]的一个实根,且要求满足精度|x*-xn|<
0.5×
10-5
迭代法:
用迭代公式x=f(x)进行迭代计算,直到满足|x*-xn|<
10-5为止。
二分法:
设f(x)在[a,b]上连续,且f(a1)*f(x1)<
0,记(a2,b2)=(x1,b1)带入计算式进行计算直到|x*-xn|<
二、目的和意义
(1)了解非线性方程求根的常见方法,如二分法、迭代法、牛顿法、割线法。
(2)加深对方程求根方法的认识,掌握算法。
会进行误差分析,并能对不同方法进行比较。
三、计算公式
(1)迭代法
1).首先对给定的计算公式进行变形使其能够迭代或者找出相应迭代速度较快的式子。
2).带入求好的式子到循环中去比如:
(2)二分法:
f(x)在区间(x,y)上连续
1).先找到a、b属于区间(x,y),使f(a),f(b)异号,说明在区间(a,b)一定有零点,然后求f[(a+b)/2],
2).如果f[(a+b)/2]=0,该点就是零点,
如果f[(a+b)/2]<
0,则在区间((a+b)/2,b)有零点,反之在(a,(a+b)/2)有零点带入1)中继续。
四、主要仪器设备
Vc++9.0C-freeCodeBlocks
五、结构程序设计
迭代法:
#include<
stdio.h>
math.h>
main()
{
inti;
doublexn[15],y,x1,x2,m;
printf("
请输入x1,x2的值:
\n"
);
scanf("
%lf%lf"
&
x1,&
x2);
请输入精度要求:
%lf"
m);
nxn\n"
);
i=0;
do{
xn[0]=(x1+x2)/2;
xn[i+1]=sqrt(10/(4+xn[i]));
//迭代
printf("
%5d%5lf\n"
i,xn[i]);
y=fabs(xn[i+1]-xn[i]);
i++;
if(y<
m)break;
}while
(1);
}
main()
intm,n,o,p;
doublea,b,l;
请输入x^3,x^2,x的系数和常数p:
scanf("
%d%d%d%d"
m,&
n,&
o,&
p);
//140-10
请输入x1,x2:
a,&
b);
//12
请输入精度要求:
l);
//0.5x10^5
nanbnxnf(xn)\n"
doublex,fx;
inti=1;
do
{
x=(b+a)/2;
fx=m*x*x*x+n*x*x+o*x+p;
%5d%5f%5f%5f%5f\n"
i,a,b,x,fx);
i++;
if(fx==0)break;
if(fx>
0)b=x;
elseif(fx<
0)a=x;
if((b-a)<
l)
break;
//进行计算并返值
}
六、结果讨论和分析
二分法:
分析讨论:
使用不同的方法,可以不同程度的求得方程的解,不同的方法速度不同,求得的结果也稍有区别,当然和要求精度也有关系。
刚开始的时候用数组对二分法进行求解,发现循环到第二次就无法实现值的传递,于是换了另外一种方法代替了数组。
流程图:
实验地点
综合楼五层506室
指导教师
王峥
实验二线性方程组的直接解法
线性方程组的直接解法
合理利用Gauss消元法、LU分解法、追赶法求解下列方程组:
①②
③④(n=5,10,100…)
(1)了解线性方程组常见的直接解法,如Guass消元法、LU分解法、追赶法。
(2)加深对线性方程组求解方法的认识,掌握算法。
(3)会进行误差分析,并能对不同方法进行比较。
高斯分解法:
将原方程组化为三角形方阵的方程组:
lik=aik/akk
aij=aij-lik*akjk=1,2,…,n-1
i=k+1,k+2,…,nj=k+1,k+2,…,n+1
由回代过程求得原方程组的解:
xn=ann+1/ann
xk=(akn+1-∑akjxj)/akk(k=n-1,n-2,…,2,1)
LU分解法:
将系数矩阵A转化为A=L*U,L为单位下三角矩阵,U为普通上三角矩阵,然后通过解方程组l*y=b,u*x=y,来求解x.
追赶法:
用来求对角方程组;
将系数矩阵A转化为A=L*U,L为普通下n-1对角矩阵,U为单位上n-1对角矩阵,然后通过解方程组l*y=b,u*x=y,来求解x.
Gauss消元法:
#include<
iostream>
#include<
cmath>
usingnamespacestd;
intmain()
{
intn,i,j,k;
doublea[100][100],b[100],o;
cout<
<
"
输入未知数个数:
endl;
cin>
>
n;
输入数列:
for(i=1;
i<
=n;
i++)
for(j=1;
j<
=n+1;
j++)
cin>
a[i][j];
for(j=i+1;
if(fabs(a[j][i])>
1e-7)
{
o=a[i][i]/a[j][i];
for(k=i;
k<
k++)
a[j][k]=a[j][k]*o-a[i][k];
}
for(i=n;
i>
0;
i--)
b[i]=a[i][n+1]/a[i][i];
for(j=i-1;
j>
j--)
a[j][n+1]=a[j][n+1]-b[i]*a[j][i];
}
解得:
i++)cout<
b[i]<
//system("
pause"
return0;
列主元素消元法:
#include<
#defineN20
voidload();
floata[N][N];
intm;
intmain(){
inti,j;
intc,k,n,p,r;
floatx[N],l[N][N],s,d;
下面请输入未知数的个数m="
;
m;
请按顺序输入增广矩阵a:
load();
for(i=0;
i++)
{
for(j=i;
j++)
c=(fabs(a[j][i])>
fabs(a[i][i]))?
j:
i;
/*
找列最大元素
*/
for(n=0;
n<
m+1;
n++)
{s=a[i][n];
a[i][n]=a[c][n];
a[c][n]=s;
}/*
将列最大数防在对角线上
for(p=0;
p<
p++)
a[i][p]<
\t"
for(k=i+1;
k++)
l[k][i]=a[k][i]/a[i][i];
for(r=i;
r<
r++)/*
化成三角阵
a[k][r]=a[k][r]-l[k][i]*a[i][r];
}
x[m-1]=a[m-1][m]/a[m-1][m-1];
for(i=m-2;
=0;
i--)
d=0;
for(j=i+1;
d=d+a[i][j]*x[j];
x[i]=(a[i][m]-d)/a[i][i];
求解
该方程组的解为:
x["
]="
x[i]<
voidload()
inti,j;
for(i=0;
for(j=0;
cin>
LU分解法:
voidsolve(floatl[][100],floatu[][100],floatb[],floatx[],intn)
{inti,j;
floatt,s1,s2;
floaty[100];
for(i=1;
i++)/*第一次回代过程开始*/
{s1=0;
for(j=1;
t=-l[i][j];
s1=s1+t*y[j];
y[i]=(b[i]+s1)/l[i][i];
for(i=n;
=1;
i--)/*第二次回代过程开始*/
s2=0;
for(j=n;
j--)
t=-u[i][j];
s2=s2+t*x[j];
x[i]=(y[i]+s2)/u[i][i];
voidmain()
{floata[100][100],l[100][100],u[100][100],x[100],b[100];
inti,j,n,r,k;
floats1,s2;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算 数值 实验 报告 太原 理工大学