解析力学の変形についての質問

このQ&Aのポイント
  • 解析力学の教科書の変形について質問があります。特に和のあたりが分からず、x_kとx_iで偏微分するところが理解できません。
  • 質問文章は解析力学の教科書の変形に関するもので、特に和の部分とx_kとx_iでの偏微分が理解できません。
  • 解析力学の教科書の変形についての質問です。特に和のあたりとx_kとx_iでの偏微分する部分が分かりません。
回答を見る
  • ベストアンサー

次の変形の意味が分かりません

解析力学の教科書の変形なのですが,和のあたりが分からないです。 特にx_kとx_iで偏微分するあたりです。解説していただけると助かります。 [Tex形式] \frac{d}{{dt}}\left( {\frac{{\partial {q_j}}}{{\partial {x_i}}}} \right) = \frac{{{\partial ^2}{q_j}}}{{\partial t\partial {x_i}}} + \sum\limits_{k = 1}^{3N} {\frac{{{\partial ^2}{q_j}}}{{\partial {x_k}\partial {x_i}}}{{\dot x}_k} = \frac{\partial }{{\partial {x_i}}}\left( {\frac{{\partial {q_j}}}{{\partial t}} + \sum\limits_{k = 1}^{3N} {\frac{{\partial {q_j}}}{{\partial {x_k}}}{{\dot x}_k}} } \right)} = \frac{{\partial {{\dot q}_j}}}{{\partial {x_i}}} (画像も添付します。)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

