114.求解线性方程

简介: 114.求解线性方程
#include "stdlib.h"
#include "math.h"
#include "stdio.h"
#define MAX 255
int Guass(a,b,n)
int n;
double a[],b[];
{
  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;
    /*下面是换主元部分,即从系数矩阵A的第K行,第K列之下的部分选出
    绝对值最大的元,交换到对角线上。*/
    for (i=k;i<=n-1;i++)
      for (j=k;j<=n-1;j++)
      {
        t=fabs(a[i*n+j]); /*fabs()定义在math.h中,含义是求一个浮点数的绝对值。*/
        if (t>d) { d=t; js[k]=j; is=i;}
      }
    if (d+1.0==1.0) l=0;  /*主元为0*/
    /*主元不为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("fail\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;
    /*下面为矩阵A,B消元部分*/
    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);
}
main()
{
  int i,n;
  double A[MAX];
  double B[MAX];
  clrscr();
  puts("This is a program to solve N order linear equation set Ax=B.");
  puts("\n It use Guass Elimination Method to solve the equation set:");
  puts("\n    a(0,0)x0+a(0,1)x1+a(0,2)x2+...+a(0,n-1)xn-1=b0");
  puts("    a(1,0)x0+a(1,1)x1+a(1,2)x2+...+a(1,n-1)xn-1=b1");
  puts("    ......");
  puts("    a(n-1,0)x0+a(n-1,1)x1+a(n-1,2)x2+...+a(n-1,-1)xn-1=bn-1\n");
  printf(" >> Please input the order n (>1): ");
  scanf("%d",&n);
  printf(" >> Please input the %d elements of matrix A(%d*%d) one by one:\n",n*n,n,n);
  for(i=0;i<n*n;i++)
    scanf("%lf",&A[i]);
  printf(" >> Please input the %d elements of matrix B(%d*1) one by one:\n",n,n);
  for(i=0;i<n;i++)
    scanf("%lf",&B[i]);
  if (Guass(A,B,n)!=0) /*调用Guass消去,1为计算成功*/
  printf(" >> The solution of Ax=B is x(%d*1):\n",n);
  for (i=0;i<n;i++) /*打印结果*/
    printf("x(%d)=%f  ",i,B[i]);
  puts("\n Press any key to quit...");
  getch();
}
相关文章
|
15天前
|
人工智能 自然语言处理 文字识别
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
Qwen3.7-Max是阿里云百炼面向智能体时代推出的新一代旗舰模型,对标GPT-5.5、Claude Opus 4.7等闭源旗舰。该模型支持百万级token上下文窗口,具备顶级推理能力、多模态搜索与视觉理解增强、流式输出低延迟响应等核心优势,覆盖编程、办公、长周期自主执行等复杂场景。同时支持OpenAI接口兼容,便于系统快速迁移。用户可通过Token Plan团队或节省计划等订阅方式灵活调用,适合企业级高要求场景使用。
5713 29
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
|
10天前
|
存储 定位技术 数据库
CodeGraph 如何让 Claude Code减少 7 成工具调用?
CodeGraph 为 Coding Agent 提供本地代码知识图谱,把函数、类、调用链和框架路由提前整理成“项目地图”,减少盲目搜索和文件读取。它不是新 Agent,而是上下文基础设施,让 Agent 更快找到正确代码路径,平均减少 7 成工具调用。
1163 2
|
7天前
|
人工智能 安全 定位技术
CodeGraph深度解析 让Claude Code工具调用直降七成的核心原理与实操教程
如今以Claude Code为代表的AI编程智能体已经成为开发者日常编码、项目重构、漏洞修复的必备工具。但在长期使用过程中,几乎所有开发者都会遇到同一个明显痛点:AI虽然具备强大的代码生成与分析能力,却常常陷入盲目探索的循环中。
924 1
|
17天前
|
人工智能 自然语言处理 供应链
|
7天前
|
人工智能 弹性计算 安全
阿里云618活动时间、活动入口、优惠活动详细解读
2026年阿里云618创新加速季已全面开启,作为年度力度最大的云产品促销活动,本次大促覆盖轻量应用服务器、ECS云服务器、GPU云服务器、数据库、AI算力、安全服务、CDN等全品类产品,推出5亿元算力补贴、新用户限时秒杀、普惠满减、企业专享、免费试用、云大使返佣等多重福利,个人开发者、中小企业、AI团队均可享受专属低价。本文将系统梳理2026年阿里云618活动的完整时间节点、官方参与入口、各类优惠细则、使用规则、热门产品推荐及实操代码,帮助用户精准参与、高效省钱,以最低成本完成上云部署。
702 3
|
23天前
|
人工智能 开发工具 iOS开发
Claude Code 新手完全上手指南:安装、国产模型配置与常用命令全解
Claude Code 是一款运行在终端环境中的 AI 编程助手,能够直接在命令行中完成代码生成、项目分析、文件修改、命令执行、Git 管理等开发全流程工作。它最大的特点是**任务驱动、终端原生、轻量高效、多模型兼容**,无需图形界面、不依赖 IDE 插件,能够深度融入开发者日常工作流。
3825 15
|
8天前
|
运维
欢迎报名|2026 Agentic AICon—智能体基础设施与AgentOps专场,邀您参会
欢迎报名|2026 Agentic AICon—智能体基础设施与AgentOps专场,邀您参会
1418 0