「みんな教えて! 選手権!!」開催のお知らせ

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

A 回答 (5件)

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です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/09/19 09:06

近似値でよければ、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を累計すれば求める長さに近い値になります。
    • good
    • 0
この回答へのお礼

有難うございました。BOBさんと同じ理論ですね。
これが確実のようです。

お礼日時:2001/09/19 09:11

Nickeeさん、積分するの忘れてますよ。


x=aからx=bまでの曲線の長さは
  b
S=∫√(f'(x)^2+1)dx
  a
で表されます。
    • good
    • 0
この回答へのお礼

有難うございます。この式を更に分解して、プログラムに組めるような方法は無いのですか?難しいようであれば、微小部に分割して求める?
宜しくお願いします。

お礼日時:2001/09/18 19:12

 再度、登場



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

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

有難うございます。これって相当難しいみたいですね。

お礼日時:2001/09/18 19:04

√((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)

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

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

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


おすすめ情報