计算方法实验指导书有例程Word下载.docx
- 文档编号:15354160
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:15
- 大小:167.16KB
计算方法实验指导书有例程Word下载.docx
《计算方法实验指导书有例程Word下载.docx》由会员分享,可在线阅读,更多相关《计算方法实验指导书有例程Word下载.docx(15页珍藏版)》请在冰豆网上搜索。
(4)消元,对,计算对,计算
步骤2:
回代过程:
(1)若则矩阵奇异,程序结束;
否则执行
(2);
(2)对,计算
[实验内容]
在课后习题中选择一个求解线性方程组的题编程计算。
交回实验报告与计算结果
[实验程序]
(由学生独立完成)
参考程序:
列主元消去法
#include"
math.h"
voidzhuyuan(k,n,a)
intk,n;
floata[5][6];
{intt,i,j;
floatp,q;
p=fabs(a[k][k]);
t=k;
for(i=k+1;
i<
=n;
i++)
if(fabs(a[i][k])>
p)
{p=fabs(a[i][k]);
t=i;
}
for(j=k;
j<
=n+1;
j++)
{q=a[k][j];
a[k][j]=a[t][j];
a[t][j]=q;
}
voidshuru(n,a)
intn;
{inti,j;
printf("
inputa[i][j]:
\n"
);
for(i=0;
{for(j=0;
{scanf("
%f,"
%a[i][j]);
%8.5f"
a[i][j]);
voidxiaoyuan(n,a)
{int(k=0;
k<
n;
k++)
{zhuyuan(k,n,a);
for(j=k+1;
a[i][j]=a[i][j]-a[i][k]*a[k][j]/a[k][k];
voidhuidai(n,a,x)
floata[5][6],x[5];
{intk,j;
x[n]=a[n][n+1]/a[n][n];
for(k=n-1;
k>
=0;
k--)
{x[k]=a[k][n+1];
x[k]=x[k]-a[k][j]*x[j];
x[k]=x[k]/a[k][k];
main()
{intn,i;
floata[5][6],x[5];
inputn:
\nn="
scanf("
%d"
&
n);
%d\n"
n);
n=n-1;
shuru(n,a);
huidai(n,a,x);
for(i=0;
x[%d]=%f\n"
i+1,x[i]);
}/*说明:
本程序只能求解方程个数与未知量个数相同,且系数行列式不为零的线形方程组。
*/
例求解线形方程组:
(书118页2
(1))
此程序运行结果如下:
n=4
1.000000.832400.767500.983108.89970
0.832400.693000.640000.819007.41440
0.767500.640000.591100.758006.85280
0.983100.819000.758000.005504.91710
x[1]=1.000094
x[2]=1.999953
x[3]=2.999929
x[4]=4.000000
实验二最小二乘法
1.曲线拟合的最小二乘法的基本思路和拟合步骤
2.能根据给定的函数值表构造出次数不相同的拟合多项式。
1.最小二乘法的基本思路
已知数据对,求多项式
使得为最小,这就是一个最小二乘问题。
2.最小二乘法算法描述:
用线性函数为例,拟合给定数据。
输入值,及;
步骤2:
建立正规方程组
步骤3:
解法方程组,求出系数;
步骤4:
输出。
在课后习题中选择一个题目编程计算。
最小二乘拟合
#include"
lzhuyuan.c"
/*lzhuyuan.c为列主元消去法程序*/
voidnihe(m,a)
intm;
floata[5][6];
{intn,i,j,k;
floatx[9],y[9],b[9];
printf("
n="
%d,&
inputx[i],y[i]:
%f,%f,"
x[i],&
y[i]);
%11.6f,%11.6f\n"
x[i],y[i]);
b[i]=1
=m;
{for(k=0;
{a[i][0]=a[i][0]+b[k];
a[i][m+1]=a[i][m+1]+b[k]*y[k];
b[k]=b[k]*x[k];
for(j=1;
{for(i=0;
=m-1;
a[i][j]=a[i+1][j-1];
for(k=0;
{a[m][j]=a[m][j]+b[k];
=m+1;
%11.6f,"
main()
{intm,i;
staticfloata[5][6],z[5];
inputm:
m="
m);
m);
nihe(m,a);
xiaoyuan(m,a);
huidai(m,a,z);
for(i=i;
\na[%d]=%-11.6f"
i,z[i]);
_
用最小二乘法将其拟合一条二次曲线。
(书174页,例1)程序运行结果如下:
Inputm:
m=2
Inputn:
n=8
Inputx[i],y[i]:
1.000000,2.000000
3.000000,7.000000
4.000000,8.000000
5.000000,10.000000
6.000000,11.000000
7.000000,11.000000
8.000000,10.000000
9.000000,9.000000
10.000000,8.000000
9.000000,53.000000,381.000000,76.000000,53.000000,381.000000,3017.000000,489.000000,381.000000,3017.000000,25317.000000,3547.000000,
A[0]=-1.459655
A[1]=3.605306
A[2]=-0267570
实验三龙贝格方法
1.理解龙贝格方法的基本思路
2.用龙贝格方法设计算法,编程求解一个数值积分的问题。
[实验方法]
1.龙贝格方法的基本思路
龙贝格方法是在积分区间逐次二分的过程中,通过对梯形之值进行加速处理,从而获得高精度的积分值。
2.龙贝格方法的算法
步骤1准备初值和,用梯形计算公式计算出积分近似值
步骤2按区间逐次分半计算梯形公式的积分近似值
令
,
计算
步骤3按下面的公式积分(为便于编程,写下列形式)
梯形公式:
辛普生公式:
龙贝格公式:
步骤4精度控制
当,(为精度)时,终止计算,并取为近似值,否则,将步长折半,转步骤2。
龙贝格方法
#include“math.h”
Floatf(x)
Floatx;
{floaty;
Y=exp(-x*x);
Return(y);
Main()
{floata,b,h,x,R,eps,S,T[20];
Inti,j,m=2,g;
Printf(“\ninputa,b,esp:
\n”)
Scanf(“%f,%f,%f”,&
a,&
b,&
eps);
Printf(“a=%f,b=%f,eps=%f\n”,a,b,eps);
h=b-a;
t[1]=h*(f(a)+f(b))/2;
t[2]=(T[1]+h*f(a+h/2))/2;
t[1]=(4*T[2]-T[1])/3;
for(i=2;
=3;
{S=0;
for(j=I;
=2*m-1;
j=j+2)
{x=a+j*h/m/2;
S=s+f(x);
T[i+1]=(T[i]+h*s/m)/2;
G=1;
For(j=I;
j>
=1;
j--)
{g=4*g;
T[j]=(T[j+1]*g-T[j])/(g-1);
M=2*m;
R=T[1];
for(i=4;
;
{s=0;
{x=a+j*h/m/2;
=i-2;
if(fabs(T[i-2]-R)<
eps)break;
m=2*m;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算方法 实验 指导书 例程