选主元高斯消去法

选主元高斯消去法include stdio h include math h doublea 10 10 doubleb 10 intmax i inti intn intans i inttmp i doubleans val fabs a i i for tmp i i 1 tmp i amp l math h stdio h

#include 
  
    #include 
   
     double a[10][10]; double b[10]; int max_i(int i, int n){ int ans = i; int tmp_i; double ans_val=fabs(a[i][i]); for ( tmp_i=i+1;tmp_i<=n;tmp_i++){ if(fabs(a[tmp_i][i])>ans_val){ ans_val=fabs(a[tmp_i][i]);//换主元 ans = tmp_i; } } return ans;//第i行的主元在第ans列 } void swap(int i, int j, int n){ double k; int tmp; for(tmp = 1; tmp<=n; tmp++){ k=a[i][tmp]; a[i][tmp]=a[j][tmp];//第i行和第j行的所有元素进行交换 a[j][tmp]=k; } } int main() { int i,j,m,p; int k=1; int n; double x[10]; double temp1; double temp[10]; double sum[10]={}; printf("请输入n的值:"); scanf("%d",&n); printf("\n"); printf("请输入系数矩阵:\n"); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { scanf("%lf",&a[i][j]); } } printf("\n"); printf("请输入b[i]:\n"); for(i=1;i<=n;i++) { scanf("%lf",&b[i]); } printf("\n"); for(i=1;i<=n;i++) //选主元素 { int max_num = max_i(i, n);//第i行的最大值 swap(max_num,i,n); double c; c=b[i]; b[i]=b[max_num];//b也相应的交换 b[max_num]=c; //消元 int col; for(col=i+1;col<=n ;col++)//把a[i][i]的系数化为1 { a[i][col]=a[i][col]/a[i][i]; } b[i]=b[i]/a[i][i]; a[i][i]=1; int row,col2; for(row=i+1;row<=n;row++) { b[row]=b[row]/a[row][i]-b[i]; for(col2=1;col2<=n;col2++) { if(col2!=i) a[row][col2]=a[row][col2]/a[row][i]-a[i][col2]; printf("%f ",a[row][col2]); } printf("\n"); a[row][i]=0; } int k,j1; for(k=1;k<=n;k++) //输出消元之后的系数矩阵 { for(j1=1;j1<=n;j1++) { printf("%lf\t",a[k][j1]); } printf("%lf",b[k]); printf("\n"); } printf("\n"); } x[n]=b[n]/a[n][n]; //回代 for(i=n-1;i>=1;i--) { for(j=i+1;j<=n;j++) { sum[i]=sum[i]+a[i][j]*x[j]; } x[i]=b[i]-sum[i]; } printf("结果为:\n"); for(i=1;i<=n;i++) { printf("x[%d]=%f\n",i,x[i]); } return 0; } 
    
  

  不好意思代码有点多,但是主要看主函数里面它是怎么 “每选一个主元就消去一个元素的”,还有max_i函数,然后再看看swap函数(将i行和j行的所有元素交换)。还有一个小技巧,就是从上往下消去的时候,左下三角元素都变成0了,以后就不必处理左下三角的元素了,所以col从i+1开始。

 一开始做实验的时候想错了,以为是全部转化成对角占优阵再进行消元,其实不是的,是在转化的同时,同步消去的。

实验结果:

选主元高斯消去法

大家如果看不懂,不要怕麻烦,可以自己手动计算一下过程。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/210600.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午7:18
下一篇 2026年3月19日 上午7:18


相关推荐

  • android定时器取消,Android定时器崩溃取消

    android定时器取消,Android定时器崩溃取消我有一个定时器运行,然后熄灭,并做了一些事情,定时器启动罚款。Android定时器崩溃取消然后我想要做的是点击一个按钮,然后创建一个电子邮件。除了在计时器运行时单击该按钮之外,一切正常,应用程序崩溃。当按下按钮时试图取消计时器时,也会使应用程序崩溃。任何帮助,将不胜感激。下面的代码片段:publicclassmyApplicationextendsActivity{StringBuild…

    2022年7月25日
    22
  • iptable端口重定向 MASQUERADE[通俗易懂]

    iptable端口重定向 MASQUERADE[通俗易懂]iptable端口重定向MASQUERADE

    2022年6月15日
    74
  • java VM option

    -Xms256m-Xmx256m-XX:MaxNewSize=256m-XX:MaxPermSize=256m

    2022年4月9日
    58
  • AJAX中UpdatePanel以及Triggers的使用

    AJAX中UpdatePanel以及Triggers的使用1.页面定义:                           –控件和其它DIV等                                                                            2.必须定义ToolkitScriptManager(1).用到WebServi

    2022年7月23日
    18
  • 智能优化算法:灰狼优化算法-附代码

    智能优化算法:灰狼优化算法-附代码智能算法:灰狼优化算法-附代码摘要:受灰狼群体捕食行为的启发,Mirjalili等[1]于2014年提出了一种新型群体智能优化算法:灰狼优化算法。GWO通过模拟灰狼群体捕食行为,基于狼群群体协作的机制来达到优化的目的。GWO算法具有结构简单、需要调节的参数少,容易实现等特点,其中存在能够自适应调整的收敛因子以及信息反馈机制,能够在局部寻优与全局搜索之间实现平衡,因此在对问题的求解精度和收敛速度方面都有良好的性能。1.算法原理灰狼属于犬科动物,被认为是顶级的掠食者,它们处于生物

    2022年5月24日
    33
  • LeetCode重建二叉树详解[通俗易懂]

    LeetCode重建二叉树详解[通俗易懂]LeetCode重建二叉树详解题目描述原理分析(1)大致思路(2)细节阐述代码实现(1)主函数(2)递归函数参数区间的决定递归结束的条件总结题目描述原理分析(1)大致思路下面讲解一下,前序遍历+中序遍历如何确定一个唯一的二叉树。关于二叉树的基本知识,请看二叉树的基本操作及联系。对此就不再过多重复。对于前序遍历顺序:根、左子树、右子树;对于中序的遍历顺序:左子树、根、右子树。所以通过前序遍历,我们获取前序第一个结点就是这个树的根,再在中序遍历中找到该结点的位置。在中序中,根的左边全部的是属于根左子

    2022年6月12日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号