69,369
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <math.h>
#define d 6 //多项式维数
#define D d+1
#define M 5
#define N 8
int main( )
{
int i,j;
float a,b,c;
float p[d][d] = {0};//全部初始化为0
p[0][0]=1; p[1][0]=0; p[1][1]=1;
for (int n=0; n<d; n++)
{
for (int k=0;k<d;k++)
{
/*
if (n<k)
{ p[n][k]=0;
}
*/
//else
//{
if (k<1)
a=0;
else
a=p[n][k-1];
if (n<1)
b=0;
else
b=p[n-1][k];
c= a*(2*n+1)/(n+1)-b*n/(n+1.0);
if (n+1>d)
break;
else
p[n+1][k]=c;
//}
p[0][0]=1; p[1][0]=0; p[1][1]=1;
}
}
float sum[D][D]={0};
float res[d][d]={0};
float rest[M][N]={0};
int z=1;
for (int m1=0; m1<=d; m1++){
for (int n1=0; n1<=d-m1-1; n1++){
for (int m2=0; m2<=M-1; m2++){
for (int n2=0; n2<=N-1; n2++){
for (int t1=0; t1<=m1; t1++){
for (int t2=0; t2<=n1; t2++){
sum[m1][n1]+=z*(2*m1+1)*(2*n1+1)*p[m1][t1]*p[n1][t2]*pow((2*m2/M-1),t1)*pow((2*n2/N-1),t2)/(M*N);
}
}
}
}
}
}
for(int k=0;k<=d;k++){
for(int l=0;l<=d-k-1;l++){
for (int m3=0;m3<=d;m3++){
for (int n3=0;n3<=d-m3-1;n3++){
if (m3>=k && n3>=l)
for(int k1=k;k1<=m3;k1++){
for(int l1=l;l1<=n3;l1++){
// float z1=1;
// float z2=1;
// k1大于k
float aa1,aa2,bb1,bb2,cc1,cc2,z1,z2;
//aa1=k;
float res1=1,res2=1,res3=1,res4=1,res5=1,res6=1;
for ( bb1=k1;bb1>=1;bb1--)
{ res1=res1*bb1;
}
for ( aa1=k ;aa1>=1;aa1--)
{ res2=res2*aa1;
}
for ( cc1=k1-k ;cc1>=1;cc1--)
{ res3=res3*cc1;
}
z1=res1/(res2*res3);
// for (l=1;l<=l1;l++)
//
for ( bb2=l1;bb2>=1;bb2--)
{res4=res4* bb2 ;
}
for ( aa2=l ;aa2>=1;aa2--)
{ res5=res5* aa2 ;
}
for ( cc2=l1-l ;cc2>=1;cc2--)
{ res6=res6* cc2 ;
}
z2=res4/(res5*res6);
res[k][l]+=pow(-1, k1+l1-k-l)*pow(2, k+l)*z1*z2*sum[m3][n3]*p[m3][k1]*p[n3][l1];
}
}
else
continue;
}
}
}
}
//float ttt=0;
/*
for (int j4=0;j4<M;j4++ ){
for (int j3=0;j3<N;j3++ ){
// for (float x=0; x<=1;x=x+1/M){
// for (float y=0; y<=1;y=y+1/N){
for (int kk=0;kk<=d;kk++){
for (int ll=0;ll<=d-kk;ll++){
rest[j4][j3]=pow(1/(j4+1),kk)*pow(1/(j3+1),ll)*res[kk][ll]+rest[j4][j3];
}
}
}
}
*/
//}
//}
for (i=0;i<d;i++) //输出矩阵
{
for (j=0;j<d;j++)
{
printf("% 6f ",res[i][j]);
}
printf("\n");
}
/*
for (i=0;i<M;i++) //输出矩阵
{
for (j=0;j<N;j++)
{
printf("% 6f ",rest[i][j]);
}
printf("\n");
}
*/
}
int i,j;
float a,b,c;
float p[d][d] = {0};//全部初始化为0
p[0][0]=1; p[1][0]=0; p[1][1]=1;
for (int n=0; n<d; n++)
{
for (int k=0;k<d;k++)
{
/*
if (n<k)
{ p[n][k]=0;
}
*/
//else
//{
if (k<1)
a=0;
else
a=p[n][k-1];
if (n<1)
b=0;
else
b=p[n-1][k];
c= a*(2*n+1)/(n+1)-b*n/(n+1.0);
if (n+1>d)
break;
else
p[n+1][k]=c; //mark, 在这块的时候,当n=d-1的时候,n+1=d,所以就成了 p[d][k],这样明显越界了
//}
p[0][0]=1; p[1][0]=0; p[1][1]=1;
}
}