矛盾方程组,非常好理解,其实为翻译上述图片,当你图片看懂了,原理就懂了:
代码实现:
#include<stdio.h>
# define M 100
int main()
{int i,j,n,w1,w2,k1,k2,t,r,k,w,e,o1,o2,e1;double x[M],y[M],a[M][M],b[M][M],c[M],d[M],h[M][M],max,f,s;//录入数据printf("输入未知数的个数n:");scanf("%d",&n);printf("输入方程行数K1:");scanf("%d",&k1);printf("输入方呈列数K2:");//不包括y值那一列scanf("%d",&k2);printf("输入增广矩阵数据:"); for(i=0;i<k1;i++){for(j=0;j<k2;j++){scanf("%lf",&a[i][j]); b[j][i]=a[i][j];//b矩阵为a矩阵的转置 }scanf("%lf",&y[i]);} //处理数据//赋初值为0for(i=0;i<k2*k2;i++){c[i]=0;d[i]=0;}w1=0;for(i=0;i<k2;i++){ for(j=0;j<k2;j++){ for(e1=0;e1<4;e1++){c[w1]=c[w1]+a[e1][j]*b[i][e1]; } w1=w1+1;}}for(i=0;i<3;i++){for(e1=0;e1<4;e1++){d[i]=d[i]+b[i][e1]*y[e1];}}t=0;for(i=0;i<k2;i++){for(j=0;j<k2;j++){h[i][j]=c[t++];}}for(i=0;i<k2;i++){for(j=0;j<k2;j++){printf("%lf ",h[i][j]);}printf("%lf",d[i]);printf("n");}//用列主元高斯消元法求解for(r=0;r<k2-1;r++){ k=r;max=h[r][r];for(w=r;w<k2-1;w++){if(h[w+1][r]>=h[w][r]){max=h[w+1][r];k=w+1;}}if(k>=r){ for(e=r;e<k2;e++){f=h[r][e];h[r][e]=h[k][e];h[k][e]=f;}f=d[r];d[r]=d[k];d[k]=f; } for(i=r+1;i<k2;i++){ f=1.0*h[i][r]/h[r][r];d[i]=d[i]-1.0*f*d[r];for(j=r;j<k2;j++){h[i][j]=h[i][j]-1.0*f*h[r][j];}}}//回代 x[k2-1]=1.0*d[k2-1]/h[k2-1][k2-1];for(i=k2-2;i>=0;i--){ f=0;for(j=i+1;j<k2;j++){s=1.0*h[i][j]*x[j];f=f+s;}x[i]=1.0*(d[i]-f)/h[i][i]; }for(i=1;i<k2+1;i++){printf("x[%d]=%lfn",i,x[i-1]); }return 0;
}
本后面采用列主元高斯消元法进行矩阵求解,代码不难,但是如何利用代码分析矛盾方程组,值得思考。我利用上述代码发现了一个有趣的现象,并讲给同桌听了,他大为震撼哈哈哈哈哈,希望,大家也能发现更多有趣的现象。
本文发布于:2024-01-28 01:21:32,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063760983803.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |