yishengyouni993 2015-05-04 10:27 采纳率: 50%
浏览 2859
已采纳

求泰勒公式展开的有限差分中心差分算子的权系数,我的这个程序写出来所有结果都为-nan,求大神解答,急

#include"stdio.h"
#include"malloc.h"
#include"math.h"
#include"string.h"
main(){
int i,j,n;
printf("请输入需计算中心差分阶数:");
scanf("%d",&j);
while (j==0||j%2==1){

printf("中心差分阶数不可为0或奇数\n请重新输入:");
scanf("%d",&j);
}
i=j/2;
n=j+1;
float a;//为系数矩阵分配空间
a=(float
)malloc(n*sizeof(float*));
a[0]=(float*)malloc(n*n*sizeof(float));
int c,d,e,h;
for(c=1;c a[c]=a[0]+n*c;
}
float *b;//为常数分配空间
b=(float*)malloc(n*sizeof(float));
float *g;//为权系数分配空间
g=(float*)malloc(n*sizeof(float));
memset(g,0,n*sizeof(float));
e=1;
float f;
for(c=0;c for(d=0;d if(c==0){
a[d][c]=1.0;
}
else{
h=d-i;
a[d][c]=pow(h,c);
f=(float)e;
a[d][c]=a[d][c]/e;
}
}
e=e*(c+1);
}
for(c=0;c if(c==1)
b[c]=1.0;
else
b[c]=0.0;
}
for(c=0;c for(d=c+1;d if(a[c][c]==0){
for(e=c;e f=a[e][c];
a[e][c]=a[e][d];
a[e][d]=f;
}
f=b[c];
b[c]=b[d];
b[d]=f;
}
if(a[c][c]!=0)
break;
}
for(d=c+1;d a[d][c]/=a[c][c];
b[c]/=a[c][c];
a[c][c]=1;
}
for(d=c+1;d for(e=c;e a[e][d]=a[e][d]-a[c][d]*a[e][c];
}
b[d]=b[d]-a[c][d]*b[c];
}
}//
for(c=n-1;c>=0;c--){//计算权系数的值
g[c]=b[c];
if(c>0)
b[c-1]=b[c-1]-a[c][c-1]*g[c];
}
for(c=0;c<n;c++){//打印权系数的值
d=c-i;
printf("w%d=%f(1/dx)\n",d,g[c]);
}
free(a[0]);
free(a);
free(b);
free(g);
}

  • 写回答

1条回答 默认 最新

  • threenewbee 2015-05-04 10:48
    关注

    -nan就是负的无穷大,检查下公式用得对不对,除数是否接近0。还有整数不能作为除数、乘数,需要先转换成浮点。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 求TYPCE母转母转接头24PIN线路板图
  • ¥100 国外网络搭建,有偿交流
  • ¥15 高价求中通快递查询接口
  • ¥15 解决一个加好友限制问题 或者有好的方案
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型