- 日志
- 好友
- 卖家信用

- 买家信用

- 注册时间
- 2004-12-5
- 在线时间
- 小时
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册账号
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那个。 |
|