各位大神们 进来看看 帮帮小弟 呵呵

ljrlove2008 2010-09-15 05:18:28

//文件名 RINV.C
//实矩阵求逆
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
int rinv(n,a)
int n;
double a[];
{ int *is,*js,i,j,k,l,u,v;
double d,p;
is=malloc(n*sizeof(int));
js=malloc(n*sizeof(int));
for (k=0; k<=n-1; k++)
{ d=0.0;
for (i=k; i<=n-1; i++)
for (j=k; j<=n-1; j++)
{ l=i*n+j; p=fabs(a[l]);
if (p>d) { d=p; is[k]=i; js[k]=j;}
}
if (d+1.0==1.0)
{ free(is); free(js); printf("err**not inv\n");
return(0);
}
if (is[k]!=k)
for (j=0; j<=n-1; j++)
{ u=k*n+j; v=is[k]*n+j;
p=a[u]; a[u]=a[v]; a[v]=p;
}
if (js[k]!=k)
for (i=0; i<=n-1; i++)
{ u=i*n+k; v=i*n+js[k];
p=a[u]; a[u]=a[v]; a[v]=p;
}
l=k*n+k;
a[l]=1.0/a[l];
for (j=0; j<=n-1; j++)
if (j!=k)
{ u=k*n+j; a[u]=a[u]*a[l];}
for (i=0; i<=n-1; i++)
if (i!=k)
for (j=0; j<=n-1; j++)
if (j!=k)
{ u=i*n+j;
a[u]=a[u]-a[i*n+k]*a[k*n+j];
}
for (i=0; i<=n-1; i++)
if (i!=k)
{ u=i*n+k; a[u]=-a[u]*a[l];}
}
for (k=n-1; k>=0; k--)
{ if (js[k]!=k)
for (j=0; j<=n-1; j++)
{ u=k*n+j; v=js[k]*n+j;
p=a[u]; a[u]=a[v]; a[v]=p;
}
if (is[k]!=k)
for (i=0; i<=n-1; i++)
{ u=i*n+k; v=i*n+is[k];
p=a[u]; a[u]=a[v]; a[v]=p;
}
}
free(is); free(js);
return(1);
}

//包含在文件RINV.C中

main()
{ int i,j;
double a[4][4]={ {6,4,5,1},
{1,2,9,9},
{5,1,6,1},
{9,0,1,7}};
double b[4][4];
for (i=0; i<=3; i++)
for (j=0; j<=3; j++)
b[i][j]=a[i][j];
i=rinv(4,&a[0][0]);
if (i!=0)
{ printf("MAT A IS:\n");
for (i=0; i<=3; i++)
{ for (j=0; j<=3; j++)
printf("%13.7f ",b[i][j]);
printf("\n");
}
printf("\n");
printf("MAT A- IS:\n");
for (i=0; i<=3; i++)
{ for (j=0; j<=3; j++)
printf("%13.7f ",a[i][j]);
printf("\n");
}
printf("\n");
}
}

...全文
101 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljrlove2008 2010-09-15
  • 打赏
  • 举报
回复
嗯 谢谢啦
zyj_604 2010-09-15
  • 打赏
  • 举报
回复
int rinv(int n,double a[])
就是这个意思啊
好像是很老的写法了吧
ljrlove2008 2010-09-15
  • 打赏
  • 举报
回复
果然是 谢谢啦 嘿嘿
ljrlove2008 2010-09-15
  • 打赏
  • 举报
回复
是嘛 我试试看
东大坡居士 2010-09-15
  • 打赏
  • 举报
回复
这个不是那个啥老式的函数写法吗,
就是int rinv(int n,double a[])的意思
ljrlove2008 2010-09-15
  • 打赏
  • 举报
回复
我学的是C
zhouqiangjs 2010-09-15
  • 打赏
  • 举报
回复
你学的是c还是c++
ljrlove2008 2010-09-15
  • 打赏
  • 举报
回复
5555555555555 没人理我呐 在线等
ljrlove2008 2010-09-15
  • 打赏
  • 举报
回复
代码中前几行是什么意思啊?
就是这几个:
int rinv(n,a)
int n;
double a[];
{ int *is,*js,i,j,k,l,u,v;
double d,p;

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