求多元方程组的C语言算法 - 范文中心

求多元方程组的C语言算法

07/20

#include

#include

struct order

{ int *q;

struct order *next;

};

struct rank

{ int n;

struct order *head;

}perm;

int i,j;

void main()

{

void s(int m);

void print(int m);

void root(int m);

int m;

puts("请输入方程组元的个数:");

scanf("%d",&m);

if(m>0)

{

s(m);

root(m);

}

else puts("元的个数输入有误!!!!\n");

}

void s(int m)

{

if(m==1)

{

struct order *p1;

perm.n=m;

p1=(struct order *)malloc(sizeof(struct order));

p1->q=(int *)calloc(1,sizeof(int));

*p1->q=1;

p1->next=NULL;

perm.head=p1;

}

else

{

{s(m-1);}

{

struct order *p1,*p2,*g,*g1,*h;

perm.n=m;

g=perm.head;

h=p1=(struct order *)malloc(sizeof(struct order));

while(g!=NULL)

{

g1=g;

for(i=0;i

{

p1->q=(int *)calloc(m,sizeof(int));

p1->q[i]=m;

for(j=0;j

{

if(i>j)p1->q[j]=g->q[j];

else p1->q[j+1]=g->q[j];

}

p2=p1;

p2->next=p1=(struct order *)malloc(sizeof(struct order));

}

g=g->next,free(g1);

}

p2->next=NULL;

free(p1);

perm.head=h;

}

}

}

void root(int m)

{

int c,y,k;

struct order *p1;

float **x,*B,d;

x=(float **)calloc(m,sizeof(float *));

B=(float *)calloc(m+1,sizeof(float));

puts("按增广矩阵的排列方式按行输入方程组的系数和常数,系数为0的别忘了输入0:\n");

for(i=0;i

{

float *x1;

x1=(float *)calloc((m+1),sizeof(float));

for(j=0;j

{printf("元素D(%d,%d)=",i+1,j+1);scanf("%f",x1+j);}

x[i]=x1;

}

printf("方程组按增广矩阵的排列方式如下\n*********************************************************************\n");

for(i=0;i

{

for(j=0;j

printf("%8.2f",x[i][j]);

printf("\n");

}

printf("*********************************************************************\n");

p1=perm.head;B[0]=0;y=m*(m+1)/2;

for(c=0;p1!=NULL;c++)

{

for(j=0;j

{

d=1;

for(i=0;i

{

d=x[i][p1->q[i]-1]*d;

}

if((y+c+j)%2==0);

else

d=-d;B[0]=B[0]+d;p1=p1->next;

}

}

if(B[0]==0)

puts("能用以上增广矩阵表示的方程组无解或者有多解,对不起,本程序无法的求出该种方程组的解!");

else

{

puts("能用以上增广矩阵表示的方程组有唯一解,解如下:");

for(k=1;k

{

p1=perm.head;B[k]=0;y=m*(m+1)/2;

for(c=0;p1!=NULL;c++)

{

for(j=0;j

{

d=1;

for(i=0;i

{

if(p1->q[i]==k)d=x[i][m]*d;

else

d=x[i][p1->q[i]-1]*d;

}

} } } if((y+c+j)%2==0); else d=-d;B[k]=B[k]+d;p1=p1->next; } } printf("x%d=%f\n",k,B[k]/B[0]);


相关内容

  • 十大经典数学模型
    十大经典数学模型 1.蒙特卡罗算法(该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时可以通过模拟来检验自己模型的正确性,是比赛时必用的方法) 2.数据拟合.参数估计.插值等数据处理算法(比赛中通常会遇到大量的数据需要处理,而 ...
  • 20世纪十大算法
    20世纪十大算法 本世纪初,美国物理学会(AmericanInstitute of Physics)和IEEE计算机社团(IEEE Computer Society)的一本联合刊物<科学与工程中的计算>发表了由田纳西大学的Jac ...
  • 测绘程序设计课程实习报告模板
    一.实习目的 <测绘程序设计>是一门理论与实践并重的课程,课程设计是测量数据处理理论学习的一个重要实践环节,可以看做是在学习了专业基础理论课<误差理论与测量平差基础>课程后进行的一门实践课程,其目的是增强学生对测量平 ...
  • 人工智能在自动控制中的应用浅析
    人工智能在自动控制系统中的应用浅析 姓名:蔡志威 学号:2011080911 专业:电路与系统 摘 要:现如今,计算机技术已经成为全球最普及的信息技术, 人类的大脑是最为发达的机器,计算机所有的编程都是效仿人类的电脑,对其信息进行采集.分析 ...
  • 上好"算法初步"
    摘 要:算法初步这一章是新课程改革以后,在高中新增加的一章,是数学及其应用的重要组成部分,是计算科学的重要基础,算法的应用是学习数学的一个重要方面,在教学时应当充分使用教科书提供的典型实例,让学生在解决具体问题的过程中学习一些基本逻辑结构和 ...
  • 非线性方程组的求解
    非线性方程组的求解 摘要:非线性方程组求解是数学教学中,数值分析课程的一个重要组成部分,作为一门学科,其研究对象是非线性方程组.求解非线性方程组主要有两种方法:一种是传统的数学方法,如牛顿法.梯度法.共轭方向法.混沌法.BFGS法.单纯形法 ...
  • 高中数学必修三期末考试试题
    高一必修三数学一.二章综合测试卷 (满分150分) 学号: 姓名: 分数: 一.选择题(60分) 1.下面对算法描述正确的一项是:( ) A .算法只能用自然语言来描述 B .算法只能用图形方式来表示 C .同一问题可以有不同的算法 D . ...
  • 基于三点二次插值的方程求根算法
    第7卷第12期2008年12月 南阳师范学院学报 JoumalofNanyang Nomal Unive鹉ity V01.7No.12Dec.2008 基于三点二次插值的方程求根算法 张天良 (南京信息工程大学数理学院.江苏南京210044 ...
  • 工商管理专业课程梳理
    课 程 考 核 课 程 考 核 湖南大学工商管理学院修课计划 课 程 考 核 课 程 考 核 课程总结 温故而知新,可以为师矣.大学接近三年,在工商管理系读了两年,再加上转系之前,在岳麓书院读了一年,学的知识虽多,却没有好好总结过.今借此机 ...
  • 数与代数教材分析.重难点突破
    <整理与复习──数与代数>教材分析 本节内容是小学阶段"数与代数"知识的系统整理与复习.修订后的教材主要分四部分,分别是"数的认识""数的运算""式与方程&q ...