步骤:

假设用紧凑格式的Doolittle法已经完成了第 r-1 (1<=r<=n) 步分解,第 r 步分解,首先在数组 A 的第 r 列主对角元以下(含主对角元)

选主元,具体步骤:

1、计算中间量 Si ,并存入 A( i , r ) ( r = 1 : n-1 ).

A( i , r )

(i = r , ... , n ).

2、挑选绝对值最大的 Si,即确定行号 ir , 满足

| Sir | = max ( | Si | , r<=i<=n )

3、换行。如果 ir != r ,则交换数组 A 中的第 r 行与 ir 行的对应元素。交换位置的元素以它在 A 中所处的新位置记。此时

urr = A( r, r ) .

4、分解计算

A( i , r )

A( r , r)

按上述方法完成 n 步分解,便实现了系数矩阵分解 PA=LU.

C语言代码(未考虑无解情况):

#include

#include

#include

#define M 128

double mat[M][M];

double ans[M],y[M];

int n;

bool Read()

{

int i,j;

if(1!=scanf("%d",&n)) return false;

for(i=0;i

for(j=0;j<=n;j++)

scanf("%lf",&mat[i][j]);

}

return true;

}

void Print()

{

int i,j;

for(i=0;i

for(j=0;j<=n;j++)

printf("%.2f/t",mat[i][j]);

puts("");

}

puts("");

}

void Work()

{

int i,k,r,t;

double d,tmp[M];

for(r=0;r

//

for(i=t=r;i

for(k=0,d=0.0;k

d+=mat[i][k]*mat[k][r];

mat[i][r]-=d;

if(fabs(mat[i][r])>fabs(mat[t][r]))

t=i;

}

Print();

memmove(tmp,mat[t],sizeof(tmp));

memmove(mat[t],mat[r],sizeof(tmp));

memmove(mat[r],tmp,sizeof(tmp));

Print();

for(i=r+1;i

mat[i][r]/=mat[r][r];

for(i=r+1;i<=n;i++){

for(d=0.0,k=0;k

d+=mat[r][k]*mat[k][i];

mat[r][i]-=d;

}

Print();

}

}

void Result()

{

int r,i;

double tmp;

for(r=n-1;r>=0;r--){

for(i=r+1,tmp=0.0;i

tmp+=mat[r][i]*ans[i];

ans[r]=(mat[r][n]-tmp)/mat[r][r];

}

for(i=0;i

printf("%lf/t",ans[i]);

puts("");

}

int main()

{

while(Read()){

Work();

Print();

Result();

}

return 0;

}

/*

3

1 -1 3 1

2 -4 6 4

4 -9 2 1

*/

部分选主元matlab,部分选主元的Doolittle分解 | 学步园相关推荐

  1. 全选主元matlab,全选主元高斯-约当法实矩阵求逆及传统方法求逆

    /* 算法没有做过什么改动,加上了内存释放的部分. 算法介绍 矩阵求逆在3D程序中很常见,主要应用于求Billboard矩阵.按照定义的计算方法乘法运算,严重影响了性能.在需要大量Billboard矩 ...

  2. matlab角点坐标获取,MatLab角点检测(harris经典程序) | 学步园

    这是源博客的出处,鄙人转过来是为了更好的保存!供大家一起学习!已将原始的博客的文章的位置附在上面! 至于代码的完整性和可运行性需要大家去自己考量! %MatLab角点检测程序harris. ori_i ...

  3. MATLAB递归将数字一个个输出,数米粒个数和每个米粒面积的matlab算法实现(递归)。 | 学步园...

    使用Matlab软件自带的rice.png图片进行处理. 不知道使用的函数利用help function-name 或者 lookfor function-name 查看 这里是实现的主要代码段 %T ...

  4. matlab写出函数表达式,matlab 由状态空间表达式求传递函数 笔记 | 学步园

    1 内容 有一个两输入两输出线性系统 ,求该系统的传递函数表达式子. 2 求解 2.1 相关函数 状态空间表达式的传递函数用ss2tf函数来求解 函数原型 [b,a] = ss2tf(A,B,C,D, ...

  5. matlab clabel函数用法,CLabel的用法 | 学步园

    DDX_Control(pDX, IDC_STATIC_CONNSTATE, m_labConnState); IDC_STATIC_CONNSTATE  是某静态控件的ID,设置这个静态控件的控制变 ...

  6. matlab radiogroup,RadioGroup和CheckBox的使用 | 学步园

    1.布局文件: android:layout_width="fill_parent" android:layout_height="fill_parent" a ...

  7. matlab怎么计算行列式,Matlab 线性代数(一)–行列式与方程组求解 | 学步园

    1. %用克莱姆法则求解方程组 clear n=input('方程个数=') A=input('系数矩阵A=') b=input('常数列向量b=') if((size(A)~=[n,n])|(siz ...

  8. 用matlab对图像进行边缘填充,matlab中的图像边界填充函数 | 学步园

    padarray 功能:填充图像或填充数组. 用法:B = padarray(A,padsize,padval,direction) A为输入图像,B为填充后的图像, padsize给出了给出了填充的 ...

  9. matlab用lu求逆矩阵,Matlab实现——求矩阵的逆(LU分解) | 学步园

    Program  ( :Solve By Factorization with Pivoting ) 思路及原理: 就得到: 程序: function X=Ni(A) %Input - A is an ...

最新文章

  1. R函数:交集intersect、并集union、找不同setdiff、判断相同setequal
  2. 一些 Linux 系统故障修复和修复技巧
  3. tcp 发送 最大数据量_网络基础知识夯实总结(三):TCP协议
  4. Scoped CSS规范草案
  5. CCNA笔记之第十四节:RIP协议(1)
  6. java double的加法_java Double 进行加减乘除
  7. http://blog.sina.com.cn/s/blog_5007d1b10100ltwh.html
  8. vector容器,容量和大小的操作
  9. 银监计算机类考试题库,干货!国考银监会财经类面试题库
  10. 简要介绍电源效率测试
  11. 中国计算机省份排名,大变局开启!2019全国各省GDP排名出炉,哪些省份掉队了?...
  12. Android程序员学WEB前端(12)-JavaScript(3)-正则表达式-Sublime
  13. 为什么Java小伙对JavaScript和Node.js如此兴奋?
  14. 浅谈电动自行车智能充电管理系统的设计及应用
  15. Proxifier v3.15
  16. 智能云时代,谁来守护我们的安全?
  17. C#工控上位机实例_工控学习,搞工控的到底什么是上位机,什么是下位机?
  18. 微信“小程序”来了,短期不可高估,长期不可低估
  19. Android 使用crosswalk实例
  20. SpringBoot应用WebSocket实现在线聊天

热门文章

  1. pygame中blit()的参数的说明以及脏矩形动画形成的简要说明
  2. 直播疑难杂症排查(7)— 黑屏、花屏、闪屏问题
  3. 用什么工具可以批量查询韵达快递
  4. Unity一个默认占用C盘空间的小坑
  5. webpack 深入浅出分析之打包 JS、ES6 和 Typescript
  6. 怎样让小孩变成机灵顾客
  7. 巫师编程语言“咒语” 设想
  8. 【华为上机真题】工号不够用咋办
  9. Oracle连接不上解决办法合集
  10. 数据库应用——MyCat代理MySQL集群