教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 初中教育 >

北航研究生数值分析上机作业 三 (报告+所有程序大全)(3)

来源:网络收集 时间:2025-09-19
导读: //////////////// L=LL; U=UU; A=AA; b=bb; ///////////// kk=0; ii=0; jj=0; pp=0; qq=0; ////////////////////////////////// for(ii=0;iin;ii++) //对A_temp赋值 for(jj=0;jjn;jj++) A_temp[ii][jj]=A(ii,jj); f

//////////////// L=LL; U=UU; A=AA; b=bb;

///////////// kk=0; ii=0; jj=0; pp=0; qq=0;

////////////////////////////////// for(ii=0;ii<n;ii++) //对A_temp赋值 for(jj=0;jj<n;jj++)

A_temp[ii][jj]=A(ii,jj);

for(ii=0;ii<n;ii++) L(ii,ii)=1.0;

for (kk=0;kk<n;kk++) //总循环求出L U { sum_answer=0; s_count=kk;

for(pp=kk;pp<n;pp++)//doolitte 选主元 {

if (kk==0)

sum_answer=0; else

for(qq=0;qq<kk;qq++)

sum_answer=sum_answer+L(pp,qq)*U(qq,pp);

s=A_temp[pp][kk]-sum_answer; if (s>s_temp) {

s_temp=s; s_count=pp; }

else if (s<(-1.0)*s_temp) {

s_temp=(-1.0)*s; s_count=pp;

牛人报告,供大家参考,非常鄙视抄袭者。P.S. 北航数值分析吕老师讲的非常好,鼓励大家选这门课,能够学到很多东西。有问题联系作者!

} else ; }

for(pp=0;pp<n;pp++) //换位A_temp {

temp=A_temp[s_count][pp];

A_temp[s_count][pp]=A_temp[kk][pp]; A_temp[kk][pp]=temp; }

for(pp=0;pp<kk;pp++) //换位L {

temp=L(s_count,pp);

L(s_count,pp)=L(kk,pp); L(kk,pp)=temp; }

temp=b(s_count); b(s_count)=b(kk); b(kk)=temp;

for (ii=kk;ii<n;ii++) //先求一行U {

if(kk==0)

U(kk,ii)=A_temp[kk][ii]; else {

sum_answer=0;

for(qq=0;qq<kk;qq++)

sum_answer=sum_answer+L(kk,qq)*U(qq,ii);

U(kk,ii)=A_temp[kk][ii]-sum_answer; } }

for(ii=kk+1;ii<n;ii++) //求出一列L {

sum_answer=0;

for(qq=0;qq<kk;qq++)

sum_answer=sum_answer+L(ii,qq)*U(qq,kk);

L(ii,kk)=(A_temp[ii][kk]-sum_answer)/U(kk,kk);

牛人报告,供大家参考,非常鄙视抄袭者。P.S. 北航数值分析吕老师讲的非常好,鼓励大家选这门课,能够学到很多东西。有问题联系作者!

} } }

6) 回代求解方程组

#include<stdio.h> #include<math.h> #define size 4

#define L(a,b) *((double *)L+(a)*(size)+b) //L U 的宏定义,以方便操作二维数组

#define U(a,b) *((double *)U+(a)*(size)+b)

#define x(a) *((double *)x+a) //L U 的宏定义,以方便操作二维数组 #define y(a) *((double *)y+a) #define b(a) *((double *)b+a)

//#define xx(a) xx[a]

//A*uu=yy => L*U*uu=yy =>L*xx=yy && U*uu=xx

void huidai(double **LL,double **UU,double **bb,double **xx) //回代法求xx, LUx=b {

double **L; double **U; double **b; double **x;

double y[size]={0}; double sum_answer=0;

int ii=0; int jj=0;

L=LL; U=UU; b=bb; x=xx;

//迭代Ly=b y[0]=-b(0);

for(ii=1;ii<size;ii++)

牛人报告,供大家参考,非常鄙视抄袭者。P.S. 北航数值分析吕老师讲的非常好,鼓励大家选这门课,能够学到很多东西。有问题联系作者!

{ }

sum_answer=0;

for(jj=1;jj<ii;jj++) {

sum_answer=sum_answer+L(ii,jj)*y[jj]; }

y[ii]=-b(ii)-sum_answer;

//迭代Ux=y

x(size-1)=y[size-1]/U((size-1),(size-1));

for(ii=size-2;ii>=0;ii--) {

sum_answer=0;

for(jj=ii+1;jj<size;jj++) {

sum_answer=sum_answer+U(ii,jj)*x(jj); }

x(ii)=(y[ii]-sum_answer)/U(ii,ii); } }

7) 求解C=(B’*B)-1*(B’*U*G)*(G’*G)

#include<stdio.h> #include<math.h> #define size 10 //#define halfBW 3

#define L(a,b) L[a][b]//*((double *)L+(a)*(size)+b) //L U 的宏定义,以方便操作二维数组

#define U(a,b) U[a][b]//*((double *)U+(a)*(size)+b)

#define A(a,b) *((double *)A+(a)*(size)+b) //A 的宏定义,以方便操作二维数组 #define B(a,b) *((double *)B+(a)*(size)+b) //B 的宏定义,以方便操作二维数组 #define M(a,b) *((double *)M+(a)*(size)+b) //B 的宏定义,以方便操作二维数组 #define C(a,b) *((double *)C+(a)*(size)+b) //B 的宏定义,以方便操作二维数组 //#define X(a,b) *((double *)X+(a)*(size)+b) //A 的宏定义,以方便操作二维数组

#define X(a,b) X[a][b]

//#define b(ii) *((double *)b+ii)

void Matrix_LU(double **AA,double **BB,double **MM,double **CC,int

…… 此处隐藏:961字,全部文档内容请下载后查看。喜欢就下载吧 ……
北航研究生数值分析上机作业 三 (报告+所有程序大全)(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/46819.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)