实用文案
get_y(y,u); get_u(u,y,a);
B_k1=NeiJi(y,u);//是否判断B_K1是否为0?
wucha=(fabs(B_k1-B_k0))/(fabs(B_k1));//get wucha if(wucha<=Precision) break;
else if(i>10000) {
printf(\迭代次数超长,请更改初始向量\\n\ break; }
else B_k0 = B_k1; }
*iterations = i; return B_k1; }
double Get_min_Eigenvalue(double C[5][501],double *u,int n,int *iterations) {
double y[501] = {0},B_k0=0,B_k1=0;
double b[501] = {0};//储存y值的中间向量 double wucha; int i=0; while(1) {
++i;
get_y(y,u);
copy(b,y);//保护y向量
Doolittle_getx(C,y,u,501,2,2); copy(y,b);
B_k1=NeiJi(y,u);//是否判断B_K1是否为0?
wucha=(fabs(1/B_k1-1/B_k0))/(1/fabs(B_k1));//get wucha // wucha=(fabs(B_k1-B_k0))/(fabs(B_k1));//get wucha if(wucha<=Precision) break;
else if(i>10000) {
printf(\迭代次数超长,请更改初始向量\\n\ break; }
else B_k0 = B_k1; }
*iterations = i;
标准文档
s,int r,int 实用文案
return (1/B_k1); }
void Doolittle_getx(double C[5][501],double y[501],double u[501],int n,int s,int r) {
int i,t; double e;
for(i = 2;i <= n;i++) {
e = 0;
for(t = max(1,i-r);t <= i-1;t++) {
e+=C[i-t+s+1-1][t-1]*y[t-1]; }
y[i-1] -= e; }
u[n-1] = y[n-1]/C[s+1-1][n-1]; for(i = n-1;i>=1;i--) {
e = 0;
for(t = i+1;t<=min(i+s,n);t++) e += C[i-t+s+1-1][t-1]*u[t-1]; u[i-1] = (y[i-1] - e)/C[s+1-1][i-1]; } }
void copy(double b[501],double y[501]) {
for(int i=0;i<501;i++) {
b[i] = y[i]; } }
void DoolittleC(double C[5][501],int n,int s,int r) {
int k,j,i,t; double e;
for(k = 1;k <= n;k++) {
for(j = k;j <= min(k+s,n);j++) { e = 0;
标准文档
实用文案
for(t = max(max(1,k-r),j-s);t <= k-1;t++) {
e = e + C[k-t+s+1-1][t-1]*C[t-j+s+1-1][j-1]; }
C[k-j+s+1-1][j-1] = C[k-j+s+1-1][j-1] - e; }
if(k == n) break;
for(i = k+1;i <= min(k+r,n);i++) { e = 0;
for(t = max(max(1,i-r),k-s);t <= k-1;t++) {
e = e + C[i-t+s+1-1][t-1]*C[t-k+s+1-1][k-1]; }
C[i-k+s+1-1][k-1] = (C[i-k+s+1-1][k-1] - e)/C[s+1-1][k-1]; } } }
int min(int a,int b) {
if(a
return a; else return b; }
int max(int a,int b) {
if(a>=b)
return a; else
return b; }
标准文档
实用文案
附录:部分实验程序截图
1、u1?501??1,1,?,1?
T
标准文档
相关推荐: