No.15471![]() |
直線による補間 投稿者---hiro(2004/07/13 10:21:22) |
||
平面座標(x,y座標)に5個の点(x,y)=(1,3),(5,4),(6,8),(9,23),(15,13)、が与えられる時、任意の点x1におけるy1の値を直線による補間で求めるプログラムを作りたいのですが、本を読んでも多項式法しか載っていないのでわかりません。どなたか教えて頂けますか?当方bccを使用しています。 |
No.15495![]() |
Re:直線による補間 投稿者---ぽへぇ(2004/07/13 19:31:00) |
||
>直線による補間で求める 2点あれば、それを満たす直線の方程式がわかりますが…。 そういう問題でなければごめんなさい。 |
No.15499![]() |
Re:直線による補間 投稿者---hiro(2004/07/14 08:50:23) |
||
>2点あれば、それを満たす直線の方程式がわかりますが…。 >そういう問題でなければごめんなさい。 おっしゃるとおりです。 例えば、(x,y)=(1,3)(5,4)の間にある点(3,a)を求めたいときに、2点を通る直線の方程式を求めて、x=3,y=aを代入してaの値を導く。こういったことを(x,y)のグラフ上のある任意の点のy座標を導くものと考えて頂ければよろしいかと思います。 |
No.15501![]() |
Re:直線による補間 投稿者---REE(2004/07/14 10:04:07) |
||
>例えば、(x,y)=(1,3)(5,4)の間にある点(3,a)を求めたいときに、2点を通る直線の方程式を求めて、x=3,y=aを代入してaの値を導く。こういったことを(x,y)のグラフ上のある任意の点のy座標を導くものと考えて頂ければよろしいかと思います。 それが分かっているのであれば、問題なくプログラムが作成できると思うのですが、何が知りたいのでしょうか? |
No.15566![]() |
Re:直線による補間 投稿者---monkey(2004/07/16 01:26:26) |
||
大サービス #include <stdio.h> #define N 5 const double x[ N ] = { 1.0, 5.0, 6.0, 9.0, 15.0 }; const double y[ N ] = { 3.0, 4.0, 8.0, 23.0, 13.0 }; int main() { double xt; scanf( "%lf", &xt ); if( x[ 0 ] <= xt && xt <= x[ N - 1 ] ) { int i; for( i = 1; i < N; ++i ) { if( xt <= x[ i ] ) { double a = ( y[ i ] - y [ i - 1 ] ) / ( x[ i ] - x[ i - 1 ] ); double b = ( x[ i ] * y [ i - 1 ] - x[ i - 1 ] * y[ i ] ) / ( x[ i ] - x[ i - 1 ] ); printf( "x = %lf, y = %lf\n", xt, a * xt + b ); break; } } } else printf( "out of range\n" ); return 0; } |
No.15588![]() |
Re:直線による補間 投稿者---hiro(2004/07/16 13:16:17) |
||
皆様、どうもありがとうございました。 monkeyさん、ソースまで頂いてありがとうございます。 monkeyさんのソースを引用させて頂きますと、 if( x[ 0 ] <= xt && xt <= x[ N - 1 ] ) { int i; for( i = 1; i < N; ++i ) { if( xt <= x[ i ] ) この部分が解っていなかったため、 if(1<x<5) . . . if(9<x<15) と場合分けをやらないといけないものだと思ってました。 このため、データが増えると一々場合分けを変えていかないといけないため、もっと良いプログラムはできないものかと困っておりました。 どうもありがとうございました。 |
No.15589![]() |
Re:直線による補間 投稿者---monkey(2004/07/16 13:49:30) |
||
>if(1<x<5) >. >. >. >if(9<x<15) >と場合分けをやらないといけないものだと思ってました。 間違いじゃありません. >このため、データが増えると一々場合分けを変えていかないといけないため、もっと良いプログラムはできないものかと困っておりました。 であれば,自分が思いついたロジックに基づいて作成したコードを示した上で,「○○のように改良したいが,××の方法が分からないので教えてほしい」というような質問の仕方をすべきでしたね. |
No.15569![]() |
Re:直線による補間 投稿者---たいちう(2004/07/16 09:35:39) |
||
一番初めの質問を読んだときには、最小二乗法で直線の方程式を 計算する話だと思ったのですが、どうやら違うのでしょうか。 もしそうなら「最小二乗法」で検索しソースを探すか、 統計学等の入門書で最小二乗法を学習し(この問題なら 十分手で計算できます)、その方法をコーディングするか。 私の解釈ともmonkeyさんの解釈とも違う場合は、落ち着いて もう一度説明してください。 |