• ベストアンサー

配列が定義されていない??

今日1日を費やして、fortranの勉強をしました。 まだまだ勉強始めたばかりで、何かと苦労しています。 理解しようと、本にPCとにらめっこしています。 本日の問題は・・以下です。 問題と思われる箇所載せておきます。 subroutine Uno(ya,Mc,nablaMc, & maxX,maxY,numX,numY,dt,dx,dy, & v,v_P,nablaya) implicit real*8 (a-h,o-z) * real*8 v(0:maxX,0:maxY),v_P(0:maxX,0:maxY) * CDK write(6,1000) dx,dy,dt * ic=0 1 continue ic=ic+1 * do ix=1,numX-1 do iy=1,numY-1 C---- nablayaを定義------------------------------------ ★ nablaya=v(ix,iy+1)-v(ix,iy-1))/*dy C ------------------------------------------------------ A=v(ix,iy)*ya+nablaya*v(ix,iy) B=v(ix,iy)*ya C------------------------------------------------------- if (iy.eq.1) then ai=2.0d0*dt*B*(1.0d0/(dx*dx)+1.0d0/(dy*dy) bi=dt*(A/(4.0d0*dy)+B/(2.0d0*dy*dy)) else ai=2.0d0*dt*B+A/(dy*dy) bi=A/(4.0d0*dy)+B/(2.0d0*dy*dy) ・・ といった感じのルーチンを書きました。 そしたら、 『Error: The shapes of the array expressions do not conform. [NABLAYA]』と指摘され、その場所が上記★の行でした。 何がいけないのでしょうか!? 教えて下さい。

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

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.2

> ★ nablaya=v(ix,iy+1)-v(ix,iy-1))/*dy 最後の dy の直前にある /* は、何を意味しているのでしょうか? 割り算をしたいのですか?掛け算をしたいのですか? ところで、ここは C/C++ カテゴリーであることはご存じですか? Fortran についてのご質問をするための適切な場所は他にあります。

BOY12345
質問者

補足

Cとfortranを混ぜて使っているので、どちらでもよいかなと思い・・ frotranの質問するのにいいとこあったら教えて下さい。

その他の回答 (2)

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.3

> Cとfortranを混ぜて使っているので、どちらでもよいかなと思い・・ 混ぜて使っているって、今回の件はC言語のかけらもありませんよね。 > frotranの質問するのにいいとこあったら教えて下さい。 「その他(プログラミング)」のカテゴリーです。 以前(って、たった5日前ですけど)、「fortranエラー」というタイトルで 質問されていたではないですか。お忘れになりましたか?

  • kameDK
  • ベストアンサー率22% (17/75)
回答No.1

fortranに関しては初心者ですが気付いたことを少し。。 ★nablaya=v(ix,iy+1)-v(ix,iy-1))/*dy の部分ですが2つ目のv()の後の括弧が一つ多いと思います。 なおるか分かりませんが参考程度に・・・^^;

BOY12345
質問者

補足

あっ、本当ですね!! ありがとうございます。 でも、問題は解決できませんでした。 引き続き、お待ちしております。

関連するQ&A

  • fortran 渡す値について

    fortranの質問です。 integer ix,iy,maxX,maxY で宣言しており、 do istep=1,100 call B_DIF(☆) do ix=0,maxX do iy=0,maxY B_M(ix,iy)=B_P(ix,iy) end do end do end do のルーチンで悩んでいます。 B_DIFは B_P(ix,iy)=K(係数のことです)*B_M(ix,iy)+B_M(ix+1,iy)-B_M(ix-1,iy) といった感じのサブルーチンです。functionで表していないのは、ややこしい関数があるので、サブルーチンでまとめてメインに返すという手法をとっています。ご了承下さい。 ここで、B_P(☆)の☆には何を入れると適切に動くと思いますか? ☆に データix,iyを入れるだけで意とするB_P(ix,iy)がでてくるのか、 それとも、ix,iy,B_Mのデータを受け渡すべきか・・ 一番の問題は、 B_P(ix,iy)=K(係数のことです)*B_M(ix,iy)+B_M(ix+1,iy)-B_M(ix-1,iy) にix,iyを送ったとき、B_M(ix+1,iy)などが意図する値を吐いてくれるのかということです。 ix=1,iy=2でB_DIFのルーチンにおいて、 B_P(1,2)=K(係数のことです)*B_M(1,2)+B_M(2,2)-B_M(0,2) とパソコンが読み取ってくれるのか疑問です。 ちなみに、B_M(1,2)、B_M(2,2)、B_M(0,2)は既知の値です。 頭がこんがらがって、どうすべきかわかりません。 2次元配列の添字の継承・・ よろしくお願いします。

  • 解析学の質問です

    次のように問題を解いてみました。 間違いがあれば、正しい解き方を教えてください。 【問題】 1. x=a*cost, y=b*sint のとき、dy/dx , d^2*y/dx^2 を求めよ 【解答】 dx/dt = -a*sint, dy/dt = b*cost となるので、 dy/dx = b*cost/(-a*sint) = -b/a * cost/sint = -b/a * 1/tant = -b/(a*tant) d^2y/dx^2 は、(d/dx)*(dy/dx)なので、(d/dt)*(dy/dx)*(dt/dx)とおけるから、 (与式) = d/dx{(-b/a)*(1/tant)}*(1/-a*sint)である。 よって、-(b/a)*(1/sec^2*t)*(1/-a*sint)= b/(a^2*sint*sec^2t)=b/{a^2*sint*(1/cos^2t)} = b*cos^2t/a^2*sint = (b/a^2)*(cost/sint)*(cost) = (b/a^2)*tant*cost 以上、よろしくお願いします。

  • 三角関数の微分について

    よろしくお願いします。 問題【asin^4t, y=b*(1-cost)のとき、dy/dx, d^2y/dx^2 を求めよ。】 まず、a と b を、t で微分しました。 そこから、dy/dx = -(b*cos^2t)/(a*sin^2t) を導きました。 これが合っているかを、教えてください。 次に、d^2y/dx^2 を、(d/dt)*(dy/dx)*(dt/dx)と考えて解こうとしました。 ところが、{(a*sin^4t + b*cos^4t)/(a^2*sin^4t)}*1/4a*sin^3*cost という、奇妙な結果になってしまいました。 これは間違いだと思います。 ですので、解答と解説をお願いしたいと思います。 以上、よろしくお願いします。

  • 微分方程式の解法

    (1)(d^2x)/(dt^2)=b  条件:t=0、x=0、dx/dt=0 (2)(d^2x)/(dt^2)+a(dx)/(dt)=b  条件:(1)と同じ (3)(dy)/(dt)+ay^2=b  ただし、a>0、b>0  条件:t=0、y=0 の解法を教えて下さい。

  • 微分の計算順番について

    dx/dt = 1-cost dy/dt = sint dy/dx = (dy/dt)/(dx/dt) = sint/(1-cost) の時に (d^2)y/dx^2 を求めたいのですが、 (d^2)y/dx^2 = (d/dx)(dy/dx) = (dt/dx)(d/dt)(dy/dx) = {1/(1-cost)}(d/dt){sint/(1-cost)} と計算していった時と、 (d^2)y/dx^2 = (d/dx)(dy/dx) = (d/dt)(dt/dx)(dy/dx) = (d/dt){1/(1-cost)}{sint/(1-cost)} = (d/dt){sint/(1-cost)^2} と計算していった場合で答えが違いました。 tで微分する順番が関係あるのでしょうか。 よろしくお願い致します。

  • http://okwave.jp/qa/q5965948.html で

    http://okwave.jp/qa/q5965948.html でした質問の回答に関する質問です (私があまりに多くの質問をしてしまったので閉じることにしました)。 次の立体V = {(x,y,z) | x^2 + y^2 + z^2 <= a^2, x^2 + y^2 <= b^2} (a>b>0)の体積|V|を求めよ、 という問題で答えは |V| = 2*∫∫_[x^2 + y^2 <= b^2] √(a^2 - x^2 - y^2) dx dy = (4π/3)(a^3 - √{(a^2 - b^2)^3}). となっています。 …これをANo.2さんが x=rcosθ, y=rsinθ ( 0≦r≦b ) の置換で、 V=8∫[0,π/2]dθ∫[0,b]√(a^2-r^2)rdr さらに、a^2-r^2=t とおけば、 V=8∫[0,π/2]dθ∫[a^2,a^2-b^2]t^(1/2)(-1/2)dt ... [1] =4∫[0,π/2]dθ∫[a^2-b^2,a^2]t^(1/2)dt     ... [2] これを計算して、V= (4π/3)(a^3 - √{(a^2 - b^2)^3}) …と解いてくださったのですが、 積分の定義域 ∫[a^2,a^2-b^2] をどう求めたのかが分かりません。 a^2 と a^2-b^2 を求めた式を教えてください。 それと…あれ?たった今、気付いたのですが、 [1]では∫[a^2,a^2-b^2]になっているのですが、 [2]では∫[a^2-b^2,a^2]になっていますよね? どちらが正しいのでしょうか?

  • 複素関数論

     以下の証明ができません。 解答方針だけでもいいので、どなたか教えてください。  u1=u(x1(t),y1(t)) v1=v(x1(t),y1(t)) u2=u(x2(t),y2(t)) v2=v(x2(t),y2(t)) とし、  cosθ={(dx1/dt*dx2/d2)+(dy1/dt*dy2/dt)}/√[{(dx1/dt)^2+(dy1/dt)^2}+{(dx2/dt)^2+(dy2/dt)^2}] cosθ'={(du1/dt*du2/d2)+(dv1/dt*dv2/dt)}/√[{(du1/dt)^2+(dv1/dt)^2}+{(du2/dt)^2+(dv2/dt)^2}] とすると、u(x,y)とv(x,y)がコーシーリーマンの関係式を満たす時   |cosθ|=|cosθ'| となることを示せ。

  • パラメーター表示による微分の問題

    問題:曲線C:x=cos(t)+tsin(t)、y=sin(t)-tcos(t)に対して、 (1) dy/dxをtの式で表せ。 (2) d^2y/dx^2をtの式で表せ。 (1)はわかるのですが(2)でわからないところがあります。 多分正答はdx/dt、dy/dtを求めたあとdy/dxを求め d^2y/dx^2=d/dt(dy/dx)(dt/dx)という形で解くのだとおもいますが、 d^2y/dt^2を求めたあと d^2y/dx^2=(d^2y/dt^2)(dt/dx)^2と変形して解くと違う解がでてきます。 どうして違う解がでてくろのでしょうか? (dx)^2≠dx^2だからですか? でも d^2y/dx^2=d/dx(dy/dx)という変形ができるから、(dx)^2=dx^2だと思います。 だれかアドバイスください。 後、友達が ∫d(dy/dx)^2=∫(dy/dx)d(dy/dx)=(1/2)(dy/dx)^2+C という積分をしていたのですが、こういう積分もありなんですか? (Cは積分定数)

  • 微分について

    dx/dt=1-cost,dy/dt=sintのとき、d^2y/dx^2を求めよ。という問題がありました。 d^2y/dx^2=dt/dx・d/dt・dy/dxと合成微分します。 ここで回答にはd/dt・dy/dxを一塊として微分していました。 自分はdt/dx・dy/dxをtの関数で表し、tで微分しました。すると出てくる値が違います。 なぜこのやり方ではいけないのでしょうか?

  • 数||| 微分

    x・dx/dt+y・dy/dt=0の両辺を さらにtで微分したときの式がよく分かりません。 x・dx/dt+y・dy/dt=0 (d^2x/dt^2)+(d^2y/dt^2)=0 d/dt(dx/dt)+d/dt(dy/dt)=0 d/dt(dx/dt+dy/dt)=0 自分でやってみましたが 全く自信がありません...。 分かる方いましたらよろしくお願いします。

専門家に質問してみよう