• 締切済み

複素数と偏微分

 途中式がわからなくて、もうずっと詰まっているので、わかる方いらしたらアホな私に教えていただけるとうれしいです。 まず条件。 f(z) = 1/(1 + exp(-x)) + i /(1 + exp(-y)) ただし z = x + y * i Uj = ΣWji * Ii + θj i Sk = ΣVkj * Hj + γk j Hj = f(Uj) Ok = f(Sk) Ep = (1/2) * Σ|Tk - Ok|^2 Tk - Ok = δk Epとx,y以外は複素数。 単独で存在するiは虚数記号 他のiとj,kは添え字 わからないのは以下の2式の途中式です。(1式)が(2式)になるらしいのですが、どうしてなのかがよくわかりません。 ΔVkj = -(∂Ep/∂Re[Vkj]) - i(∂Ep/∂Im[Vkj])--(1式) ΔVkj = Hj_ *{Re[δk](1 - Re[Ok])Re[Ok] +iIm[δk](1 - Im[Ok])Im[Ok]} --(2式) Hj_ は Hj の共役複素数 長くて文字制限があるので回答No.1に私がやってみて失敗したやり方を書きました。微分に詳しい方が見ればおかしいことをしていると思われますのでご指摘いただけるとうれしいです。

みんなの回答

回答No.1

教えてgooは自分で回答できないんですね(汗) とにかく以下に自分(質問者)がやってみてダメだった式変形を書きます 1式の第1項 = -(∂Ep/∂Re[Vkj]) = -(∂Ep/∂Re[Ok]) * (∂Re[Ok]/∂Re[Sk]) * (∂Re[Sk]/∂Re[Vkj]) = Re[Tk - Ok] * (∂Re[Ok]/∂Re[Sk]) * (∂Re[Sk]/∂Re[Vkj]) = Re[δk] * (∂Re[f(Sk)]/∂Re[Sk]) * (∂Re[Sk]/∂Re[Vkj]) = Re[δk] * Re[Ok] * (1-Re[Ok]) * (∂Re[Sk]/∂Re[Vkj]) = Re[δk] * Re[Ok] * (1-Re[Ok])*(∂Re[Σ(Vkj * Hj) + γk ]/∂Re[Vkj]) = Re[δk]*Re[Ok]*(1-Re[Ok]) *{∂(Re[Vkj]*Re[Hj] - Im[Vkj]*Im[Hj])/∂Re[Vkj]} = Re[δk]*Re[Ok]*(1-Re[Ok])*Re[Hj] 第2項も同様に展開すると 第2項 = Im[δk]*Im[Ok]*(1-Re[Im])*Re[Hj] となって、最終的な式は 第1項 + 第2項 =Re[Hj]*{Re[δk](1 - Re[Ok])Re[Ok] +iIm[δk](1 - Im[Ok])Im[Ok]} 一見似ていますが、Hj_のところにRe[Hj]が来てしまっています。

