小春网

 找回密码
 注册账号
查看: 790|回复: 3
收起左侧

[IT 交流] C语言。巾(べき)乗法と逆反復法

[复制链接]
发表于 2009-7-26 16:39:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册账号

x
想拜托大家帮个忙。
老师给了二个公式。这二个公式很像。大概是一种A/B,另一种B/A。
然后其中一个公式的C程序,要求把那一种给改出来。
我改了二小时了,还是改不行。
哪种高人帮我看看。感谢不尽。
下面给三个文件。公式。结果。
3个文件。.rar (406.1 KB, 下载次数: 1)

巾(べき)乗法要怎样改成逆反復法呀。麻烦您根据公式指导我一下。再次感谢。
周二就交了!我会自己再改改试试的。再一次至谢。


这是巾(べき)乗法的程序。
/*===================================*/
/* Solver for eigen-value problem.   */
/*===================================*/
#include<stdio.h>
#include<math.h>
#define MAXITER 50
#define EPSILON 1.0e-6
/*---------- Problem ----------*/
#define N 3
double A[N][N]={
  {  5, -2,  1 },
  { -2,  4, -2 },
  {  1, -2,  5 };
/*----- Print out vector -----*/
void print_vector(double v[N])
{
  int      i;
  
  printf("[");
  for(i=0; i<N; i++) printf("%10.6f", v);
  printf(" ]\n");
}
/*----- print out 2 matrices -----*/
void print_matrix2(double w[N][N], double q[N][N]){
   int i, j;
   
   for(i=0; i<N; i++){
     printf("[");
     for(j=0;j<N;j++) printf("%10.6f",w[j]);
     printf(" ]  [");
     for(j=0;j<N;j++) printf("%10.6f",q[j]);
     printf(" ]\n");
   }
}
/*--- Power method ---*/
void power(void)
{
  int    i, j, k, i_max;
  double r, r0, v_norm, x_max, diff;
  double v[N], x[N];
  
  /*--- preparation ---*/
  for(i=0; i<N; i++) x=1.0;
  r0=0.0;
  printf(" 0: r=%10.6f, x=", r0);
  print_vector(x);
  
  /*--- iteration---*/
  for(k=0; k<MAXITER; k++){
    /*--- calculate v[],áváand r=v/x---*/
    v_norm=0.0;
    x_max=0.0;
    for(i=0; i<N; i++){
      v=0.0;
      for(j=0; j<N; j++) v+=A[j]*x[j];
      v_norm+=v*v;
      if (fabs(x)>x_max) {
x_max=fabs(x);
   i_max=i;
      }
    }
    v_norm=sqrt(v_norm);
    r=v[i_max]/x[i_max];
  /*--- copy normalized v[] to x[]---*/
  /*--- without changing the sign---*/
   
if  (r<0.0) v_norm=-v_norm;
diff=0.0;
for(j=0; j<N; j++) {
   v[j]/=v_norm;
   diff+=fabs(v[j]-x[j]);
   x[j]=v[j];
}
printf("%2d: r=%10.6f,  x=",k+1, r);
print_vector(x);
if  (diff<EPSILON) break;
r0=r;
  }
}
int main (void)
{
   puts("Power method");
   power();
}

它的结果就是图里结果的Power method那个。
发表于 2009-7-28 15:42:42 | 显示全部楼层
昨天忙 没来小春   看来这次错过了  。。。
回复

使用道具 举报

 楼主| 发表于 2009-7-28 17:55:27 | 显示全部楼层
昨天忙 没来小春   看来这次错过了  。。。
等待UFO 发表于 2009-7-28 15:42


呵。发现个规则。您是一错过,就没人理我了。哈。
这作业太烦人了。昨天同学把答案发给我,我总算交上去了。回想它的创伤过程,简直恶心的要死。。
神呀。。。。。

嘻。!谢谢你哈!!
该忙得忙。不要中暑!
回复

使用道具 举报

头像被屏蔽
发表于 2009-8-4 10:01:28 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小春网
常务客服微信
微信订阅号
手机客户端
扫一扫,查看更方便! 快速回复 返回顶部 返回列表