何が問題なのかわからないのですが、qが時間と座標の関数 q = q (x1, x2, x3, ・・・・, t) なので、そのxiによる微分(ここではq'と書く)も時間と座標の関数 ∂q/∂xi = q' = q' (x1, x2, x3, ・・・・, t) これを時間で常微分するとxも時間の関数xi = xi(t) なので dq'/dt = (∂q'/∂x1)(dx1/dt) + (∂q'/∂x2)(dx2/dt) + (∂q'/∂x3)(dx3/dt) + ・・・・ + ∂q'/∂t = Σj (∂q'/∂xj)(dxj/dt) + ∂q'/∂t q' = ∂q/∂xi を代入して微分を入れ換えれば dq'/dt = d/dt(∂q/∂xi) = Σj (∂^2/∂xi∂xj)(dxj/dt) + ∂/∂t (∂q/∂xi) = Σj ∂/xi[(∂/∂xj)](dxj/dt) + ∂/∂xi (∂q/∂t) dxj/dtをxj'と書くと、今はxjとxj'を独立変数にとっているのでxiの偏微分∂/xiに対してはxi'は定数として扱ってよいので ∂/xi[(∂/∂xj)] xj' = ∂/xi[(∂/∂xj)xj' ] と書き直すことができ dq'/dt = d/dt(∂q/∂xi) = Σj ∂/xi[(∂/∂xj) xj' ] + ∂/∂xi (∂q/∂t) = ∂/xi { Σj [ (∂/∂xj) xj' ] + ∂q/∂t } = ∂/xi (dq/dt) となり微分の入れ換え d/dt(∂q/∂xi) = ∂/xi (dq/dt) が可能。

masa2468
質問者

お礼

理解の助けになりました ありがとうございました

関連するQ&A

  • 再帰式

    $Q_k(n,d)=\displaystyle \sum^{[n/k]}_{i=1}\left[\displaystyle \frac{n!d!}{d^{ik}i!(k!)^i(n-ik)!(d-i)!} \displaystyle \sum^{k-1}_{j=1}Q_j(n-ik,d-i)\displaystyle \frac{(d-i)^{n-ik}}{d^{n-ik}}\right]$ ってどうやって計算式をプログラムすればよいのでしょうか。 全く手がつけられません。 ※Texのコマンドで打ち込んであります。

  • Tex エラーが出て困っています

    \begin{eqnarray*} d(f(P),f(Q))&=&\sqrt {\left(\frac{1}{2}x_1-\frac{1}{2}x_2\right)^2+ \left(\frac{1}{2}y_1-\frac{1}{2}y_2\right)^2}\\ &=&\sqrt {\left(\frac{1}{2}\right)^2\{(x_1-x_2)^2+(y_1-y_2)^2\}\\ &=&\frac{1}{2}\cdot d(P,Q) \end{eqnarray*} と入力するとMissing } insert というエラーが表示されてしまいます。 式は合っていると思うんですが、どこに } をつけ忘れてしまったのか分からず困っています。 よろしくお願いします。

  • 次の計算をお教えください。

    p,q=1-pともに定数の時 \sum_{k=0}^n(k+1)p^{2}(1-p)^2 上の式が下の式にどうすればなるのかわかりません。 =p\left[\tfrac{1-q^{n+1}}{p}-(n+1)q^{n+1} \right] よろしくお願いします。

  • ベクトルポテンシャル下での電流演算子

    下のはtexファイルです。 (11)あたりが怪しいです。 計算が間違っているのでしょうか?? 教えてください。。お願いします。 \section{Quantum mechanical current} anypositionでprobability amplitudeのtemporal differentiationを考える。 \begin{eqnarray} \frac{\partial }{\partial t}|\psi|^2 &=& \frac{\partial }{\partial t}[\psi^* \psi]\\ &=& \frac{\partial \psi^*}{\partial t} \psi + \psi^* \frac{\partial \psi}{\partial t} \\ &=& \frac{i}{\hbar}\biggl[ (H^* \psi^*)\psi-\psi^*(H\psi) \biggr] \end{eqnarray} ただしHamiltonianはHermitian operatorである。 Hamiltonianとして \begin{eqnarray} H &=& \frac{1}{2m}\left(p+\frac{e}{c}\bf{A} \right)^2 \\ &=& \underbrace{\frac{\hbar^2}{2m}\nabla^2}_{H_0} \underbrace{-\frac{i\hbar e}{2mc}(\nabla \cdot \mbox{\boldmath $A$}+\mbox{\boldmath $A$} \cdot \nabla)}_{H_1} \underbrace{ + \frac{e^2}{2mc^2}}_{H_2} \end{eqnarray} を採用する。 以下このHamiltonianを用いてprobability amplitudeのtemporal differentiationを考えていく。 \begin{eqnarray} \frac{i}{\hbar}\biggl[ (H^*_0 \psi^*)\psi-\psi^*(H_0\psi) \biggr] &=& -\frac{\hbar}{2mi}\biggl[ (\nabla^2 \psi^*)\psi-\psi^*(\nabla^2\psi) \biggr] \\ &=& \nabla \cdot \biggl[ \frac{\hbar}{2mi}\left\{ (\nabla\psi^*)\psi-\psi^*(\nabla \psi)\right\} \biggr] \end{eqnarray} なぜなら \begin{eqnarray} \nabla \cdot [(\nabla\psi^*)\psi-\psi^*(\nabla \psi)] &=&(\nabla^2\psi^*)\psi-\psi^*(\nabla^2\psi) \end{eqnarray} 次に \begin{eqnarray} \frac{i}{\hbar}\biggl[ (H^*_1 \psi^*)\psi-\psi^*(H_1\psi) \biggr] &=& \frac{e}{2mc}\left\{\biggl[(\nabla \cdot \mbox{\boldmath $A$}+\mbox{\boldmath $A$} \cdot \nabla) \psi^*\biggr]\psi-\psi^* \biggl[ (\nabla \cdot \mbox{\boldmath $A$}+\mbox{\boldmath $A$} \cdot \nabla)\psi\biggr] \right\} \end{eqnarray} ここで、vector formula \begin{eqnarray} \nabla\cdot(\psi^*\mbox{\boldmath $A$} \psi) &=& (\nabla\psi^*)\cdot \mbox{\boldmath $A$} \psi+\psi^*(\nabla\cdot\mbox{\boldmath $A$} )\psi +\psi^*\mbox{\boldmath $A$} \cdot (\nabla\psi) \end{eqnarray} を用いると、 \begin{eqnarray} \frac{i}{\hbar}\biggl[ (H^*_1 \psi^*)\psi-\psi^*(H_1\psi) \biggr] &=& -\frac{e}{mc}\nabla\cdot(\psi^*\mbox{\boldmath $A$}\psi) \end{eqnarray} を得る。ここでcontinuity equation \begin{eqnarray} e\frac{\partial |\psi|^2}{\partial t}=\nabla\cdot \mbox{\boldmath $j$} \end{eqnarray} を与えれば、current densityが考えられる。

  • クイックソート(C言語)

    こんにちは<_ _> クイックソートについての質問です。 左端を軸にクイックソートでデータを昇順にソートする プログラムを作ったのですがうまく動きません #include<stdio.h> void quick(int *,int,int); #define N 10 int main(void) { static int a[]={41,24,76,11,45,64,21,69,19,36}; int k,b=0; quick(a,0,N-1); for(k=0;k<N;k++) printf(" %d",a[k]); return 0; } void quick(int a[],int left,int right) { int s,t,i,j; t=right; i=left+1; j=a[left]; if(right>left){ while(1){ while(a[++i]>j); while(a[--t]<j && t>0); if(i>=t){ break; } s=a[i]; a[i]=a[t]; a[t]=s; } s=a[i]; a[i]=j; a[left]=s; quick(a,left,t-1); quick(a,t+1,right); } } 値の入れ替え、軸の入れ替えもしましたが結果として 「41 41 76 69 45 64 41 19 0 36」 このような結果で出力されてしまいます・・・ 時間に余裕のある方いましたらご指導をお願いします。 よろしくお願いします。<_ _>

  • 比較回数と交換回数表示について

    クイックソートとバブルソートの比較回数と交換回数を確認するため以下のようなプログラムを作成しました。 #include <stdio.h> #define SIZE 32 short bubble_sort(short s[],int x); short quick_sort(short s[],int y,int z); void show(short s[],int n); short bubble_sort(short s[],int x){ //バブルソート int i,j,count,sum; short tmp; count=0; sum=0; for(i=0; i<SIZE; i++){ for(j=i+1; j<SIZE; j++){ count++; if(s[i] > s[j]){ tmp=s[i]; s[i]=s[j]; s[j]=tmp; sum++; } } } show(s,SIZE); printf("\n比較回数:%d回\n交換回数:%d回\n",count,sum); } short quick_sort(short s[],int left,int right){ //クイックソート int i, j,tmp,count,sum; int point; i = left; j = right; point = s[(left + right) / 2]; count=0; sum=0; while (right!=1) { count++; while (s[i] < point) i++; count++; while (point < s[j]) j--; if (i >= j) break; tmp=s[i]; s[i]=s[j]; s[j]=tmp; i++; j--; sum++; } show(s,SIZE); printf("\n比較回数:%d回\n交換回数:%d回\n",count,sum); if (left < i - 1) quick_sort(s, left, i - 1); if (j + 1 < right) quick_sort(s, j + 1, right); } void show(short s[], int n) { int i; for (i = 0; i < n ; i++){ printf("%d ", s[i]); } printf("\n"); } int main(void){ short s[SIZE] ={25,29,1,32,14,22,26,3,15,27,5,7,24,12,31,23,6,20,10,8,18,16,11,30,13,2,4,21,17,19,9,28}; printf("ソート前:\n"); show(s,SIZE); printf("バブルソート後:\n"); bubble_sort(s,SIZE); printf("\n"); short t[SIZE] ={25,29,1,32,14,22,26,3,15,27,5,7,24,12,31,23,6,20,10,8,18,16,11,30,13,2,4,21,17,19,9,28}; printf("ソート前:\n"); show(t, SIZE); printf("ソート中:\n"); quick_sort(t,0,SIZE-1); printf("クイックソート後:\n"); show(t,SIZE); } これを動かして頂ければ分かるとは思いますが、バブルソートの時のような結果(途中経過なしで最終結果と比較回数と交換回数の表示)を クイックソートでも出したいのですが、うまく出せずに困っています。 どのようにすれば良いのかご指導いただけませんでしょうか?また、実行環境が会社にしかないので、 できれば結果も頂けるとありがたいです。失礼ですみませんがよろしくお願い致します。

  • 昇順と降順

    C言語でクイックソートを行うプログラムを探していたところ、希望していたものが見つかりました。 このプログラムは与えられた数列を昇順に並び替えるものなのですが、これを降順に並び替えるにはどうしたらよいでしょうか? いろいろ試してみたのですが、無限ループになってしまいます。 #include <stdio.h> void QSort(int x[ ], int left, int right); void Swap(int x[ ], int i, int j); void ShowData(int x[ ], int n); void main(void); /* クイックソートを行う */ void QSort(int x[ ], int left, int right) { int i, j; int pivot; i = left; /* ソートする配列の一番小さい要素の添字 */ j = right; /* ソートする配列の一番大きい要素の添字 */ pivot = x[(left + right) / 2]; /* 基準値を配列の中央付近にとる */ while (1) { /* 無限ループ */ while (x[i] < pivot) /* pivot より大きい値が */ i++; /* 出るまで i を増加させる */ while (pivot < x[j]) /* pivot より小さい値が */ j--; /* 出るまで j を減少させる */ if (i >= j) /* i >= j なら */ break; /* 無限ループから抜ける */ Swap(x, i, j); /* x[i] と x[j]を交換 */ i++; /* 次のデータ */ j--; } ShowData(x, 10); /* 途中経過を表示 */ if (left < i - 1) /* 基準値の左に 2 以上要素があれば */ QSort(x, left, i - 1); /* 左の配列を Q ソートする */ if (j + 1 < right) /* 基準値の右に 2 以上要素があれば */ QSort(x, j + 1, right); /* 右の配列を Q ソートする */ } /* 配列の要素を交換する */ void Swap(int x[ ], int i, int j) { int temp; temp = x[i]; x[i] = x[j]; x[j] = temp; } /* n 個のデータを表示する */ void ShowData(int x[ ], int n) { int i; for (i = 0; i < n ; i++) printf("%d ", x[i]); printf("\n"); } void main(void) { /* ソートする配列 */ int x[ ] = {6, 3, 1, 7, 0, 4, 8, 5, 2, 9}; int n = 10; printf("ソート前:\n"); ShowData(x, n); printf("ソート中:\n"); QSort(x, 0, n - 1); printf("ソート後:\n"); ShowData(x, n); }

  • クイックソートのアルゴリズム

    http://www1.cts.ne.jp/~clab/hsample/Sort/Sort9.html こちらにあったソースを改造しました。 #include <stdio.h> void QSort(int x[ ], int left, int right) {   int i, j, temp;   int pivot;   i = left;   j = right;   pivot = x[(left + right) / 2]; // 6,5,4,3 // pivot=4   while (1) {   while (x[i] <= pivot) i++; // サイトのソースは = が無かったから付けた // 2回目のループでは j=2   while (pivot < x[j]) j--; // 2回目のループで x[-1] を参照しませんか? // 初回ループで i=0, j=3   if (i >= j) break;   temp = x[i]; x[i] = x[j]; x[j] = temp; // 交換   i++; j--;   }   ShowData(x, 10); // 途中経過を表示   if (left < i - 1) QSort(x, left, i - 1);   if (j + 1 < right) QSort(x, j + 1, right); } void ShowData(int x[ ], int n) {   int i;   for (i = 0; i < n ; i++) printf("%d ", x[i]);   printf("\n"); } void main(void) {   int x[] = {6, 3, 1, 7, 0, 4, 8, 5, 2, 9};   int n = 10;   printf("ソート前:\n");   ShowData(x, n);   printf("ソート中:\n");   QSort(x, 0, n - 1);   printf("ソート後:\n");   ShowData(x, n); } テストデータが 6,5,4,3 だと、 2回目のループで x[-1] を参照しませんか? 今コンパイラが使えません。 教えてください。 それと、=を付けたんですが、付けないといけませんよね?

  • Latexの数式について

    次の式をLatexでPDFに変換すると、 シグマの表示が脇に表示され、おかしくなってしまうのですが、 改善する方法があればご教授ください。 よろしくお願いします。 \begin{eqnarray} a = \frac{\frac{1}{n-1} \sum^n_{i=1} (X_{i}-\bar{X})(Y_{i}-\bar{Y})}{{\sqrt{\frac{1}{n-1} \sum^n_{i=1} (X_{i}-\bar{X})^2}\sqrt{\frac{1}{n-1} \sum^n_{i=1} (Y_{i}-\bar{Y})^2}}} \end{eqnarray}

  • c言語 ファイル出力について

    このようなプログラムを作成しました。 エクセルでファイルを出力したいのですが… ファイルは作成できたものの、内容が書かれていません。 とても困っています↓ 自分の力不足なのでしょうがどなたかお願いします。 #include <stdio.h> #include <process.h> #define S 256 #define I 100 #define J 100 #define K 3 //グループの数 void sum(int u[][J],int N,int n); void sort(int y[],int N,int u[][J],int n); void group(int num[],int u[][J],int N,int n); void passege(int groupm[][J],int groupn,int u[][J],int n,int N); void main (void) { FILE *fp; int N=0,i=0,j=1,kou=0,n; //N:人数 n:問題数 static int u[I][J]; char buf[S]; //ファイルオープン if ((fp=fopen("data_i2_3.csv","r"))==NULL){ printf("Can't open File\n"); exit(1); } // 問題数のカウント fgets(buf,S,fp); N+=1; while(buf[i]!='\n'){ kou=kou++; i+=1; } for(i=0;i<=kou;i=i+2){ u[N][j]=buf[i]-'0'; j=j++; } n=kou/2+1; // レコードの読み込み while (fgets(buf,256,fp)!=NULL){ N+=1; // 文字型から数値型へ変換 j=1; for(i=0;i<=kou;i=i+2){ u[N][j]=buf[i]-'0'; j=j++; } } sum(u,N,n); fclose(fp); } void sum(int u[][J],int N,int n) { static int y[I]; int i,ii; //学習者iの得点の初期化 for(i=0;i<=I;i++) y[i]=0; //学習者iの得点の計算 for(i=1;i<=N;i++){ for(ii=1;ii<=n;ii++){ y[i]+=u[i][ii]; } } sort(y,N,u,n); } void sort(int y[],int N,int u[][J],int n) { int left,right,i,shift,t,v; static int num[I]; //学習者の番号記憶用変数numの初期化 for(i=0;i<=I;i++) num[i]=0; for(i=1;i<=N;i++) num[i]=i; //シェーカーソート left=0; right=N; while (left<right){ for(i=left;i<right;i++){ if(y[i]>y[i+1]){ t=y[i]; v=num[i]; y[i]=y[i+1]; num[i]=num[i+1]; y[i+1]=t; num[i+1]=v; shift=i; } } right=shift; for(i=right;i>left;i--){ if(y[i]<y[i-1]){ t=y[i]; v=num[i]; y[i]=y[i-1]; num[i]=num[i-1]; y[i-1]=t; num[i-1]=v; shift=i; } } left=shift; } group(num,u,N,n); } void group(int num[],int u[][J],int N,int n) { int groupn,i,j,k=1; //groupn:グループの人数 static int groupm[K][I]; //groupm:グループのメンバー groupn=N/K; for(i=0;i<K;i++){ for(j=0;j<groupn;j++){ groupm[i][j]=num[k]; k+=1; } } passege(groupm,groupn,u,n,N); } void passege(int groupm[][J],int groupn,int u[][J],int n,int N) { FILE *f; int i,j,k=0,l,tt; static int t[I]; //各グループの正解率 double p[K][J],pp=0.0; //初期化 for(i=0;i<K;i++){ for(j=0;j<J;j++){ p[i][j]=0; t[i]=0; } } for(i=0;i<K;i++){ for(j=0;j<groupn;j++){ t[k]=groupm[i][j]; k+=1; } } k=0; for(i=0;i<K;i++){ for(j=1;j<=n;j++){ for(l=0;l<groupn;l++){ tt=t[k]; pp=pp+u[tt][j]; k+=1; } p[i][j]=pp/groupn; pp=0.0; if(i==0) k=0; else k=groupn*i; } k=groupn*(i+1); } //ファイル出力 f=fopen("test1.csv","w"); //確認 putchar('\n'); for(i=0;i<K;i++){ for(j=1;j<=n;j++){ printf("%d群の項目%dの正解率は%fです\n",i,j,p[i][j]); } } //ファイルを閉じる fclose(f); }