関連するQ&A

  • 複素数と編微分

    複素数の編微分で自分で解いてみたのですが,良くわからないので、助言をいただけるとうれしいです。 まず問題の条件ですが S,V,Hを複素数 j,kを自然数の添え字として Sk = ΣVkj * Hj j という式があるとします この条件をもとに以下の式をとくと、 ∂Re[Sk] --------- ∂Re[Vkj] ∂(Re[Vkj] * Re[Hj] - Im[Vkj] * Im[Hj]) = --------------------------------------- ∂Re[Vkj] = Re[Hj] となると思うのですが、正しいのでしょうか もしわかるかたがいらっしゃるなら回答をいただけるとうれしいです。

  • 複素数の積分

    『∫exp(-z^2)dzを z=√at+b/2√a (a≠0,-∞<t<∞)の経路上で積分せよ。  ただし、a、bは複素定数とする。』 という問題で a=r exp(iθ) (r>0、-π<θ≦π)とすると、 √a=√r exp[i(θ+2kπ)/2] (k=0,1)ですが この問題の積分経路を実際に複素数平面上に図示すると、直線はb≠0のときは原点を通らず、 直線の動き方が、Re(√a)>0の場合は左から右へ、 Re(√a)=0かつIm(√a)>0の場合は下から上へ、 Re(√a)=0かつIm(√a)<0の場合は上から下へ、 Re(√a)<0の場合は右から左へ動く事が分かりました。  ここから、どうすればよいのでしょうか?これは以下の質問http://www.okweb.ne.jp/kotaeru.php3?q=441692から発生した問題です。

  • 複素数の問題です。

    C_1, C_k, C_1', C_k'は複素数で |C_1|^2=|C_1'|^2, |C_k|^2=|C_k'|^2, |C_k+C_1|^2=|C_k'+C_1'|^2 であるとする。 このとき、 Re(C_k/C_1)=Re(C_k'/C_1') および Im(C_k/C_1)=±Im(C_k'/C_1') であることを示せ。

  • 偏微分方程式の解について。

    現在、私は3変数(x、y、z)2階の偏微分方程式を解いています。 その同次解を導いています。 まず、変数の一般解をΣX(r)*(cosmθ)、ΣY(r)*(cosmθ)、ΣZ(r)*(cosmθ)と仮定し元の式に代入したのち、r=exp(s)と変数変換します。 そして同次解の形をX=X'exp(λs),Y=Y'exp(λs),Z=Z'exp(λs)のように仮定し代入することによって、自明でない解をもつ次の特性方程式を得ました。 p^3+d*p+f=0 このときp=(λ^2-A)とします。 またAとdとfは定数です。 ここから解を導くのですが λ^2=p+A>0のときは、 X=F*exp(λs)+S*exp(λs)  =F*r^λ+S*r^(-λ) このときのF,Sは勝手においた未知数です。 とまずおきました。 次にXを既知だと仮定し、YとZの関係を求めるのですが、 関数型はXと同様のために、F=1として 同次解を仮定して代入した式で計算してYとZの関係を導きました。 (簡単な2次方程式を解く作業です) 同様にS=1としても行いました。 そこで以下の解を得ました。 Y=G(λ)*F*r^λ+G(-λ)*S*r^(-λ) Z=H(λ)*F*r^λ+H(-λ)*S*r^(-λ) G(λ)とH(λ)は2次方程式を解いて出した関係式です。 次がわからないところです。 λ^2=p+A<0の場合、つまりλの根が複素数の場合です。 上と同様に係数を比較して求めるのですが、 X=F*cos(λs)+S*sin(λs) と仮定するところまではわかりますが、 その仮定によって Y={Re[G(j*λ)]cos(λs)-Im[G(j*λ)]sin(λs)}*F +{Im[G(j*λ)]cos(λs)+Re[G(j*λ)]sin(λs)}*S となるのがわかりません。Zについても式の形は同様です。 本当に困っています。 意味がわからない文章かもしれませんが、汲み取っていただけると幸いです。 ヒントでもいいのでください。 ちなみに 実部については G(j*λ)=G(j*-λ)が成り立ち      虚数部については G(j*λ)=-G(j*-λ)が成り立っております。

  • 複素数の計算で困っています…

    複素数の計算で困っています… オイラーの公式 exp(-i * φ) = cosφ - i*sinφ および、  E_p = A_p*exp(-i * φ_p) 、E_m = A_m*exp(-i * φ_m) の関係式を用いると、 E_x = (E_p + E_m)/√2 E_y = i * (E_p - E_m)/√2 の2式から |E_x|^2 = |E_y|^2 = はどのように変換できるでしょうか。(iは虚数です) (A_p,A_m,φ_p,φ_mを用いて) 大学の授業の関係で困っています… どなたか分かる方教えていただけないでしょうか?

  • maxima複素数の指数表示の加算

    maximaで複素数を指数表示して加算を行いたいのですが、 exp[%i*(1/4)*%pi] + exp[%i*(3/4)*%pi]; と入力しても、そのままの式が出てくるだけで計算してくれません。 どうすればexp一つにできるでしょうか?

  • 複素数のプログラムの組み方

    複素数のプログラムの組み方 今自分はy=exp(-jkx)という式のプロットをするプログラムを組んでいます。 しかしexpの()の中はdouble型しか定義できないということがわかったのでオイラーの 公式よりcos(kx)-isin(kx)と変換してプログラムを組んでいるのですがなぜか y=xのグラフになってしまいます。isin(kx)の方に問題があると思いますが #include <complex.h>もできています… どなたか式の作り方を教えて頂けないでしょうか? よろしくお願い致します。

  • 回折格子の式変形

    回折格子の式で三角関数の複素数表示を使った式の変形の仕方がわかりません 式 Σcos[kr+(n-1)Φ-wt)] =ReΣexp{i[kr+(n-1)Φ-wt]} =Re{exp[i(kr-wt)]Σexp[i(n-1)Φ]} =Re{exp[i(kr-wt)]1-exp(iNΦ)/1-exp(iΦ)} この式から次の式への変形方法がわかりませんどうすればよいでしょうかシグマの範囲はn=1からNです。

  • プログラム初心者で以下の問題が検討すらできません。どなたか参考にどのようなプログラムになるか教えてください。

    抵抗とコンデンサからなる並列回路の複素インピーダンスとその絶対値を求めるプログラムを作成。 プログラムは、抵抗の値、コンデンサの容量、周波数を入力すると、複素インピーダンスとその絶対値を求めその結果を表示するものである。 私の解答です /* * mycomplex.c: 複素数関数 */ #include <stdio.h> #include <math.h> #include "mycomplex.h" /* 複素数の文字列を作る */ char *printc(mycomplex z) { static char str[BUFSIZ]; sprintf(str, "(%lf, %lf)", real(z), imag(z)); return str; } /* 実数と虚数を与えて複素数を作る */ mycomplex mkcomplex(double r, double i) { mycomplex z; z.re = r; z.im = i; return z; } /* 絶対値と偏角を与えて複素数を作る */ mycomplex mkcomplex_at(double abs, double theta) { mycomplex z; z.re = abs * cos(theta); z.im = abs * sin(theta); return z; } /* ノルム */ double norm(mycomplex z) { return z.re * z.re + z.im * z.im; } /* 絶対値 */ double cabs(mycomplex z) { return sqrt(norm(z)); } /* 偏角 */ double carg(mycomplex z) { return atan2(z.im, z.re); } /* 共役複素数 */ mycomplex conj(mycomplex a) { mycomplex z; z.re = a.re; z.im = 0.0 - a.im; return z; } /* 逆数 */ mycomplex cinv(mycomplex a) { mycomplex z; double n; n = norm(a); z.re = a.re / n; z.im = 0.0 - a.im / n; return z; } /* 加算 */ mycomplex cadd(mycomplex a, mycomplex b) { mycomplex z; z.re = a.re + b.re; z.im = a.im + b.im; return z; } /* 減算 */ mycomplex csub(mycomplex a, mycomplex b) { mycomplex z; z.re = a.re - b.re; z.im = a.im - b.im; return z; } /* 乗算 */ mycomplex cmul(mycomplex a, mycomplex b) { mycomplex z; z.re = a.re * b.re - a.im * b.im; z.im = a.re * b.im + a.im * b.re; return z; } /* 除算 */ mycomplex cdiv(mycomplex a, mycomplex b) { mycomplex z; double n; n = norm(b); z.re = (a.re * b.re + a.im * b.im) / n; z.im = (a.im * b.re - a.re * b.im) / n; return z; } /* sin */ mycomplex csin(mycomplex a) { mycomplex z; double ep; ep = exp(a.im); z.re = sin(a.re) * (ep + 1.0 / ep) / 2.0; z.im = cos(a.re) * (ep - 1.0 / ep) / 2.0; return z; } /* cos */ mycomplex ccos(mycomplex a) { mycomplex z; double ep; ep = exp(a.im); z.re = cos(a.re) * (ep + 1.0 / ep) / 2.0; z.im = sin(a.re) * (1.0 / ep - ep) / 2.0; return z; } /* tan */ mycomplex ctan(mycomplex a) { return cdiv(csin(a), ccos(a)); } /* exp */ mycomplex cexp(mycomplex a) { mycomplex z; double ep; ep = exp(a.re); z.re = ep * cos(a.im); z.im = ep * sin(a.im); return z; } /* log 自然対数 (natural logarithm) */ mycomplex clog(mycomplex a) { mycomplex z; z.re = log(norm(a)) / 2.0; z.im = atan2(a.im, a.re); return z; } /* log10 常用対数 (logarithm to base 10) */ mycomplex clog10(mycomplex a) { mycomplex z; z.re = M_LOG10E * log(norm(a)) / 2.0; z.im = M_LOG10E * atan2(a.im, a.re); return z; }

  • 複素数の四則計算

    複素数の四則計算を構造体を使って実行させたいのですが、いまいち構造体のことを理解できていません。 以下の何が間違っているのでしょうか? コンパイルはできますがおそらく間違った値が出てしまっているようです。 #include <stdio.h> typedef struct{ float re, im; } COMPLEX; COMPLEX cal ( COMPLEX a, char c, COMPLEX b ) { COMPLEX d; switch (c) { case '+' : d.re = a.re + b.re; d.im = a.im + b.im; break; case '-' : d.re = a.re - b.re; d.im = a.im - b.im; break; case '*' : d.re = (a.re * b.re) - (a.im * b.im); d.im = (a.im * b.re) + (a.re * b.im); break; case '/' : d.re = (a.re * b.re + a.im * b.im) / ( pow(b.re,2) + pow(b.im,2) ); d.im = (a.im * b.re - a.re * b.im) / ( pow(b.re,2) + pow(b.im,2) ); break; default :puts("不適切な演算です。"); break; } return d; } int main(void) { COMPLEX a; COMPLEX b; printf("aの実数部を入力:"); scanf("%f",&a.re); printf("aの虚数部を入力:"); scanf("%f",&a.im); printf("bの実数部を入力:"); scanf("%f",&b.re); printf("bの虚数部を入力:"); scanf("%f",&b.im); printf("%f + (%f)*i\n",cal(a,'+',b)); printf("%f + (%f)*i\n",cal(a,'-',b)); printf("%f + (%f)*i\n",cal(a,'*',b)); printf("%f + (%f)*i\n",cal(a,'/',b)); } 以上です。 ちなみに、例えばcal(a,'+',b)とすると和が返るようにしなさいという指示がありました。 どなたか教えて頂けるとありがたいです…。