皆様、先日、色々教えていただきまして、どうも有り難うございました。特にfunoe様からのお答えがとても助かりました。ただし、どうも一つの条件だけが満足されると、計算が終了に行ってしまいました。
再度問題を整理したうえで、質問させて頂けませんでしょうか。
(例えば、電気回路の例)
do j=1, n
Ra(j),Qi(j) !予めある回路に初期の抵抗値と得たい電流値を与える
end do
Tr=1.0
/
/
/
10 continue
/
do j=1,n
Vi(j)=V/Ra(j) !Vを一定値とする
/
do 100 j=1, n
if (abs(Vi(j)-Qi(j)) > 0.1) then
Ra(j)= Ra(j)+ Tr
goto 100 !nまで繰り返し
else
goto 500 !終了する
end if
100 continue
1000 continue
goto 10 !戻り、再計算
500 continue
stop
end
*****************************************
例えば(n=10),予め与えた10本の回路のQi値がすべて同じな場合には、上記のプログラムでは、うまく行っていますが、10本回路のQi値が違い場合には、そのうち1本回路の値が満足されると、終了していしまいました。
また、elseの前に、
「elseif (Vi(j)-Qi(j) <= 0.1) then
Ra(j)= Ra(j) 」
を追加すると、ループから抜き出せなくなりました。
また、初期条件としては、始めに小さいRaを与えて、最初計算したViがQiより大きくして、それから、Raを増やして、ViをQiに近づけるように考えていますが、なかなかうまく行っていないのです。また、回路ですので、一箇所のRaを変更すると、当然他の値にも影響を与えます、ここには難しくと思っております。
皆さまに、教えていただければ、幸いなことと思います。よろしくお願い致します!<!!^!!)。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
カテゴリー違い。
形式的に、プログラムに関する質問であるか
どうかは、問題ではありませんが、
内容的に、ルーブの組み方を
繰り返し、数学カテで質問し続けているのは、
マナー上、問題だと思います。
No.2
- 回答日時:
回路とか電気とか抵抗とかのことは全く解りませんが、ご提示のロジックで間違っているとは思えませんよね。
判定のための変数の中身が想定外に書き換わっているなど不可思議のことが起こっているのかも・・・・。
問題解決のためには、プログラムトレースのWRITE文をセットして実行すれば「何が起こっているか」がわかると思います。
do 100 j=1, n
write(6,*) '#1',j,Vi(j),Qi(j) ←ここと
if (abs(Vi(j)-Qi(j)) > 0.1) then
write(6,*) '#2',j,Vi(j),Qi(j) ←ここと
Ra(j)= Ra(j)+ Tr
goto 100 !nまで繰り返し
else
write(6,*) '#3',j,Vi(j),Qi(j) ←ここと
goto 500 !終了する
end if
100 continue
write(6,*) '#4',j,Vi(j),Qi(j) ←ここと
1000 continue
goto 10 !戻り、再計算
500 continue
write(6,*) '#5',j,Vi(j),Qi(j) ←ここに追記する。
stop
end
有難う、有難う!!
正確な計算方法までに行っていないと思う。
色々教えていただき、大変助かりました。また、教えてくださいね!<~~**~~>
No.3
- 回答日時:
不必要のgotoがあり、混乱の元となっていると思いますが。
(FORTRAN90かそれ以降ですよね?)
>do j=1,n
>Vi(j)=V/Ra(j) !Vを一定値とする
このdo文に受け皿がありあません。(最新の文法でコレが大丈夫なら撤回。)
Vi(j)=V/Ra(j)の次行に、end doが入るはず。
>do 100 j=1, n
> if (abs(Vi(j)-Qi(j)) > 0.1) then
> Ra(j)= Ra(j)+ Tr
> goto 100 !nまで繰り返し
> else
> goto 500 !終了する
> end if
>100 continue
> goto 10 !戻り、再計算
質問文趣旨を、(abs(Vi(j)-Qi(j)) <= 0.1) がjの全てについて成立したときループ脱出
の意味に取ります。
この場合、ループ脱出時には、必ずjはnまで回ります。
よって、
Icount=0
do j=1, n
if (abs(Vi(j)-Qi(j)) > 0.1) then
Ra(j)= Ra(j)+ Tr
else
Icount=Icount+1 !高々1個成立したからといってループを脱出してはダメ。
end if
end do
if (Icount.NE.n) goto 10 !戻り、再計算
以下、ループ成立時の計算
なお、ループの順序を入れ替え、
do j=1,n
Vi(j)=V/Ra(j)
do while (abs(Vi(j)-Qi(j)) > 0.1)
Ra(j)= Ra(j)+ Tr
Vi(j)=V/Ra(j)
end do
end do
以下、ループ成立時の計算
(10continueのループ全てを書き直し)
としても等価です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 工学 制御工学の問題について 1 2022/11/01 23:45
- 工学 制御工学の問題について 2 2022/10/30 20:20
- 工学 制御工学の問題について 1 2022/11/01 09:12
- 工学 電気回路の問題の質問 6 2022/05/22 07:20
- Java Java モンスターブリーダー 1 2023/02/05 09:44
- Visual Basic(VBA) vba GetAsyncKeyState関数について 1 2023/08/24 12:08
- 数学 『無限回の計算』 4 2023/06/07 17:49
- 数学 都市経済学の問題です。わかる方教えてください。 地主が得る地代を増やすために、都市の端までの距離 x 2 2023/07/18 17:41
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- 経済学 異質財のクールノー競争について教えてください。 3 2022/11/24 10:35
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
15%増しの計算方法
-
3分2の計算教えて下さい
-
ラジアン値を°′″(度・分・秒)...
-
指数計算 2^n-1
-
パーセントの計算
-
前年比の%の計算式を教えてく...
-
(かっこ)^2のかっこ内の符号を...
-
何通りかの計算で 7C4 の答えが...
-
数A 場合の数について
-
割引の計算を教えてください。
-
数学が苦手で今日から250日後っ...
-
2の365乗
-
自分が買い物した商品が何パー...
-
3割アップとは、どうのように...
-
πがついた整数と普通の整数って...
-
加法と減法の混じった計算 の...
-
パーセンテージの出し方
-
教えて下さい
-
割引や%引きの計算のやり方を教...
-
毎日10%ずつお金が増える時...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
15%増しの計算方法
-
前年比の%の計算式を教えてく...
-
パーセントの計算
-
3分2の計算教えて下さい
-
ラジアン値を°′″(度・分・秒)...
-
エクセルで関数計算後の値を数...
-
3割アップとは、どうのように...
-
何通りかの計算で 7C4 の答えが...
-
初歩的な計算式の問題です。
-
6畳間は何立方メートル?
-
数学がとにかくできません。知...
-
指数計算 2^n-1
-
計算式の答えまでの過程を教え...
-
一定倍したある数を元に戻すには?
-
250gを8割と2割に分けると
-
1÷無限=0ということは数(大き...
-
一日ずつ2倍の金額をもらい続...
-
算数で質問です よろしくお願い...
-
2の365乗
-
教えて下さい
おすすめ情報