| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2206 人关注过本帖
标题:[求助]计算方法的作业
只看楼主 加入收藏
linlinhappy
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-12-26
收藏
得分:0 
已经努力了很久了
快没时间了就求救了。。。。。
2006-12-26 15:01
caiqiufu
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2006-12-14
收藏
得分:0 

我们以前也做过
你可以去找<<常用数学算法描述>>看看
上面应该有的

2006-12-26 15:21
linlinhappy
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-12-26
收藏
得分:0 
有这本书吗
我上图书管找了
没有啊
2006-12-26 20:40
jojo8342
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2006-12-5
收藏
得分:0 

不知道是不是,你看看用 Guass列主元素消去法解线性方程组

http://vod.swjtu.edu.cn/courseware/calculate/suanfa_3.htm


2006-12-26 21:05
linlinhappy
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-12-26
收藏
得分:0 

谢谢哦
就是这个网址上面的第三部分三、设A为n阶方阵,用Gauss-Jordan列主元素法求A的逆矩阵。
不过就是要求变成实现啊
看看谁能帮帮我啊

2006-12-26 22:48
caiqiufu
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2006-12-14
收藏
得分:0 
void trmul(a,b,m,n,k,c)
int m,m,k;
double a[],b[],c[];
{
int i,j,l,u;
for(i=0;i<=m-1;i++)
for(j=0;j<=k-1;j++)
{
u=i*k+j;c[u]=0.0;
for(l=0;l<=n-1;l++)
c[u]=c[u]+a[i*n+l]*b[l*k+j];
}
return;
}
#include"stdlib.h"
#include"math.h"
#include"stdio.h"
int rinv(a,n)
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(i=0;i<=n-1;j++)
{
u=i*n+k; v=i*n+is[k];
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);
}

#include"stdio.h"
#include"4rinv.c"
#include"4trmul.c"
main()
{
int i,j;
static double a[4][4]={{0.2368,0.2471,0.2568,1.2671},
{1.1161,0.1254,0.1397,0.1490},
{0.1582,1.1675,0.1768,0.1871},
{0.1968,0.2071,1.2168,0.2271}};
static double b[4][4],c[4][4];
for(i=0;i<=3;i++)
for(j=0;j<=3;j++)
b[i][j]=a[i][j];
i=rinv(a,4);
if(i!=0)
{
printf("MAT A IS:\n");
for(i=0;i<=3;i++)
{
for(j=0;j<=3;j++)
printf("%13.7e",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.7e",a[i][j]);
printf("\n");
}
printf("\n");
printf("MAT AA-IS:\n");
trmul(b,a,4,4,c);
for(i=0;i<=3;i++)
{
for(j=0;j<=3;j++)
printf("%13.7e",c[i][j]);
printf("\n");
}
}
}

来自<<常用算法程序集>>清华大学出版社
2006-12-27 13:21
linlinhappy
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-12-26
收藏
得分:0 

谢谢你咯
可是报错了~~~
然后我想要的是一个通用的算例
就是由自己来输入矩阵里面的元素
然后在用Gauss-Jordan列主元素法求它的逆矩阵的~~~

2006-12-28 07:53
moder236
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-12-28
收藏
得分:0 

是不是数值计算的课设?我做的是二分法和牛顿法.下午帮你找一下.

2006-12-28 10:18
caiqiufu
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2006-12-14
收藏
得分:0 
static double a[4][4]={{0.2368,0.2471,0.2568,1.2671},
{1.1161,0.1254,0.1397,0.1490},
{0.1582,1.1675,0.1768,0.1871},
{0.1968,0.2071,1.2168,0.2271}};
改成自己输入啊
for(i=0;i<=3;i++)
for(j=0j<=3;j++)
scanf("%f",&a[i][j])
2006-12-28 12:37
草堂
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-12-28
收藏
得分:0 

看看这个
#include<stdio.h>
#include<math.h>

#define N 3

double a[N][N]={{3,2,1},{2,2,0},{1,0,3}};
double b[N]={5,3,4};

main(){
int i,j,T,k=0;
double max,m[N][N],temp,tem,sum;
do{
max=0;
for(i=k;i<N;i++)
{
if(fabs(a[i][k])>fabs(max)){
max=a[i][k];
T=i;
}
}
if(max==0) return(0);
if(T!=k){
for(j=k;j<N;j++){
temp=a[T][j];
a[T][j]=a[k][j];
a[k][j]=temp;
}
tem=b[T];b[T]=b[k];b[k]=tem;
for(i=k+1;i<N;i++)
m[i][k]=a[i][k]/a[k][k];
}
else if(T==k){
for(i=k+1;i<N;i++)
m[i][k]=a[i][k]/a[k][k];
}
for(i=k+1;i<N;i++){
for(j=k+1;j<N;j++)
a[i][j]-=m[i][k]*a[k][j];
b[i]-=m[i][k]*b[k];
}
k++;
}while(k!=N-1);
for(i=N-1;i>=0;i--){
sum=0;
for(j=i+1;j<N;j++)
sum+=a[i][j]*b[j];
b[i]=(b[i]-sum)/a[i][i];
}
for(i=0;i<N;i++){
printf("x[%d]=%f\n",i,b[i]);
}
printf("\n");
getch();
}

2006-12-28 22:45
快速回复:[求助]计算方法的作业
数据加载中...
 
   



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

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