部分选主元matlab,部分选主元的Doolittle分解 | 学步园
步骤:
假设用紧凑格式的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分解 | 学步园相关推荐
- 全选主元matlab,全选主元高斯-约当法实矩阵求逆及传统方法求逆
/* 算法没有做过什么改动,加上了内存释放的部分. 算法介绍 矩阵求逆在3D程序中很常见,主要应用于求Billboard矩阵.按照定义的计算方法乘法运算,严重影响了性能.在需要大量Billboard矩 ...
- matlab角点坐标获取,MatLab角点检测(harris经典程序) | 学步园
这是源博客的出处,鄙人转过来是为了更好的保存!供大家一起学习!已将原始的博客的文章的位置附在上面! 至于代码的完整性和可运行性需要大家去自己考量! %MatLab角点检测程序harris. ori_i ...
- MATLAB递归将数字一个个输出,数米粒个数和每个米粒面积的matlab算法实现(递归)。 | 学步园...
使用Matlab软件自带的rice.png图片进行处理. 不知道使用的函数利用help function-name 或者 lookfor function-name 查看 这里是实现的主要代码段 %T ...
- matlab写出函数表达式,matlab 由状态空间表达式求传递函数 笔记 | 学步园
1 内容 有一个两输入两输出线性系统 ,求该系统的传递函数表达式子. 2 求解 2.1 相关函数 状态空间表达式的传递函数用ss2tf函数来求解 函数原型 [b,a] = ss2tf(A,B,C,D, ...
- matlab clabel函数用法,CLabel的用法 | 学步园
DDX_Control(pDX, IDC_STATIC_CONNSTATE, m_labConnState); IDC_STATIC_CONNSTATE 是某静态控件的ID,设置这个静态控件的控制变 ...
- matlab radiogroup,RadioGroup和CheckBox的使用 | 学步园
1.布局文件: android:layout_width="fill_parent" android:layout_height="fill_parent" a ...
- matlab怎么计算行列式,Matlab 线性代数(一)–行列式与方程组求解 | 学步园
1. %用克莱姆法则求解方程组 clear n=input('方程个数=') A=input('系数矩阵A=') b=input('常数列向量b=') if((size(A)~=[n,n])|(siz ...
- 用matlab对图像进行边缘填充,matlab中的图像边界填充函数 | 学步园
padarray 功能:填充图像或填充数组. 用法:B = padarray(A,padsize,padval,direction) A为输入图像,B为填充后的图像, padsize给出了给出了填充的 ...
- matlab用lu求逆矩阵,Matlab实现——求矩阵的逆(LU分解) | 学步园
Program ( :Solve By Factorization with Pivoting ) 思路及原理: 就得到: 程序: function X=Ni(A) %Input - A is an ...
最新文章
- R函数:交集intersect、并集union、找不同setdiff、判断相同setequal
- 一些 Linux 系统故障修复和修复技巧
- tcp 发送 最大数据量_网络基础知识夯实总结(三):TCP协议
- Scoped CSS规范草案
- CCNA笔记之第十四节:RIP协议(1)
- java double的加法_java Double 进行加减乘除
- http://blog.sina.com.cn/s/blog_5007d1b10100ltwh.html
- vector容器,容量和大小的操作
- 银监计算机类考试题库,干货!国考银监会财经类面试题库
- 简要介绍电源效率测试
- 中国计算机省份排名,大变局开启!2019全国各省GDP排名出炉,哪些省份掉队了?...
- Android程序员学WEB前端(12)-JavaScript(3)-正则表达式-Sublime
- 为什么Java小伙对JavaScript和Node.js如此兴奋?
- 浅谈电动自行车智能充电管理系统的设计及应用
- Proxifier v3.15
- 智能云时代,谁来守护我们的安全?
- C#工控上位机实例_工控学习,搞工控的到底什么是上位机,什么是下位机?
- 微信“小程序”来了,短期不可高估,长期不可低估
- Android 使用crosswalk实例
- SpringBoot应用WebSocket实现在线聊天