没有合适的资源?快使用搜索试试~ 我知道了~
数值分析上机实习报告
5星 · 超过95%的资源 需积分: 10 24 下载量 91 浏览量
2011-12-23
01:02:35
上传
评论 2
收藏 256KB DOC 举报
温馨提示
试读
16页
数值分析上机实习报告包含了Householder变换、超松弛法、Gauss消去法、对分法求特征值、反幂法求解特征值及特征向量、三次样条插值、Newton法、Romberg计算积分值、Runge_Kutta求解微分方程组
资源详情
资源评论
资源推荐
《 数 值 分 析 》
上 机 实 习 题
指导老师:
姓 名:
学 号:
专 业: 结构工程
院 系: 土建学院
上海交通大学
上海交通大学
2006
2006
级研究生
级研究生
第一题
一 程序说明:
1 Householder 变换方法是:1958 年由 A.S. Householder 提出来的,它的乘法运算次
数仅是 Givenr 方法的一半,且只需要作 次开方运算。
归纳起来,对换矩阵三对角化的算法步骤为:
(1) 令 , ,已知 ,即 。
(2)
(3) ,
(4) 。
(5) 。
(6)
(7) , 。
2 用超松驰法求解 BX=b(取松驰因子 w=1.4, =0, 迭代 9 次)。
3 用列主元素消去法求解 BX=b:
n 阶方程组的系数矩阵为: a
11
a
12
…a
1n
b
1
a
21
a
22
…a
2n
b
2
………………
a
n1
a
n2
…a
nn
b
n
Gauss 消去法的算法为: l
ij
=a
ij
/a
jj
(a
jj
!=0) j=1,2…n, i=j+1,j+2…n
⑴ a
ij
=a
ij
-l
ik-1
a
k-1
i,j=k,k+1…n, k=2,3…n
b
i
=b
i
-l
ik-1
b
k-1
i=k,k+1…n, k=2,3…n
⑵ x
i
=(b
i
-∑a
ij
x
j
)/a
ii
i=n,n-1…1,j=i+1,i+2,…n
列主元素消去法是在 Gauss 消去法的基础上选主元,选取绝对值最大(或尽量大)的元
素为主元,使 l
ij
绝对值很小。
二 计算程序:
1 househloder 变换将 A 化为三对角阵 B
#include <stdio.h>
#include <math.h>
main()
{
int i,j,m,r,sign;
double A0[9][9],s,z,p,n,v,h,l,y[9],u[9],k,q[9],X[9],x[9]={0,0,0,0,0,0,0,0,0},B[9]
[9],g[9];
double A[9][9]={{12.38412,2.115237,-1.061074,1.112336,-
0.113584,0.718719,1.742382,3.067813,-2.031743},
{2.115237,19.141823,-3.125432,-1.012345,2.189736,1.563849,-
0.784165,1.112348,3.123124},
{-1.061074,-3.125432,15.567914,3.123848,2.031454,1.836742,-1.056781,0.336993,-
1.010103},
{1.112336,-1.012345,3.123848,27.108437,4.101011,-3.741856,2.101023,-0.71828,-
0.037585},
{-0.113584,2.189736,2.031454,4.101011,19.897918,0.431637,-
3.111223,2.121314,1.784317},
{0.718719,1.563849,1.836742,-3.741865,0.431637,9.789365,-0.103458,-
1.103456,0.238417},
{1.742382,-0.784165,-1.056781,2.101023,-3.111223,-0.103458,14.713846,3.123789,-
2.213474},
{3.067813,1.112348,0.336993,-0.71828,2.121314,-
1.103456,3.123789,30.719334,4.446782},
{-2.031743,3.123124,-1.010103,-0.037585,1.784317,0.238417,-
2.213474,4.446782,40.00001}};
double b[9]={2.1874369,33.992318,-25.173417,0.84671695,1.784317,-
86.612343,1.1101230,4.719345,
-5.6784392};
for(i=0;i<9;i++) /*给 A0 赋初值*/
for(j=0;j<9;j++)
A0[i][j]=A[i][j];
for(r=0;r<7;r++) /*求 */
{
s=0;
for(i=r+1;i<9;i++)
s=s+A[i][r]*A[i][r];
s=sqrt(s);
l=s*s+fabs(A[r+1][r])*s;
if(A[r+1][r]>0) sign=1;
else if(A[r+1][r]<0) sign=-1;
for(i=0;i<9;i++)
{
if(i<=r) u[i]=0;
else if(i==r+1) u[i]=A[r+1][r]+sign*s;
else u[i]=A[i][r];
}
for(i=0;i<9;i++) /*求 */
{ y[i]=0;
for(j=0;j<9;j++)
y[i]=y[i]+A[i][j]*u[j];
y[i]=y[i]/l;}
k=0;
for(i=0;i<9;i++) /*求 */
{
k=k+u[i]*y[i];
}
k=k/(2*l);
for(i=0;i<9;i++) /*求 */
{
q[i]=y[i]-k*u[i];
}
for(i=0;i<9;i++) /*求 */
for(j=0;j<9;j++)
A[i][j]=A[i][j]-q[i]*u[j]-q[j]*u[i];
}
printf("\nHousehold 变换矩阵 B 为:\n");
for (i=0;i<9;i++)
{printf("\n");
for(j=0;j<9;j++)
printf("%f,",A[i][j]);}
}
2 超松弛法求解 Bx=b
#include "stdio.h"
#include "math.h"
#define N 9
#define w 1.4
float A[N][N]={{12.384120,-4.893077,0,0,0,0,0,0,0},{-
4.893077,25.398417,6.494088,0,0,0,0,0,0},
{0,6.494088,20.611538,8.243930,0,0,0,0,0},{0,0,8.243930,23.422894,-
13.880069,0,0,0,0}, {0,0,0,-13.880069,29.698231,4.534562,0,0,0},
{0,0,0,0,4.534562,16.006021,4.881358,0,0}, {0,0,0,0,0,4.881358,26.013397,-
4.503611,0},{0,0,0,0,0,0,-4.503611,21.254171,4.504458},
{0,0,0,0,0,0,0,4.504458,14.534007}};
剩余15页未读,继续阅读
lcx87
- 粉丝: 0
- 资源: 18
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论4