| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1041 人关注过本帖
标题:[求助] n介线性方程的求解问题.
取消只看楼主 加入收藏
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
 问题点数:0 回复次数:2 
[求助] n介线性方程的求解问题.
编程求解n 介线性方程组!
   要求:
        1.若方程有解请输出其解,
        2.若方程无解输出无解原因,
        3.若方程有多个解请给出其通解.
        4.要有提示信息!
        5.程序要有一般性.
        6.n的值是要任意输入的而且n>=1.
搜索更多相关主题的帖子: 线性方程 求解 
2005-09-22 19:53
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:0 
就这么简单!
程序清单:
#include "stdlib.h"
#include "math.h"
#include "stdio.h"
#define MAX 255
int Guass(double a[],double b[],int n)
{int *js,l,k,i,j,is,p,q;
 double d,t;
 js=malloc(n*sizeof(int));
 l=1;
 for(k=0;k<=n-2;k++)
 {d=0.0;
  for(i=k;i<=n-1;i++)
  for(j=k;j<=n-1;j++)
  {t=fabs(a[i*n+j]);
   if(t>d)
   {d=t;js[k]=j;is=i;}
   }
   if(d+1.0==1.0)l=0;
   else {if(js[k]!=k)
          for(i=0;i<=n-1;i++)
          {p=i*n+k;
           q=i*n+js[k];
           t=a[p];a[p]=a[q];a[q]=t;}
         if(is!=k)
          {for(j=k;j<=n-1;j++)
           {p=k*n+j;
            q=is*n+j;
            t=a[p];a[p]=a[q];a[q]=t;}
            t=b[k];b[k]=b[is];b[is]=t;}
         }
    if(l==0){free(js);
             printf("该矩阵为奇异矩阵!\n");
             return (0);}
    d=a[k*n+k];
    for(j=k+1;j<=n-1;j++)
      {p=k*n+j;
       a[p]=a[p]/d;}
    b[k]=b[k]/d;
    for(i=k+1;i<=n-1;i++)
      {for(j=k+1;j<=n-1;j++)
        {p=i*n+j;
         a[p]=a[p]-a[i*n+k]*a[k*n+j];}
       b[i]=b[i]-a[i*n+k]*b[k];
       }
 }
 d=a[(n-1)*n+n-1];
 if(fabs(d)+1.0==1.0)
 {free(js);
  printf("该矩阵为奇异矩阵!\n");
  return (0);}
  b[n-1]=b[n-1]/d;
  for(i=n-2;i>=0;i--)
  {t=0.0;
   for(j=i+1;j<=n-1;j++)t=t+a[i*n+j]*b[j];
   b[i]=b[i]-t;}
   js[n-1]=n-1;
   for(k=n-1;k>=0;k--)
   if(js[k]!=k)
   {t=b[k];b[k]=b[js[k]];b[js[k]]=t;}
   free(js);
   return (1);}
void main()
   {int q;
    printf("            本程序分为两个功能请选择:\n");
    do{printf("*******************************************************\n");
      printf("|  1.求n介齐次线性方程组的解.                         |\n");
      printf("|  2.建立5*5矩阵,4角放最小数,矩阵中间为最大数依次存放.|\n");
      printf("|  3.安退出全系统.                                    |\n");
      printf("*******************************************************\n");
      printf("请输入你的选择:");
      scanf("%d",&q);
 switch(q)
  {case 1:
    {int i,n;
    double A[MAX],B[MAX];
    clrscr();
    printf("\n你选择的功能是求n介齐次线性方程组的解.\n");
    printf("请输入要求解的齐次线性方程组的介数:n=");
    scanf("%d",&n);
    printf("请逐个输入%d介齐次线性方程组未知数的系数矩阵共%dX%d个:\n",n,n,n);
    for(i=0;i<n*n;i++)
    scanf("%lf",&A[i]);
    printf("请逐个输入%d介齐次线性方程组右边的常量矩阵共%d个:\n",n,n);
    for(i=0;i<n;i++)
    scanf("%lf",&B[i]);
    if(Guass(A,B,n)!=0)
    {printf("要求解的%d介齐次线性方程组的解为:\n",n);
     for(i=0;i<n;i++)
     printf("X(%d)=%f\n",i+1,B[i]);
     }
     else printf("要求解的%d介齐次线性方程组无解.\n",n);break;}
   case 2:
    {static int a[25];
     int i,k,t;
     printf("你选择的功能是建立5*5矩阵,4角放最小数,矩阵中间为最大数依次存放.\n");
     printf("请输入25个整数:\n");
     for(i=0;i<25;i++) scanf("%d",&a[i]);
     for(i=0;i<25;i++)
      for(k=i+1;k<25;k++)
       if(a[i]>=a[k])
       {t=a[i];a[i]=a[k];a[k]=t;}
    printf("\n********************************\n");
    printf("|%4d  %4d  %4d  %4d  %4d  |\n",a[0],a[4],a[5],a[6],a[1]);
    printf("|%4d  %4d  %4d  %4d  %4d  |\n",a[7],a[8],a[9],a[10],a[11]);
    printf("|%4d  %4d  %4d  %4d  %4d  |\n",a[12],a[13],a[24],a[14],a[15]);
    printf("|%4d  %4d  %4d  %4d  %4d  |\n",a[16],a[17],a[18],a[19],a[20]);
    printf("|%4d  %4d  %4d  %4d  %4d  |\n",a[3],a[21],a[22],a[23],a[2]);
    printf("********************************\n"); }
    default:break;}
 }while(q!=3);
}

♂ 死后定当长眠,生前何须久睡。♀
2005-10-03 20:04
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:0 
我这个程序是在turbo c 2.0下才能很好的运行的!你别弄错了,在vc下是要出错的!

♂ 死后定当长眠,生前何须久睡。♀
2005-11-23 20:51
快速回复:[求助] n介线性方程的求解问题.
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019689 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved