• 締切済み

VBAでの収束計算

 はじめまして。  この度、業務の関係でExcel上で伝達マトリックス法に基づいた回転軸の危険速度を計算出来るようにしなくてはならず、VBA初心者ではありますが日々プログラムと格闘しております。  プログラムはあらかた出来上がり、数値の読み取り、要素分割、行列計算までは恐らく問題なく出来上がっていると思っております。行列計算後、理論上では境界条件に従ってωの高次方程式が振動数方程式として得られるのですが、この高次方程式の解法が分かりません。と、いうよりは私の認識としてExcelでは「文字」を含む計算が出来ないので結果的に『方程式』として得られないと思っているのですが・・・出来るのでしょうか?(質問が2つになっていますね、申し訳ございません)このような場合の、効率的な計算方法をご存知、または参考になりそうなことなどありましたら、ご協力頂ければ幸いです。 何卒、宜しくお願い致します。

みんなの回答

  • extrabold
  • ベストアンサー率30% (7/23)
回答No.2

Excelで方程式の解を得る方法を寡聞にして知りません。 多分Excelの機能としては用意されていない、と思います。 なので、 1.自力で解析解を求める手順をプログラムに起こす 2.解析解が求めるのが難しい場合には、反復法を使って近似的に解く手順をプログラムに起こす です。他の方の回答は、2のことを指しておられると思います。 が、いきなり何の前提もなしにプログラムを組まれていることはないと思います。参考にされている書籍では、どのようにして計算されている(計算する)と書かれていますでしょうか?また、今までは手計算であったならば、どのように計算されていましたでしょうか? ラプラス変換を用いて、ならば、その手順をプログラムに起こすことを試みられてはいかがでしょうか(1の方法)。 解析的に解く手順が分かれば、1の方が2に比べ圧倒的に計算量が有利です。

hideeeeeen
質問者

お礼

 回答ありがとうございます。  ラプラス変換・・・プログラムに触れるようになってから度々耳にしてはいた言葉ではありますが、学習・確認を怠っていました。もう一度スタート地点に戻り、計算のアルゴリズムから立て直すことも視野に入れプログラム作成に当たりたいと思います。  ありがとうございました。

  • FEX2053
  • ベストアンサー率37% (7991/21371)
回答No.1

Excelでは、方程式は解くことが出来ません。あくまでf(x)=yとして x,yの値を入れ、辺辺の値を比較してループさせることしか出来ません。 ですので、VBAを使った一般的な解法は、辺辺の差が一定範囲内に 収まるまで、DO~WHILEを使ってループさせるという、一種の力技に なります(一部の金利計算では始めからそういうワークシート関数が 用意されていますが、多分質問者の方程式にはそぐわないでしょう) コレをいかに効率的にVBAコードに落とせるかが、プログラマの腕の 見せ所なんですけど・・・。

hideeeeeen
質問者

お礼

素早い回答、誠にありがとうございます。 やはりそうなりますよね・・・。 現在ωの値を0.01刻みで刻ませて方程式の値が0.001に近づくまで計算させているのですが、方程式の次数が軽く200次を超えるようなものなので収束しない。またはとんでもないところが解として得られるといった状況です。時折それらしい数値が得られる場合があるのですが、それはやはりたまたまですよね・・・。次数が高いだけにより細かい刻みでの判定が求められるのですが、そうなると要領の問題が生じますし・・・所詮はExcelですからそれだけ計算精度も怪しくなってきますしね。 ありがとうございました。より有効な手段を得るまではこの線で頑張ってみようと思います。

関連するQ&A