OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

3次曲線の長さの求め方

  • 困ってます
  • 質問No.137539
  • 閲覧数1003
  • ありがとう数4
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 80% (4/5)

Y=aX^3+bX^2+cX+dの3次曲線で,X1~X2間の長さ(弧長)の求め方を教えてください。また、弧長から,Xの値の求め方もお願いします(逆をやれば良いだけ?)。
生産設計のプログラムで必要になりました。30年ぶりに、数学の教科書を開きましたが、全く理解できません。宜しくお願いします。一筋縄でいかないようですが?
近似式でもかまわないのですが。
通報する
  • 回答数5
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.5
レベル10

ベストアンサー率 50% (52/103)

S(x) = √( (f(x+dx) - f(x))^2 + dx^2 )
とおいて(要するに微少部分について三平方の定理)、

int step = 10000;
double dx = (X2 - X1)/step;
double sum = .0;

for( double x=X1; x<=X2; x+=dx ) {
sum += S(x);
}

のような感じで求める数値積分ができます。
(C Styleで書いてしまいましたが、まあわかりますよね。)

一般にはstepの数を大きくすると精度が上がりますが、計算機特有の誤差の問題がいろいろあるので、気をつけないと結構な誤差がたまります(これは解析的に解いた式を計算機に計算させても同様ですが)。
この辺りは経験をつむしかないので、計算機関係の本を読みながら試してみて下さい。

例えば、パラメータや積分範囲にもよるので簡単には言えませんが、
double f( double X ) {
return a*X*X*X + b*X*X + c*X + d;
}

よりも、

double f( double X ) {
return ((a*X + b)*X + c)*X + d;
}
とかにした方がいいかも。
まあ、いろいろ試して精度のいい方法を使えばOKです。
お礼コメント
hasami

お礼率 80% (4/5)

有難うございました。これが一番確実な方法ですね。
橋梁の生産設計に使います。誤差は、100mに対して0.5mm程度は許されますので、
理論的に正しければ、それでよしとします。
C++で構築します。
投稿日時 - 2001-09-19 09:06:47
-PR-
-PR-

その他の回答 (全4件)

  • 回答No.1
レベル9

ベストアンサー率 15% (14/93)

√((dy/dx)^2+(dy/dy)^2 の公式を使えばいいような気がするのですが、 dy/dx=3ax^2+2bx+c で領域はx1~x2 dy/dy=1 よって、√((3ax1^2+2bx1+c)-(3ax2^2+2bx2+c)+1) だと、おもうのですが、その逆は上の式と=で求めたい数をむすんで、計算するだけとおもいますが、 あまり、自信がないので、参考までに
√((dy/dx)^2+(dy/dy)^2
の公式を使えばいいような気がするのですが、

dy/dx=3ax^2+2bx+c で領域はx1~x2
dy/dy=1
よって、√((3ax1^2+2bx1+c)-(3ax2^2+2bx2+c)+1)

だと、おもうのですが、その逆は上の式と=で求めたい数をむすんで、計算するだけとおもいますが、

あまり、自信がないので、参考までに


  • 回答No.2
レベル9

ベストアンサー率 15% (14/93)

 再度、登場 微小の斜めの長さを微小でとって、積分しなきゃいけないですね。 まちがえていました。  だから、√((3ax^2+2bx+c)^2+1)をx1からx2まで、積分すればよいのかな。 計算は複雑になるのでかきません。 補足、質問があればどうぞ。 ...続きを読む
 再度、登場

微小の斜めの長さを微小でとって、積分しなきゃいけないですね。
まちがえていました。

 だから、√((3ax^2+2bx+c)^2+1)をx1からx2まで、積分すればよいのかな。
計算は複雑になるのでかきません。
補足、質問があればどうぞ。
お礼コメント
hasami

お礼率 80% (4/5)

有難うございます。これって相当難しいみたいですね。
投稿日時 - 2001-09-18 19:04:29
  • 回答No.3
レベル10

ベストアンサー率 24% (47/191)

Nickeeさん、積分するの忘れてますよ。 x=aからx=bまでの曲線の長さは   b S=∫√(f'(x)^2+1)dx   a で表されます。 ...続きを読む
Nickeeさん、積分するの忘れてますよ。
x=aからx=bまでの曲線の長さは
  b
S=∫√(f'(x)^2+1)dx
  a
で表されます。
お礼コメント
hasami

お礼率 80% (4/5)

有難うございます。この式を更に分解して、プログラムに組めるような方法は無いのですか?難しいようであれば、微小部に分割して求める?
宜しくお願いします。
投稿日時 - 2001-09-18 19:12:34
  • 回答No.4
レベル13

ベストアンサー率 24% (357/1463)

近似値でよければ、sを適当に小さな数として、 x1 = x x2 = x + s y1 = a(x1)^3+b(x1)^2+c(x1)+d y2 = a(x2)^3+b(x2)^2+c(x2)+d l=sqrt((x2-x1)^2+(y2-y1)^2) とすればlが微小区間xから(x+s)までの線分の長さを表わしますから、 xをX1からX2までの間で上記lを累計すれば求める長さに近い値になり ...続きを読む
近似値でよければ、sを適当に小さな数として、
x1 = x
x2 = x + s
y1 = a(x1)^3+b(x1)^2+c(x1)+d
y2 = a(x2)^3+b(x2)^2+c(x2)+d
l=sqrt((x2-x1)^2+(y2-y1)^2)
とすればlが微小区間xから(x+s)までの線分の長さを表わしますから、
xをX1からX2までの間で上記lを累計すれば求める長さに近い値になります。
お礼コメント
hasami

お礼率 80% (4/5)

有難うございました。BOBさんと同じ理論ですね。
これが確実のようです。
投稿日時 - 2001-09-19 09:11:00
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