FC2ブログ

Solve と、Findroot

2013-08-18 :  PCクリニック
本文の前に、
-・・・ -・-
現時点での、blogramのランクインカテゴリは、
2、4、0、0、1、 2、2、1、1、0(38)で、換算ポイント 60pt 。
未だ「C言語」は2位から這い上がれない。
「化学業界」「グルコサミン」は変動が激しい!
・-・ - -・

さて、本文。

「方程式を解く」と云う用語について、・・・・・

先ずは、数年前から常用している言語(?)「Mathematica
のヘルプで確認。
「Solve」と「FindRoot」と云う2つの用語がある。


「Solve」では、
  Solve[ eqns, vars ]
  変数 vars に関する方程式や、連立方程式の解を求める。
  ・・・・・
とあり、
  (例)
  2次方程式を解く:
  Solve[ x^2 + a x + 1 == 0, x ]
  結果は、
  { { x -> 1/2 ( -a - Sqrt[-4 + a^2] ) }, { x -> 1/2 (-a + Sqrt[-4 + a^2] ) } }


「FindRoot」では、
  FindRoot[ f, { x, Subscript[x, 0] } ]
  x=Subscript[x, 0] から始めて f の数値根を求める。
  ・・・・・
とあり、
  (例)
  x=0 付近で E^x + sin(x) の根を求める:
  FindRoot[ Sin[x] + Exp[x], { x, 0 } ]
  結果は、
  { x -> -0.588533 }


つまり、
「Solve」=「方程式の解を求める」
は、変数(例えば、a )をそのままに、解( x )を求める。

一方、
「FindRoot」=「数値根を求める」
は、言葉の通り、根(root)を数値で算出する。



それで、最近填っている「R言語 ?
については、・・・・・


<紙>にとってのバイブル「R-Tips
の中の、
20. 行列計算 - R-Source
には、

  ・・・・・
   連立方程式の解
   A・x = b なる形の x についての連立方程式の解は
   関数 solve() を使って解く事が出来る。
  ・・・・・

と云うことで、

  a <- matrix(c(0,1,2,3,4,5,6,7,9), 3, 3 )   #      3y + 6z = 1
  b <- matrix(c(1,0,-2 ) )           #    x + 4y + 7z = 0
  solve( a, b )                 #   2x + 5y + 9z = -2

とすると、

      [,1]
[1, ] -2.333333
[2, ] 2.333333
[3, ] -1.000000

と、
  x, y, z
が求まる。

とある。
つまり、「方程式を解く」= 数値で求める = (未決定の)変数を含んではダメ



それから、
こんなサイトがあった。(60日以上更新のないWIKI)
doipedia - 数値計算
  Rでは数値計算のための関数が多数用意されており数行ほどの命令で計算を実行できる
  ・・・・・

このページの1番目に、
  ・・・・・
  R ではある範囲の中で f(x)=0 を満たす解を求める関数 uniroot() が用意されている。
  ・・・・

「uniroot」のヘルプ:
rdoc:stats:uniroot [R Wiki]」から、
試しに、
  f <- function(x){ 10*cos(x) - exp(x) }
  v <- uniroot( f, c(0,2) )
とやってみると、
  v$root
が、
  1.223837
となった。

  備考:関数 f の属性は、スカラ
     つまり、 uniroot は、1変数関数の根(root)(数値解)を求める。



更に、[PDFファイル]だが、
Package rootSolve: roots, gradients and steady-states in R
があった。

  ・・・・・
  1.2. n equations in n unknowns
  ・・・・・

これは、多変数の方程式(当然、変数と同数の式が必要)を解く「multiroot」

多変数の方程式を(Rの)関数定義し、
  この例では、名称:model で、
  定義する関数の引数は、ベクトル(方程式の変数からなる)
そうして、

  ss <- multiroot( f = model, start = c(1, 1, 1) )

の様に記述する。

すると、「ss$root」が3変数の 根 から成るベクトル
となる。

  multiroot( model, c(0, 0, 0) )$root

の様な形でも書ける。



結論。

Rでは、
「solve」も「~root」も、数値解( 根(root) )を求めるモノ???




おまけ:
R-Forge: rootSolve: R Development Page
  Below is a list of all packages provided by project rootSolve.
  ・・・・・
このページのタイトルは、「rootSolve」



見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


130726,0812
関連記事
スポンサーサイト



コメントの投稿

管理者にだけ表示を許可する

人気blog Ranking



最新記事
カレンダー
07 | 2021/08 | 09
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

FC2 / i2i / Google




Google Analytics
ブックマーク