プロが教える店舗&オフィスのセキュリティ対策術

Cole-Cole plotを得られたデータから作製し、円弧でfittingしたいです。しかし、ネット検索しても円の描き方に関する記事はなく困っています。user指定にし、円の式(x-a)^2+(y-b)^2 = r^2を入れて描こうとしたのですが、エラーが発生し、描けず終いでした。そこで、質問です。そもそもNgraphで円は描けるのでしょうか?描けるとしたら、その描き方を教えて頂きたいです。

質問者からの補足コメント

  • 質問に不備がありました。変数変換で円を描く方法というより、得られれたデータ(plot 点)円弧上に乗るかを知りたいのです。おそらく、変数変換というよりは'fit'を使うのだと自分ではないかと自分では考えています。'fit'を使って円が描けるのであれば、その方法を教えてください。

      補足日時:2016/07/13 10:55

A 回答 (5件)

どのような方法でもいいから、円を描くためのパラメータ((x-a)^2+(y-b)^2 = r^2 の、a,b,r)がわかれば(=何かのソフトで実装できれば)いいのですよね?



>ネット検索しても円の描き方に関する記事はなく
円を書くのに必要なパラメータを求める方法なら、「円 最小2乗」で検索できます。検索してもわからなかった、というのは不可解。
EXCELで実装版
http://imagingsolution.blog107.fc2.com/blog-entr …
理論編
http://imagingsolution.blog107.fc2.com/blog-entr …
ただし、これらは、普通の最小2条とちょっと違うのと、個人HPであってフォーマルHP(学校とか学会とか。)ではないので要注意。

>そもそもNgraphで円は描けるのでしょうか?
「円」は、おそらく無理。
Ngraphは、普通の最小2条を使っているっぽいので、それを前提とします。
普通の最小2条とは、(y-f(x))^2qを最小にする、という意味です。

無理な理由の1
>円の式(x-a)^2+(y-b)^2 = r^2
この部分をy=...に直さないとならない。
質問文からは、こう直して入力したのかどうか、分からない。

無理な理由の2
y=...に直した結果は、
y=b±sqrt(r^2-(x-a)^2)
となり、プラス側かマイナス側かどちらかを選ぶ必要がある。でないと、Xの関数にならない。つまり、円は無理であって半円が限度である。半円は円ではないので、質問文の要求を満たさない。

無理な理由の3
では、半円でも良しとする。(Cole-Cole plotなら半円でも大丈夫っぽい。)
Ngraphのように計算式だけを入力する場合、計算式の微分は無理だから、パラメータ(この場合、a,b,r)を
適当に仮定し、誤差^2が最小にトライアルで求めることになる。
y=b±sqrt(r^2-(x-a)^2)は、かなり性質が悪く、
たとえば、正解がR=1,a=0,b=0だとして、 X=1.001(どうみてもX=1なんだけれど計測誤差でたまたまこうなった)
というデータがあったとき、r=1状態でyを計算すると、ルートの中がマイナスとなるため計算エラー。
仮にうまいこと収束に成功したとしても、最適円より大きめの半径となってしまう。
よって、最初に紹介したHPでは、普通の最小2条をあきらめています。
    • good
    • 0

fitして出てきた結果をそのままグラフにする方法はない。


得られたパラメータを書き写すなりコピーするなりして、
a,b,rに入れれば円が書ける。

>(2*PI*x/100)の意味がよく分からない

入力データが0~100だから、(2*PI*x/100)の範囲が0~2π。
    • good
    • 0

前の回答は忘れてください



まず、xの値だけを入れたデータ

0
1
2



100

のようなファイルを用意して読み込んで、変数変換に

x: a + r * cos(2*PI*x/100)
y: b + r * sin(2*PI*x/100)

を入れる。a,b,rは具体的な数値。

Ngraphは基本的にデータをプロットするツールなので、
データなしに関数を書くならgnuplotかMaximaを使うほうが楽だと思いますけどね。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。いくつか質問があるのでお時間がありましたら回答願います。
まず、cosとsinの後の式(2*PI*x/100)の意味がよく分からないのでその出所と意味を教えて頂きたいのと
数式変換というより非線形最小二乗近似でfitしたいので、'fit'を使って円を描く方法を知っているのでしたらお教え願いたいです。
Ngraphを用いているのは生データの上からfitした関数を上書き出来るという利点があるためです。単純に円を描くのが目的ではないのです。

少し偉そうなことを書いてしまい申し訳ありません。ご回答の程よろしくお願い致します。

お礼日時:2016/07/13 11:09

間違えた。

今時間がないのでのちほど訂正します。
    • good
    • 0

xの値だけを入れたデータ



0
1
2
・・・
100

のようなファイルを用意して

y=sqrt( r^2 - (π(x/100)-a)^2 ) + b



y=-sqrt( r^2 - (π(x/100)-a)^2 ) + b

の2本を書けばいいのでは。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!