1. HOME > 計算プログラムから構造力学を学ぶ > 最大値を求めるアルゴリズム

最大値を求めるアルゴリズム

ニューマークのβ法から時刻歴波形を求めることができました。ここで、最も関心があるのは応答の最大値です。一方、建物の揺れは固有周期によって変化します。 例えば、T=0.01〜3secまで変化させ、それぞれの最大値を求め縦軸を最大値、横軸を固有周期としたグラフを「応答スペクトル」と呼んでいます。そこで、最大値を求める アルゴリズムについて勉強しましょう。


アルゴリズムの確認

最大値を求めたい場合、1つの方法としては初期値を決めておいて その初期値と次の値を比較します。よって、

・初期値>次の値→MAX=初期値

・初期値<次の値→MAX="次の値

・初期値=次の値→MAX=初期値

といった条件分岐が考えられると思います。あとは、データの数だけこの分岐を繰り返すことで そのデータの中での最大値が求められる仕組みです。




早速、Fortranで書いてみる。

さて、ダウンロードしたエディタ(僕はTerapad)を開いてプログラムを書いてみます。 まだコンパイラしていません。とりあえず、「Terapad」を利用している方は

「名前をつけて保存」→保存形式を「全てのファイル」として→「○○.f90」と保存してください。

そうすると、F90ファイルが生成されます。書いたプログラムはこんな感じ。


最大値のアルゴリズムを求める「一例」です。他にも方法はあるので、自分で色々と考えてみましょう。


!最大値を求めるプログラム

program max

implicit none

real a(2000)

real mx

integer i

open(1, file='max.txt',status='old')

!データの読み込み

do i = 1,481

read(1,*) a(i)

end do

!最大値を探索

mx=a(1)

do i =1,481

if(mx < a(i+1))then

mx=a(i+1)

else if(mx > a(i+1))then

mx=mx

endif

end do

!結果の書き出し

Write(*,*) ' max =',mx

close(unit=1)

end program max




max.f90の説明

「mx=a(1)」で初期値を決めています。まずはこの初期値が最大値です。次に「if(mx > a(i+1)thenで、初期値と次の値を比較しています。先ほどの条件を満たしていれば、最大値は次の値「mx=a(i+1)」となります。 しかし、「else if(mx > a(i+1))then」であるならば、最大値は前の「mx=mx」という値になります。ちなみに、このプログラムでは、「mx=a(i+1)」のときの条件を設けていません。本当はあった方がいいのですが、応答解析でめったに ないので、省略しました。「else文」を使って上手く表現できると思うので、気になる人は追加してください。


結果の確認

1行目に適当な数字を入力して「max.txt」を作成してください。その中での最大値を結果として吐き出したら、プログラムは完成です。 次は→「二重ループの例」を勉強しましょう。


▼この記事を今すぐSNSでシェアする▼


▼こちらも人気の記事です▼

▼人気の記事ベスト3▼

▼いつでも構造力学の問題が解ける!▼

構造ウェブ問題集

▼同じカテゴリの記事一覧▼

▼カテゴリ一覧▼

▼他の勉強がしたい方はこちら▼

スポンサーリンク

検索

カスタム検索

プロフィール

おすすめ特集

note始めました 構造ウェブ問題集

人気の記事ベスト3

建築の本、紹介します。▼

すぐにわかる構造力学の本

同じカテゴリの記事一覧

  1. HOME > 構造力学を勉強する前に > 構造家の出身大学