• 締切済み

このプログラムの実行結果についてお助け下さい1

まずはじめに申しますが大変手間をとる回答になるのでそれでも協力してくれる方がいればの質問です・・・。 このプログラムを実行すると、upperのU1、U2と、lowerのU1、U2の結果において、最後のelseの中のプログラムが実行されていないせいで、「ここまでが~」が表示されるだけになり、「抜き出した~」の前の実行結果が初期値通り0になってしまっています。何故どれも最後のelse文が実行されないのか・・・お教え頂けると助かります。あまりにも長いので(コンパクトにできていないので)2回の質問に分けてしまいます・・・。そして非常に見にくくて済みません #include<stdio.h> #include<math.h> int main(void) { int L,M,N,A,B,C; double U1,U2,x,y,z,X,Y,Z,r,ux1,uy1,uz1,ux2,uy2,uz2,Hdx,Hdy,Hdz; double Hdx1,Hdy1,Hdz1,Hdx2,Hdy2,Hdz2,Hdip1,Hdip2,Hdip3,Hdip4,Hdip5,Hdip6,uB,fai,sita,RAD,a,b,c; double Hdx3,Hdy3,Hdz3,Hdx4,Hdy4,Hdz4,Hdx5,Hdy5,Hdz5; double Hdx6,Hdy6,Hdz6,Hdx7,Hdy7,Hdz7,Hdx8,Hdy8,Hdz8; double Hdx9,Hdy9,Hdz9,Hdx10,Hdy10,Hdz10,Hdx11,Hdy11,Hdz11; double Hdx12,Hdy12,Hdz12,Hdx13,Hdy13,Hdz13,Hdx14,Hdy14,Hdz14; double Hdx15,Hdy15,Hdz15,Hdx16,Hdy16,Hdz16,Hdx17,Hdy17,Hdz17; double Hdx18,Hdy18,Hdz18,Hdx19,Hdy19,Hdz19,Hdx20,Hdy20,Hdz20; double Hdx21,Hdy21,Hdz21,Hdx22,Hdy22,Hdz22; double Px1,Py1,Pz1,Px2,Py2,Pz2,THDX11,THDY11,THDZ11; double THDX12,THDY12,THDZ12,THDX21,THDY21,THDZ21; double THDX22,THDY22,THDZ22,R,gamma,Beta,CPA,CPB,CPC,upper,lower; uB=9.274; U1=3.41*uB; U2=-U1; RAD=3.14159265358979/180; a=7.256; b=8.575; c=3.544; Beta=7.55*RAD; CPA=0.0604; CPB=0.3; CPC=0.156; //プロトンの位置 Px1=CPA*a*cos(Beta); Py1=CPB*b; Pz1=CPC*c-CPA*a*sin(Beta); Px2=-Px1; Py2=Py1; Pz2=-Pz1; sita=90*RAD; fai=90*RAD; Hdx5=0; Hdy5=0; Hdz5=0; Hdx6=0; Hdy6=0; Hdz6=0; Hdx7=0; Hdy7=0; Hdz7=0; Hdx8=0; Hdy8=0; Hdz8=0; Hdx9=0; Hdy9=0; Hdz9=0; Hdx15=0; Hdy15=0; Hdz15=0; Hdx16=0; Hdy16=0; Hdz16=0; Hdx17=0; Hdy17=0; Hdz17=0; Hdx18=0; Hdy18=0; Hdz18=0; Hdx19=0; Hdy19=0; Hdz19=0; THDX11=0; THDY11=0; THDZ11=0; THDX12=0; THDY12=0; THDZ12=0; Hdx4=0; Hdy4=0; Hdz4=0; Hdx10=0; Hdy10=0; Hdz10=0; THDX21=0; THDY21=0; THDZ21=0; THDX22=0; THDY22=0; THDZ22=0; Hdx14=0; Hdy14=0; Hdz14=0; Hdx20=0; Hdy20=0; Hdz20=0; R=6; gamma=4.25775; A=(R/a)+1; B=(R/b)+1; C=(R/c)+1; ux1=U1*sin(sita)*cos(fai); uy1=U1*sin(sita)*sin(fai); uz1=U1*cos(sita); ux2=U2*sin(sita)*cos(fai); uy2=U2*sin(sita)*sin(fai); uz2=U2*cos(sita); //upper //U1のとき for(L=-A;L<=A;L++) { for(M=-B;M<=B;M++) { for(N=-C;N<=C;N++) { x=L*a*cos(Beta); y=M*b; z=N*c-L*a*sin(Beta); X=x-Px1; Y=y-Py1; Z=z-Pz1; r=sqrt((X*X)+(Y*Y)+(Z*Z)); if(r<R){ if(L==0&&M==0&&N==0){ Hdx1=((-ux1/pow(r,3))+3*X*(ux1*X+uy1*Y+uz1*Z)/pow(r,5)); Hdy1=((-uy1/pow(r,3))+3*Y*(ux1*X+uy1*Y+uz1*Z)/pow(r,5)); Hdz1=((-uz1/pow(r,3))+3*Z*(ux1*X+uy1*Y+uz1*Z)/pow(r,5)); } else if(L==0&&M==0&&N==1){ Hdx2=((-ux1/pow(r,3))+3*X*(ux1*X+uy1*Y+uz1*Z)/pow(r,5)); Hdy2=((-uy1/pow(r,3))+3*Y*(ux1*X+uy1*Y+uz1*Z)/pow(r,5)); Hdz2=((-uz1/pow(r,3))+3*Z*(ux1*X+uy1*Y+uz1*Z)/pow(r,5)); } else if(L==0&&M==0&&N==-1){ Hdx3=((-ux1/pow(r,3))+3*X*(ux1*X+uy1*Y+uz1*Z)/pow(r,5)); Hdy3=((-uy1/pow(r,3))+3*Y*(ux1*X+uy1*Y+uz1*Z)/pow(r,5)); Hdz3=((-uz1/pow(r,3))+3*Z*(ux1*X+uy1*Y+uz1*Z)/pow(r,5)); } else{ Hdx=((-ux1/pow(r,3))+3*X*(ux1*X+uy1*Y+uz1*Z)/pow(r,5)); Hdy=((-uy1/pow(r,3))+3*Y*(ux1*X+uy1*Y+uz1*Z)/pow(r,5)); Hdz=((-uz1/pow(r,3))+3*Z*(ux1*X+uy1*Y+uz1*Z)/pow(r,5)); THDX11=THDX11+Hdx; THDY11=THDY11+Hdy; THDZ11=THDZ11+Hdz; printf("L=%d M=%d N=%d R=%lf\n",L,M,N,r); } } } } } Hdx4=Hdx1+Hdx2+Hdx3; Hdy4=Hdy1+Hdy2+Hdy3; Hdz4=Hdz1+Hdz2+Hdz3; printf("ここまでがupperのU1の時のL,M,N、それぞれの値\n"); 続きを2に載せます。

