2019.11.20平面トラスの有限要素法のプログラムをPythonで組んでみました。以前に自分がつくったコードを引っ張り出してきて、Pythonに移植しました。このくらいのボリュームのコードにじっくり取り組むと面白いですね。トラスのプログラムって実際に使うことはあまりないですが、最初にFEMのコードを組むときはやはり平面トラスからですね。平面トラスが組めれば、有限要素法の計算の流れがわかるので、立体フレームなどへの改良は多少式が複雑になるだけです。FEMなど数値解析シリーズこの記事は「FEMなど数値解析シリーズ」の記事です。一連の記事は、以下のリンク集を参照してください。Python♪FEMなど数値解析シリーズ1.サンプルコードについて以下、サンプルコードの書式について概要を説明したいと思います。可読性コードの可読性を高めるために、def関数へのデータの流れをできるだけ分かりやすくする必要があります。長めのコードは組んだ直後には読めても、1ヶ月ぐらいすると「なんだっけ?」となります。トラスのコードをベースにフレームのコードを組みたいので、ここでの手抜きはあとにひびきます。有限要素法の古い本はFORTRANで書かれたものが多いので、図書館でFORTRANのコードと格闘することがあります。FORTRANは文法がシンプルなので気長に読めばなんとかなりますが、まるで古文書を解読しているような気分になれます。Pythonとの文法的な違いはFORTRANは引数で渡さなければ基本的に関数の外の変数は関数内で参照できません。引数は参照渡しであり、関数内での引数の内容変更は関数の外にも影響を与えます。GLOBAL」などを使う方法もあるのですが、FORTRANでは基本的に関数への入出力は引数で行います。プログラム言語によってデータの流れが微妙に違うので、移植する場合にはどのようにすれば可読性が高くなるのか試行錯誤することになります。Pythonでは、引数なしで外側の変数を内側から参照できる上に、global変数を多用すれば関数の引数をほとんどなしにすることも可能です。データの流れはわかりにくくなると思います。そこで、私は以下のような方針でコードを記述することにしました。datum()、計算の準備データを扱うbc_index()では、あまりにも関数から読み出すデータが多いため、関数内のデータはすべてglobal変数として関数の外に渡す。関数に渡すデータは、文法上不要であっても引数の部分に記述する。are)では、全ての引数は文法上不要ですが、可読性を高めるためだけに記述する。関数の計算結果はreturanで返す。Pythonでは2つ以上の変数でもreturanで返すことができるので、かなり柔軟に対応できます。global変数は不用意には使わない。上記の方針から外れたものは全体剛性マトリクスのgk、荷重ベクトルf_loadです。gkは大きな配列となるため、関数を呼び出す度にローカル変数としてデータが新規に定義されると計算速度に影響するためglobal変数としました。その他の書式についての備考あとで読み返すときに時間がかかるのが嫌いなのでコメント文は多めです。本来は解説資料を別に作って、プログラムはシンプルにするのがよいのだと思います。実用的な使用方法として、ファイルで入出力を行うことになると思いますが、トラスプログラムはFEMの勉強が主な目的だと思いますので、小回りがきくように関数にデータを直接入力するようにしています。出力が美しくありませんが、少数(float)の書式で桁数の指定は行っていません。これは、コードを試行錯誤する上で小数点以下の細かい誤差がわかるようにしたかったからです。解析に時間がかかるのは連立一次方程式の部分です。このサンプルコードではnumpy.linalg.solve()を使っています。numpyは計算速度に定評のあるライブラリであり、たった1行で解が求まるのは本当に楽です。規模の大きい構造物など解析時間が気になる場合には、反復法や、疎行列であることを利用した計算方法を考えてみるとよいと思います。datum_exp01()において、ヤング係数eygは計算内容の検証時に数値が単純になるように1.0を入力しています。2.さっそく、サンプルコードさっそく、サンプルコードの紹介です。コードの解説は、別の記事で追加していきたいと思います。ndim(=2):ディメンジョン。#fixの部分を除き、前につめる。#本来は以下の1行は不要。(全体座標系における部材の傾きをθとする。#行列計算をするために削除。以下、私が実際に購入したPythonの教材をまとめてみました。Pythonを学習する上で、少しでもお役に立つことができればうれしいです。June関連記事PythonPython♪基本:キーボードのキーの名前ゆうちゃんとプログラムの勉強をしているのですが、「あっ、そこ、割るじゃなくて、かける」「えっ、かけるってどれ」「あ~、アスタリスク・・・じゃなくて雪みたいなマークの・・・え~と、これ(直接キーボードを押す)」「リターンキー押して」「リター...PythonPython♪書籍を買うぐらいの感覚で購入できたUdemyの動画講座UdemyのPythonの講座を購入してみました。この一年間、Pythonの勉強を書籍だけで頑張ってきました。Udemyのサンプル動画を...PythonPython♪基本:簡単なfor文とrandom関数を使ってグラフを表示しようif文もfor文も配列も関数も知らない状況で、なにからPythonを説明するのがいいのでしょう。Wolrdの出力が面白いのは最初の1度きりです。書式設定はPython2.6からformatメソッドが追加され、%演算子を使った古い文字列書式設定よりも、このformatメソッドを使った方がよいと思います。global宣言とnonlocal宣言は同じ関数の中で同時に行えるのか?などなど、...PythonPython♪用語集:変更可能体(ミュータブル)と変更不能体(イミュータブル)最初、Pythonの変更不能体(イミュータブル)という言葉を聞いて、私はJavaやCなどで用意されている「定数」をイメージしてしまったのですが、変更不能体(イミュータブル)は定数ではありません。Studioが遅いときの対策2020.01.11Kotlin♪環境設定「HAXMがインストールされていません」2020.01.052020.01.08Python♪FEM:部材座標系の要素剛性マトリクス2020.01.04Kotlin♪スマホアプリの言語は、Kotlin、Java、C#、Dart?2020.01.012020.01.13スポンサーリンクスポンサーリンク。