计算数值方法实验报告材料太原理工大学Word格式.docx
- 文档编号:17786482
- 上传时间:2022-12-10
- 格式:DOCX
- 页数:29
- 大小:357.18KB
计算数值方法实验报告材料太原理工大学Word格式.docx
《计算数值方法实验报告材料太原理工大学Word格式.docx》由会员分享,可在线阅读,更多相关《计算数值方法实验报告材料太原理工大学Word格式.docx(29页珍藏版)》请在冰豆网上搜索。
0,则在区间((a+b)/2,b)内有零点,(a+b)/2=>
a,从①开始继续使用
中点函数值判断。
如果f[(a+b)/2]>
0,则在区间(a,(a+b)/2)内有零点,(a+b)/2<
=b,从①开始继续使用
这样就可以不断接近零点。
通过每次把f(x)的零点所在小区间收缩一半的方法,使区间的两个端点逐步迫近函数的零点,以求得零点的近似值
四、主要仪器设备
Vc2008,hp
五、结构程序设计
迭代法:
#include"
stdafx.h"
#include"
stdio.h"
math.h"
iostream"
usingnamespacestd;
floatmain()
{
floata;
cin>
>
a;
floatt,x;
x=a;
do{
x=sqrt((10-x*x*x)/4);
t=a;
a=x;
}while(fabs(a-t)>
0.5*1e-5);
printf("
x=%f"
a);
system("
pause"
);
}
割线法:
floatc,a=1.0,b=2.0;
//cin>
a>
b;
while
(1)
{
c=b-(b*b*b+4*b*b-10)*(b-a)/(b*b*b+4*b*b-(a*a*a+4*a*a));
if(fabs(b-c)<
0.5*0.000001)break;
b=c;
}
cout<
<
c;
六、结果讨论和分析
分析:
使用不同的方法,可以不同程度的求得方程的解,不同的方法速度不同。
实验地点
ZSA401
指导教师
李志
2012.4
实验二线性方程组的直接解法
线性方程组的直接解法
合理利用Gauss消元法、LU分解法、追赶法求解下列方程组:
①
②
③
④
(n=5,10,100………)
(1)了解线性方程组常见的直接解法,如Guass消元法、LU分解法、追赶法。
(2)加深对线性方程组求解方法的认识,掌握算法。
高斯分解法:
将原方程组化为三角形方阵的方程组:
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消元法:
floatmain()
{floata[3][4]={{1,2,3,14},{0,1,2,8},{2,4,1,13}};
floatx[3];
floatsum=0;
intk,i,j;
for(k=0;
k<
2;
k++)
for(i=k+1;
i<
3;
i++)
for(j=k+1;
j<
4;
j++)
a[i][j]=a[i][j]-a[i][k]/a[k][k]*a[k][j];
for(i=0;
for(j=0;
printf("
a[%d][%d]=%f,"
i,j,a[i][j]);
cout<
endl;
x[2]=a[2][3]/a[2][2];
for(k=1;
k>
=0;
k--)
{sum=0;
for(j=k+1;
{
sum+=a[k][j]*x[j];
}
x[k]=(a[k][3]-sum)/a[k][k];
}
for(i=0;
printf("
x[%d]=%f,"
i+1,x[i]);
LU分解法:
#include<
stdio.h>
math.h>
#defineL30
doublea[L][L],b[L],l[L][L],u[L][L],x[L],y[L];
intmain(){
intn,i,j,k,r;
scanf("
%d"
&
n);
for(i=1;
i<
=n;
++i){
for(j=1;
j<
++j){
%lf"
a[i][j]);
b[i]);
++i)
{
for(j=1;
++j)
l[i][j]=0;
u[i][j]=0.0;
for(k=1;
k<
++k){
for(j=k;
++j)
{
u[k][j]=a[k][j];
for(r=1;
r<
k;
++r)
{
u[k][j]-=l[k][r]*u[r][j];
}
for(i=k+1;
l[i][k]=a[i][k];
for(r=1;
++r){
l[i][k]-=l[i][r]*u[r][k];
l[i][k]/=u[k][k];
l[k][k]=1.0;
y[i]=b[i];
i;
y[i]-=l[i][j]*y[j];
for(i=n;
i>
0;
--i){
x[i]=y[i];
for(j=i+1;
x[i]-=u[i][j]*x[j];
}x[i]/=u[i][i];
printf("
%0.2lf\n"
x[i]);
return0;
追赶法:
voidmain()
FILE*f;
doublea[15],b[15],c[15],d[15];
doublet;
inti,n;
f=fopen("
zgf.txt"
"
r"
fscanf(f,"
&
n);
%lf%lf%lf"
b[1],&
c[1],&
d[1]);
for(i=2;
=n-1;
fscanf(f,"
%lf%lf%lf%lf"
a[i],&
b[i],&
c[i],&
d[i]);
a[n],&
b[n],&
d[n]);
fclose(f);
c[1]=c[1]/b[1];
d[1]=d[1]/b[1];
For(i=2;
t=b[i]-c[i-1]*a[i];
c[i]=c[i]/t;
d[i]=(d[i]-d[i-1]*a[i])/t;
d[n]=(d[n]-d[n-1]*a[n])/(b[n]-c[n-1]*a[n]);
for(i=n-1;
i>
=1;
i--)d[i]=d[i]-c[i]*d[i+1];
printf("
\n********************************\n"
for(i=1;
=n;
d[%2d]=%lf\n"
i,d[i]);
Zgf.txt文件中的内容是:
5
21-7
121-5
121-5
12-5
Gauss消元法:
分析
从消元过程可以看出,对于n阶线性方程组,只要各步主元素不为零,经过n-1步消元,就可以得到一个等价的系数矩阵为上三角形阵的方程组,然后再利用回代过程可求得原方程组的解.
消元过程相当于分解A为单位下三角阵L与上三角阵U的乘积,解方程组Ly=b
回代过程就是解方程组Ux=y。
其中的L为n阶单位下三角阵、U为上三角阵.
在A的LU分解中,L取下三角阵,U取单位上三角阵,这样求解方程组Ax=d的方法称为追赶法.
软件1012
2011.4
实验三线性方程组的迭代解法
线性方程组的迭代解法
使用雅可比迭代法或高斯-赛德尔迭代法对下列方程组进行求解。
学习使用雅可比迭代法或高斯-赛德尔迭代法
雅克比迭代法:
设线性方程组
Ax=b
的系数矩阵A可逆且主对角元素a11,a22,…,ann均不为零,令
D=diag(a11,a22,…,ann)
并将A分解成
A=(A-D)+D
从而线性方程组可写成
Dx=(D-A)x+b
则有迭代公式
x(k+1)=B1x(k)+f1
其中,B1=I-D-1A,f1=D-1b。
高斯-赛德尔迭代法:
{
floata[3][3]={{10,-1,-2},{-1,10,-2},{-1,-1,5}},b[3]={7.2,8.3,4.2};
floatx[3]={0,0,0},sum1,sum2;
inti,j,k,n=3;
for(k=0;
10;
{for(i=0;
n;
sum1=0;
sum2=0;
for(j=0;
i;
{
sum1=sum1+a[i][j]*x[j];
for(j=i+1;
sum2=sum2+a[i][j]*x[j];
x[i]=(b[i]-sum1-sum2)/a[i][i];
for(i=0;
i++)
{printf("
\n"
雅克比迭代:
floatx[3]={0,0,0},sum1;
sum1=0;
for(j=0;
{if(i==j)continue;
x[i]=(b[i]-sum1)/a[i][i];
for(i=0;
{printf("
printf("
六、实验结果与分析:
使用高斯-赛德尔和雅克比迭代都可以求出方程组的解,但是利用高斯-赛德尔迭代法所需的迭代次数比雅克比迭代少,能够更早的达到精度要求。
实验四最小二乘法拟合多项式
(1)了解矩阵特征值与特征向量问题解法,掌握幂法。
(2)加深对矩阵特征值与特征向量问题求解方法的认识,掌握算法。
(3)会进行误差分析。
学习使用最小二乘法拟合多项式
幂法:
由已知的非零向量x0和矩阵A的乘幂构造向量序列{xn}以计算矩阵A的按模最大特征值及其特征向量的方法,称为幂法。
迭代公式:
结果可取
五、结果讨论和分析
幂法是一种求任意矩阵A的按模最大特征值及其对应特征向量的迭代算法。
该方法的最大优点是计算简单,容易在计算机上实现,对稀疏矩阵较为适合,但有时收敛速度很慢。
综合楼六层606室
王峥
计算机科学与技术
计算机
1111111111
某某
2011-6-20
实验五代数插值
一、课题名称
使用拉格朗日插值法或牛顿插值法求解:
已知f(x)在6个点的函数值如下表所示,运用插值方法,求f(0.596)的近似值。
x
0.40
0.55
0.65
0.80
0.90
1.05
f(x)
0.41075
0.57815
0.69675
0.88811
1.02652
1.25386
二、目的和意义
学习使用拉格朗日插值法或牛顿插值法求解
三、计算公式
设函数在区间[a,b]上n+1互异节点x0,x1,…,xn上的函数值分别为y0,y1,…,yn,求n次插值多项式Pn(x),满足条件
Pn(xj)=yj,j=0,1,…,n
令
Ln(x)=y0l0(x)+y1l1(x)+…+ynln(x)=∑yili(x)
其中l0(x),l1(x),…,ln(x)为以x0,x1,…,xn为节点的n次插值基函数,则Ln(x)是一次数不超过n的多项式,且满足
Ln(xj)=yj,L=0,1,…,n
再由插值多项式的唯一性,得
Pn(x)≡Ln(x)
四、结构程序设计
#include<
stdlib.h>
iostream.h>
typedefstructdata
floatx;
floaty;
}Data;
//变量x和函数值y的结构
Datad[20];
//最多二十组数据
floatf(ints,intt)//牛顿插值法,用以返回插商
if(t==s+1)
return(d[t].y-d[s].y)/(d[t].x-d[s].x);
else
return(f(s+1,t)-f(s,t-1))/(d[t].x-d[s].x);
floatNewton(floatx,intcount)
intn;
cout<
"
请输入n值(即n次插值):
;
//获得插值次数
if(n<
=count-1)//插值次数不得大于count-1次
break;
cls"
floatt=1.0;
floaty=d[0].y;
floatyt=0.0;
for(intj=1;
t=(x-d[j-1].x)*t;
yt=f(0,j)*t;
y=y+yt;
returny;
floatlagrange(floatx,intcount)
floaty=0.0;
for(intk=0;
count;
k++)//这儿默认为count-1次插值
floatp=1.0;
//初始化p
for(intj=0;
{//计算p的值
if(k==j)continue;
//判定是否为同一个数
p=p*(x-d[j].x)/(d[k].x-d[j].x);
y=y+p*d[k].y;
//求和
//返回y的值
floatx,y;
intcount;
请输入x[i],y[i]的组数,不得超过20组:
//要求用户输入数据组数
if(count<
=20)
//检查输入的是否合法
//获得各组数据
for(inti=0;
请输入第"
i+1<
组x的值:
d[i].x;
组y的值:
d[i].y;
请输入x的值:
//获得变量x的值
x;
intchoice=3;
请您选择使用哪种插值法计算:
(0):
退出"
(1):
Lagrange"
(2):
Newton"
输入你的选择:
choice;
//取得用户的选择项
if(choice==2)
你选择了牛顿插值计算方法,其结果为:
y=Newton(x,count);
break;
//调用相应的处理函数
if(choice==1)
你选择了拉格朗日插值计算方法,其结果为:
y=lagrange(x,count);
if(choice==0)
输入错误!
!
x<
"
y<
//输出最终结果
拉格朗日插值的优点是插值多项式特别容易建立,缺点是增加节点是原有多项式不能利用,必须重新建立,即所有基函数都要重新计算,这就造成计算量的浪费。
实验六最小二乘法拟合多项式
给定数据点(xi,yi),用最小二乘法拟合数据的多项式,并求平方误差。
xi
0.5
0.6
0.7
0.8
0.9
1.0
yi
1
1.75
1.96
2.19
2.44
2.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算 数值 方法 实验 报告 材料 太原 理工大学