みんなの回答

  • f272
  • ベストアンサー率46% (8019/17139)
回答No.1

> 何故どれも最後のelse文が実行されないのか それはそのようにプログラムされているから。 for (L = -A; L <= A; L++){for (M = -B; M <= B; M++){for (N = -C; N <= C; N++){ の3重ループで合計45回回るようだけど,そのうち if (r < R){ を満たすのは L == -1 && M == 0 && N == -1 L == -1 && M == 0 && N == 0 L == -1 && M == 0 && N == 1 L == 0 && M == 0 && N == -1 L == 0 && M == 0 && N == 0 L == 0 && M == 0 && N == 1 の場合しかないのだからelseにはひっかからない。

scottish1246
質問者

お礼

もう一度実行してみるとTHD〇12とTHD〇22のみ値が出て、THD〇11とTHD〇21が0になりました。12と22の値のみでその後のHd〇やHdip、upper、lowerの値が出てしまい、結果的に低くなってしまいました。Rを6から10へ変えてみました。すると11も21も出ました。しかしHdipやupper、lowerは値が変化しませんでした。おそらく間違った数値になりました。 Rの範囲を広げた所でelseにおいてのループでやはりひっかかっていない計算があるようです・・・。 解決には至りませんでしたが回答有難うございます。

関連するQ&A

  • このプログラムの実行結果についてお助け下さい2

    //U2のとき for(L=-A;L<=A;L++) { for(M=-B;M<=B;M++) { for(N=-C;N<=C;N++) { x=(2*L+1)*a*cos(Beta)/2; y=M*b+b/2; z=N*c-((2*L+1)*a*sin(Beta))/2; X=x-Px2; Y=y-Py2; Z=z-Pz2; r=sqrt((X*X)+(Y*Y)+(Z*Z)); if(r<R){ if(L==0&&M==0&&N==0){ Hdx15=((-ux2/pow(r,3))+3*X*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdy15=((-uy2/pow(r,3))+3*Y*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdz15=((-uz2/pow(r,3))+3*Z*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); } else if(L==-1&&M==0&&N==0){ Hdx16=((-ux2/pow(r,3))+3*X*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdy16=((-uy2/pow(r,3))+3*Y*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdz16=((-uz2/pow(r,3))+3*Z*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); } else if(L==0&&M==0&&N==1){ Hdx17=((-ux2/pow(r,3))+3*X*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdy17=((-uy2/pow(r,3))+3*Y*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdz17=((-uz2/pow(r,3))+3*Z*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); } else if(L==-1&&M==0&&N==1){ Hdx18=((-ux2/pow(r,3))+3*X*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdy18=((-uy2/pow(r,3))+3*Y*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdz18=((-uz2/pow(r,3))+3*Z*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); } else if(L=-1&&M==0&&N==-1){ Hdx19=((-ux2/pow(r,3))+3*X*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdy19=((-uy2/pow(r,3))+3*Y*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdz19=((-uz2/pow(r,3))+3*Z*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); } else{ Hdx=((-ux2/pow(r,3))+3*X*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdy=((-uy2/pow(r,3))+3*Y*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdz=((-uz2/pow(r,3))+3*Z*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); THDX22=THDX22+Hdx; THDY22=THDY22+Hdy; THDZ22=THDZ22+Hdz; printf("L=%d M=%d N=%d R=%lf\n",L,M,N,r); } } } } } Hdx20=Hdx15+Hdx16+Hdx17+Hdx18+Hdx19; Hdy20=Hdy15+Hdy16+Hdy17+Hdy18+Hdy19; Hdz20=Hdz15+Hdz16+Hdz17+Hdz18+Hdz19; printf("ここまでがlowerのU2の時のL,M,N、それぞれの値\n"); printf("THDX11は%eです。\n",THDX11); printf("THDY11は%eです。\n",THDY11); printf("THDZ11は%eです。\n",THDZ11); printf("THDX12は%eです。\n",THDX12); printf("THDY12は%eです。\n",THDY12); printf("THDZ12は%eです。\n",THDZ12); printf("THDX21は%eです。\n",THDX21); printf("THDY21は%eです。\n",THDY21); printf("THDZ21は%eです。\n",THDZ21); printf("THDX22は%eです。\n",THDX22); printf("THDY22は%eです。\n",THDY22); printf("THDZ22は%eです。\n",THDZ22); printf("\n"); Hdx21=THDX11+THDX12; Hdy21=THDY11+THDY12; Hdz21=THDZ11+THDZ12; Hdx22=THDX21+THDX22; Hdy22=THDY21+THDY22; Hdz22=THDZ21+THDZ22; printf("Hdx21は%eです。\n",Hdx21); printf("Hdy21は%eです。\n",Hdy21); printf("Hdz21は%eです。\n",Hdz21); printf("Hdx22は%eです。\n",Hdx22); printf("Hdy22は%eです。\n",Hdy22); printf("Hdz22は%eです。\n",Hdz22); Hdip1=sqrt((Hdx21*Hdx21)+(Hdy21*Hdy21)+(Hdz21*Hdz21)); Hdip2=sqrt((Hdx22*Hdx22)+(Hdy22*Hdy22)+(Hdz22*Hdz22)); printf("Hdip1は%eです。\n",Hdip1); printf("Hdip2は%eです。\n",Hdip2); upper=Hdip1*gamma; lower=Hdip2*gamma; printf("upperは%eです。\n",upper); printf("lowerは%eです。\n",lower); upper=0; lower=0; Hdip3=sqrt((Hdx4*Hdx4)+(Hdy4*Hdy4)+(Hdz4*Hdz4)+(Hdx10*Hdx10)+(Hdy10*Hdy10)+(Hdz10*Hdz10)); Hdip4=sqrt((Hdx14*Hdx14)+(Hdy14*Hdy14)+(Hdz14*Hdz14)+(Hdx20*Hdx20)+(Hdy20*Hdy20)+(Hdz20*Hdz20)); printf("抜き出した8個の原子の総合の磁場は、upperの方のHdip3は、%lf、\nlowerの方のHdip4は%lfです。\n",Hdip3,Hdip4); printf("これらを、また元の結晶に戻した時、\n"); upper=0;lower=0; Hdip5=sqrt((Hdx21*Hdx21)+(Hdy21*Hdy21)+(Hdz21*Hdz21)+(Hdx4*Hdx4)+(Hdy4*Hdy4)+(Hdz4*Hdz4)+(Hdx10*Hdx10)+(Hdy10*Hdy10)+(Hdz10*Hdz10)); Hdip6=sqrt((Hdx22*Hdx22)+(Hdy22*Hdy22)+(Hdz22*Hdz22)+(Hdx14*Hdx14)+(Hdy14*Hdy14)+(Hdz14*Hdz14)+(Hdx20*Hdx20)+(Hdy20*Hdy20)+(Hdz20*Hdz20)); upper=Hdip5*gamma; lower=Hdip6*gamma; printf("upperは%eです。\n",upper); printf("lowerは%eです。\n",lower); 以上です・・・。

  • このプログラムの実行結果についてお助け下さい2

    2、続きです。 ちなみに以前に同じ質問を投稿し、回答を頂いてそこを直すと正しく実行できたと勘違いして質問を終わらせてしまいました・・・。 //U2のとき for(L=-A;L<=A;L++) { for(M=-B;M<=B;M++) { for(N=-C;N<=C;N++) { x=(2*L+1)*a*cos(Beta)/2; y=M*b+b/2; z=N*c-((2*L+1)*a*sin(Beta))/2; X=x-Px2; Y=y-Py2; Z=z-Pz2; r=sqrt((X*X)+(Y*Y)+(Z*Z)); if(r<R){ if(L==0&&M==0&&N==0){ Hdx15=((-ux2/pow(r,3))+3*X*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdy15=((-uy2/pow(r,3))+3*Y*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdz15=((-uz2/pow(r,3))+3*Z*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); } else if(L==-1&&M==0&&N==0){ Hdx16=((-ux2/pow(r,3))+3*X*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdy16=((-uy2/pow(r,3))+3*Y*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdz16=((-uz2/pow(r,3))+3*Z*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); } else if(L==0&&M==0&&N==1){ Hdx17=((-ux2/pow(r,3))+3*X*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdy17=((-uy2/pow(r,3))+3*Y*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdz17=((-uz2/pow(r,3))+3*Z*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); } else if(L==-1&&M==0&&N==1){ Hdx18=((-ux2/pow(r,3))+3*X*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdy18=((-uy2/pow(r,3))+3*Y*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdz18=((-uz2/pow(r,3))+3*Z*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); } else if(L=-1&&M==0&&N==-1){ Hdx19=((-ux2/pow(r,3))+3*X*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdy19=((-uy2/pow(r,3))+3*Y*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdz19=((-uz2/pow(r,3))+3*Z*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); } else{ Hdx=((-ux2/pow(r,3))+3*X*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdy=((-uy2/pow(r,3))+3*Y*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdz=((-uz2/pow(r,3))+3*Z*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); THDX22=THDX22+Hdx; THDY22=THDY22+Hdy; THDZ22=THDZ22+Hdz; printf("L=%d M=%d N=%d R=%lf\n",L,M,N,r); } } } } } Hdx20=Hdx15+Hdx16+Hdx17+Hdx18+Hdx19; Hdy20=Hdy15+Hdy16+Hdy17+Hdy18+Hdy19; Hdz20=Hdz15+Hdz16+Hdz17+Hdz18+Hdz19; printf("ここまでがlowerのU2の時のL,M,N、それぞれの値\n"); printf("THDX11は%eです。\n",THDX11); printf("THDY11は%eです。\n",THDY11); printf("THDZ11は%eです。\n",THDZ11); printf("THDX12は%eです。\n",THDX12); printf("THDY12は%eです。\n",THDY12); printf("THDZ12は%eです。\n",THDZ12); printf("THDX21は%eです。\n",THDX21); printf("THDY21は%eです。\n",THDY21); printf("THDZ21は%eです。\n",THDZ21); printf("THDX22は%eです。\n",THDX22); printf("THDY22は%eです。\n",THDY22); printf("THDZ22は%eです。\n",THDZ22); printf("\n"); Hdx21=THDX11+THDX12; Hdy21=THDY11+THDY12; Hdz21=THDZ11+THDZ12; Hdx22=THDX21+THDX22; Hdy22=THDY21+THDY22; Hdz22=THDZ21+THDZ22; printf("Hdx21は%eです。\n",Hdx21); printf("Hdy21は%eです。\n",Hdy21); printf("Hdz21は%eです。\n",Hdz21); printf("Hdx22は%eです。\n",Hdx22); printf("Hdy22は%eです。\n",Hdy22); printf("Hdz22は%eです。\n",Hdz22); Hdip1=sqrt((Hdx21*Hdx21)+(Hdy21*Hdy21)+(Hdz21*Hdz21)); Hdip2=sqrt((Hdx22*Hdx22)+(Hdy22*Hdy22)+(Hdz22*Hdz22)); printf("Hdip1は%eです。\n",Hdip1); printf("Hdip2は%eです。\n",Hdip2); upper=Hdip1*gamma; lower=Hdip2*gamma; printf("upperは%eです。\n",upper); printf("lowerは%eです。\n",lower); upper=0; lower=0; Hdip3=sqrt((Hdx4*Hdx4)+(Hdy4*Hdy4)+(Hdz4*Hdz4)+(Hdx10*Hdx10)+(Hdy10*Hdy10)+(Hdz10*Hdz10)); Hdip4=sqrt((Hdx14*Hdx14)+(Hdy14*Hdy14)+(Hdz14*Hdz14)+(Hdx20*Hdx20)+(Hdy20*Hdy20)+(Hdz20*Hdz20)); printf("抜き出した8個の原子の総合の磁場は、upperの方のHdip3は、%lf、\nlowerの方のHdip4は%lfです。\n",Hdip3,Hdip4); printf("これらを、また元の結晶に戻した時、\n"); upper=0;lower=0; Hdip5=sqrt((Hdx21*Hdx21)+(Hdy21*Hdy21)+(Hdz21*Hdz21)+(Hdx4*Hdx4)+(Hdy4*Hdy4)+(Hdz4*Hdz4)+(Hdx10*Hdx10)+(Hdy10*Hdy10)+(Hdz10*Hdz10)); Hdip6=sqrt((Hdx22*Hdx22)+(Hdy22*Hdy22)+(Hdz22*Hdz22)+(Hdx14*Hdx14)+(Hdy14*Hdy14)+(Hdz14*Hdz14)+(Hdx20*Hdx20)+(Hdy20*Hdy20)+(Hdz20*Hdz20)); upper=Hdip5*gamma; lower=Hdip6*gamma; printf("upperは%eです。\n",upper); printf("lowerは%eです。\n",lower); 以上です・・・。

  • このプログラムのエラーの原因を教えて下さいNo.1

    まずはじめに申しますが大変手間をとる回答になるのでそれでも協力してくれる方がいればの質問です・・・。 このプログラムを実行すると、Hdx3no2が宣言なしで使われているとエラーが出るのですが理由がわかりません。どこがおかしいのか教えてもらえると助かります。あまりにも長いので(コンパクトにできていないので)3回の質問に分けてしまいます・・・。そして非常に見にくくて済みません。 #include<stdio.h> #include<math.h> int main(void) { int L,M,N,A,B,C; double U1,U2,x,y,z,X,Y,Z,r,ux1,uy1,uz1,ux2,uy2,uz2,Hdx,Hdy,Hdz; double Hdx1,Hdy1,Hdz1,Hdx2,Hdy2,Hdz2,Hdip1,Hdip2,uB,fai,sita,RAD,a,b,c; double Hdx3,Hdy3,Hdz3,Hdx3no1,Hdy3no1,Hdz3no1,Hdx3no2,Hdy3no2,Hdz3no2; double Hdx4,Hdy4,Hdz4,Hdx4no1,Hdy4no1,Hdz4no1,Hdx4no2,Hdy4no2,Hdz4no2; double Px1,Py1,Pz1,Px2,Py2,Pz2,THDX11,THDY11,THDZ11; double THDX12,THDY12,THDZ12,THDX21,THDY21,THDZ21; double THDX22,THDY22,THDZ22,R,gamma,Beta,CPA,CPB,CPC,upper,lower; uB=9.274; U1=3.41*uB; U2=-U1; RAD=3.14159265358979/180; a=7.256; b=8.575; c=3.544; Beta=7.55*RAD; CPA=0.0604; CPB=0.3; CPC=0.156; //プロトンの位置 Px1=CPA*a*cos(Beta); Py1=CPB*b; Pz1=CPC*c-CPA*a*sin(Beta); Px2=-Px1; Py2=Py1; Pz2=-Pz1; sita=90*RAD; fai=90*RAD; THDX11=0; THDY11=0; THDZ11=0; THDX12=0; THDY12=0; THDZ12=0; THDX21=0; THDY21=0; THDZ21=0; THDX22=0; THDY22=0; THDZ22=0; R=6; gamma=4.25775; A=(R/a)+1; B=(R/b)+1; C=(R/c)+1; ux1=U1*sin(sita)*cos(fai); uy1=U1*sin(sita)*sin(fai); uz1=U1*cos(sita); ux2=U2*sin(sita)*cos(fai); uy2=U2*sin(sita)*sin(fai); uz2=U2*cos(sita); //upper //U1のとき for(L=-A;L<=A;L++) { for(M=-B;M<=B;M++) { for(N=-C;N<=C;N++) { x=L*a*cos(Beta); y=M*b; z=N*c-L*a*sin(Beta); X=x-Px1; Y=y-Py1; Z=z-Pz1; r=sqrt((X*X)+(Y*Y)+(Z*Z)); if(r<R&&L!=0&&M!=0&&N!=-1||L!=0&&M!=0&&N!=0||L!=0&&M!=0&&N!=1){ Hdx=((-ux1/pow(r,3))+3*X*(ux1*X+uy1*Y+uz1*Z)/pow(r,5)); Hdy=((-uy1/pow(r,3))+3*Y*(ux1*X+uy1*Y+uz1*Z)/pow(r,5)); Hdz=((-uz1/pow(r,3))+3*Z*(ux1*X+uy1*Y+uz1*Z)/pow(r,5)); THDX11=THDX11+Hdx; THDY11=THDY11+Hdy; THDZ11=THDZ11+Hdz; printf("L=%d M=%d N=%d R=%lf\nAAA\n",L,M,N,r); } else if(L==0&&M==0&&N==-1||L==0&&M==0&&N==0||L==0&&M==0&&N==1){ Hdx3no1=((-ux1/pow(r,3))+3*X*(ux1*X+uy1*Y+uz1*Z)/pow(r,5)); Hdy3no1=((-uy1/pow(r,3))+3*Y*(ux1*X+uy1*Y+uz1*Z)/pow(r,5)); Hdz3no1=((-uz1/pow(r,3))+3*Z*(ux1*X+uy1*Y+uz1*Z)/pow(r,5)); } else{ continue; } } } } //U2のとき for(L=-A;L<=A;L++) { for(M=-B;M<=B;M++) { for(N=-C;N<=C;N++) { x=(2*L+1)*a*cos(Beta)/2; y=M*b+b/2; z=N*c-((2*L+1)*a*sin(Beta))/2; X=x-Px1; Y=y-Py1; Z=z-Pz1; r=sqrt((X*X)+(Y*Y)+(Z*Z)); if(r<R&&L!=-1&&M!=0&&N!=-1||L!=-1&&M!=0&&N!=0||L!=-1&&M!=0&&N!=1){ if(L!=0&&M!=0&&N!=-1||L!=0&&M!=0&&N!=0||L!=0&&M!=0&&N!=1){ Hdx=((-ux2/pow(r,3))+3*X*(ux2*X+uy2*Y+uz2+Z)/pow(r,5)); Hdy=((-uy2/pow(r,3))+3*Y*(ux2*X+uy2*Y+uz2+Z)/pow(r,5)); Hdz=((-uz2/pow(r,3))+3*Z*(ux2*X+uy2*Y+uz2+Z)/pow(r,5)); THDX12=THDX12+Hdx; THDY12=THDY12+Hdy; THDZ12=THDZ12+Hdz; printf("L=%d M=%d N=%d R=%lf\nBBB\n",L,M,N,r); } } else if(L==-1&&M==0&&N==-1||L==-1&&M==0&&N==0||L==-1&&M==0&&N==1){ if(L==0&&M==0&&N==-1||L==0&&M==0&&N==0||L==0&&M==0&&N==1){ Hdx3no2=((-ux2/pow(r,3))+3*X*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdy3no2=((-uy2/pow(r,3))+3*Y*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); Hdz3no2=((-uz2/pow(r,3))+3*Z*(ux2*X+uy2*Y+uz2*Z)/pow(r,5)); } } else{ continue; } } } } これをNo.1として続きのプログラムをNo.2に挙げます。

  • 方向微分係数の説明が理解できません

     48歳の会社員です。裳華房の「基礎解析学コース ベクトル解析」を使って ベクトル解析を勉強しているのですが、22頁にある方向微分係数の説明がどう しても理解できません。  理解できない部分の画像を添付しましたが、(1)の式が(2)の式になる過程と (2)の式の [ ]t=0 (鍵括弧と鍵括弧の外にある「t=0」)の意味が分かりません。  (2)の [ ] (鍵括弧)の中の式は d/dt φ(x + t * ux, y + t * uy, z + t * uz) = lim h→0 (φ(x + (t + h) * ux, y + (t + h) * uy, z + (t + h) * uz) - φ(x + t * ux, y + t * uy, z + t * uz)) / h と考えたのですが、下の(1)の式にすることができません。 dφ/du = lim t→0 (φ(x + t * ux, y + t * uy, z + t * uz) - φ(x, y, z)) / t  (1)の式を(2)の式にすることができれば、 X = x + t * ux, Y = y + t * uy, Z = z + t * uz として、 φ(x + t * ux, y + t * uy, z + t * uz) を φ(X, Y, Z) に置き換え、 dφ/du = ∂φ/∂X * dX/dt + ∂φ/∂Y * dY/dt + ∂φ/∂Z * dZ/dt = ∂φ/∂X * ux + ∂φ/∂Y * uy + ∂φ/∂Z * uz = ∂φ/∂x * ux + ∂φ/∂y * uy + ∂φ/∂z * uz と(3)の式にすると理解しているのですが、この流れで合っているでしょうか ?  独学で勉強しており周りに聞ける人がいないため、ご教示いただければ幸いです。

  • 複素関数の質問です。

    問題の(1)と(2)はこれであっていますか? (3)と(4)が分からなかったので教えていただきたいです。 よろしくお願いします。 (1) f(z)=u(x,y)+iv(x,y)とする。 コーシーリーマンの関係式より ux=vy, uy=-vx-(1) またf(z~)=u(x,v)-iv(x,y)より ux=-vy, uy=vx よってux=uy=vx=vy=0となるので、u(x,y)とv(x,y)は定数となり、f(z)は定数。 (2) |f(z)|=√u^2(x,y)+v^2(x,y) g(x,y)=|f(z)|=√u^2(x,y)+v^2(x,y)とすると gx=(ux+uy)/g(x,y) gy=(vx+vy)/g(x,y) g(x,y)は定数なので ux=-uy, vx=-vy これらと(1)からux=uy=vx=vy=0となるので、u(x,y)とv(x,y)は定数となり、f(z)は定数。

  • ベクトル解析(独学)、∇fの定義

    z=f(x、y)に対し、対応する地点(x、y、f(x、y))の傾斜を考える。 xy平面上で、(x、y)を通る単位方向ベクトルu=(ux,xy)の方向を向いた直線l (x+s(ux),y+s(uy))(sはパラメーター)を考え、この直線を含むxy平面に垂直な平面とfが交わって出来る曲線に沿って、(x,y,f(x,y))から、(x+s(ux),y+s(uy)、f(x+s(ux),y+s(uy))まで動いたとき、この間の平均傾斜は {f(x+s(ux),y+s(uy))-f(x,y)}/sだから、(x,y)での傾斜は(画像の6.1)であり、 6.1は(u内積V)と画像にあるのですが、6.1から(u内積V)を導いている式変形がよくわかりません。これはどういう意味なのでしょうか?

  • 1階偏微分

    (x,y)=(0,s)のときU=βsをとり Ux^2 + Uy^2 = 1 + x^2 を満たすU=U(x,y)を見つけたいのですが(0<β<1) と以前質問したところ質問の意味がわからないという指摘を受けました。 (x,y)=(0,s)とはx=0 y=s U=βsとはβとsの積 Ux^2 + Uy^2 とは(∂U/∂x)^2 + (∂U/∂y)^2 です

  • Uとその転置行列の積について

    行列の積について質問です。 任意のベクトルに対する回転について調べていたところ、こちらのサイトで説明されていたのですが、 →ttp://www004.upp.so-net.ne.jp/hiromu-i/tips001.html U=(ux,uy,uz)t   (tは転置行列の記号) UtはUの転置行列 の時、 UUt= | uxux, uyux, uzux | | uxuy, uyuy, uzuy | | uxuz, uyuz, uzuz | というところが理解できなくて困っています。 Uは(ux,uy,uz)t と書いてあるので、 3行1列の行列と考えて、 Utは(ux,uy,uz)tの転置だから(ux,uy,uz)となるので、 1行3列の行列と考えました。 すると、UUtはスカラーになって UUt = ux^2+uy^2+uz^2となると思うのですが、 どう理解すれば UUt= | uxux, uyux, uzux | | uxuy, uyuy, uzuy | | uxuz, uyuz, uzuz | となるのでしょうか。 どなたか教えて下さい。 宜しくお願いいたします。

  • 1階偏微分

    (x,y)=(0,s)のときU=βsをとり Ux^2 + Uy^2 = 1 + x^2 を満たすU=U(x,y)を見つけたいのですが(0<β<1) どうすればいいのかわかりません>< これを使って解く問題があるのですがこれがわからなければ どうしようもありません。どなたか教えてもらえないでしょうか

  • このプログラムを実行すると座標列になるのですが、どうして実行結果のよう

    このプログラムを実行すると座標列になるのですが、どうして実行結果のような座標列になるのかがよくわかりません。 僕はdraw_polygon()中のif(r>xxx)の部分に何かあるような気がします。単なる推測ですが・・・。 理由を教えていただけませんか? #define _CRT_SECURE_NO_DEPRECATE 1 #include <stdio.h> #include <math.h> #defi ne PI 3.14159265358979323846 FILE *fp;//グローバル変数.あまり使うな! double get_x(double r, double angle); double get_y(double r, double angle); void draw_polygon(int n, double r, double cx, double cy); void main(void) { fp=fopen("polygon.csv","w");//チェック省略 draw_polygon(4,1,0,0); fclose(fp); } double get_x(double r, double angle) { return(r*cos(angle)); } double get_y(double r, double angle) { return(r*sin(angle)); } void draw_polygon(int n, double r, double cx, double cy) { int i; double delta,angle,x,y; delta=2.0*PI/n; for(i=0; i<=n; i++)//i<=n { angle=delta*i; x=get_x(r,angle)+cx; y=get_y(r,angle)+cy; fprintf(fp,"%8.3f,%8.3f\n",x,y); } fprintf(fp,"\n"); if(r>0.05) { for(i=0; i<=n; i++)//i<=n { angle=delta*i; x=get_x(r,angle)+cx; y=get_y(r,angle)+cy; draw_polygon(n,r*0.5,x,y); } } } プログラムを見やすく作ったのですが、この質問を掲示した途端に上下そろってしまいました(汗) 見にくくなってしまいすみません。

専門家に質問してみよう