xからyを求める関数 – プログラミング – Home

通知
すべてクリア

[解決済] xからyを求める関数


セイ
 セイ
(@セイ)
ゲスト
結合: 19年前
投稿: 7
Topic starter  

CPointの要素がN点ありまして、
その点を使って線(折れ線グラフ)を引いてます。

例えばこんな感じ
CPoint pt[N];

ptにデータセット

dc.Polyline(pt,N);

ここで任意のxに対するyを求める関数とかが
VCにありますでしょうか?
xはN点のptに無いxを指定したいです。

環境ですが、
Vc.net2003を使ってます。


引用未解決
トピックタグ
reshia
 reshia
(@reshia)
ゲスト
結合: 20年前
投稿: 117
 

私なら、そんな関数を探す前に作ってしまいます。

Polylineって、ただの折れ線なんだから
pt[i].x < x < pt[i+1].x という2つの点がわかれば
そこから x に対する y が求まります。

これぐらいは、すぐですし。


返信引用
セイ
 セイ
(@セイ)
ゲスト
結合: 19年前
投稿: 7
Topic starter  

レスありがとうございます。
自分数学(算数?)にがてなんです。
紙の上でさえ難儀してますので
プログラムで書くのは難しいです。

とりあえず存在するかどうか教えてください。


返信引用
tib
 tib
(@tib)
ゲスト
結合: 22年前
投稿: 468
 

> とりあえず存在するかどうか教えてください。
私の知る限り、ありません。

ところで、これは参考になりますか?
http://www2.edu.ipa.go.jp/gz/e1math/e1ichi/e1ich3/e1hot3.mpg


返信引用
セイ
 セイ
(@セイ)
ゲスト
結合: 19年前
投稿: 7
Topic starter  

ありがとうございました。
何とか作ってみます。


返信引用
reshia
 reshia
(@reshia)
ゲスト
結合: 20年前
投稿: 117
 

解決チェックはついていますが、ちょっと待ってください。
たとえば、ぐるぐる巻きのPolylineを描いたとしたら
x に対する y が複数できてしまいます。
どの y を求めたいのかを予め決めておかないと・・


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

ひょっとして最小二乗法かなんかで近似直線 y = ax + b の a, b を求めろってことか?


返信引用
セイ
 セイ
(@セイ)
ゲスト
結合: 19年前
投稿: 7
Topic starter  

reshiaさん

xはx-1<x<x+1前提です。

επιστημηさん

いいえ、単純にy = ax + bで
xに対するyを求めることをしたいだけです。
これを複数の点とxを与えたらyを求めてくれる
関数ないかなと思い質問しました。


返信引用
セイ
 セイ
(@セイ)
ゲスト
結合: 19年前
投稿: 7
Topic starter  

なんか変だから訂正

>>xはx-1<x<x+1前提です。
xはx[i-1]<x[i]<x[i+1]前提です。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

> 単純にy = ax + bで xに対するyを求めることをしたいだけです。
> これを複数の点とxを与えたらyを求めてくれる関数ないかなと思い質問しました。

C++なら transform てのがありますが。

#include <iostream>
#include <algorithm>

int f(int x) {
return 2 * x - 3;
}

int main() {
int x[5] = { -2, -1, 0, 1, 2 };
int y[5];
std::transform(x, x+5, y, &f); // x[0]..x[4] を f(x)に与え、結果をy[]に格納
for ( int i = 0; i < 5; ++i ) {
std::cout << f( << x[i] << ) = << y[i] << std::endl;
}
return 0;
}

/* 実行結果
f(-2) = -7
f(-1) = -5
f(0) = -3
f(1) = -1
f(2) = 1
*/


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

> 単純にy = ax + bで xに対するyを求めることをしたいだけです。
> これを複数の点とxを与えたらyを求めてくれる関数ないかなと思い質問しました。

え? 複数の点(x,yの組)から a, b を求めるの? どうやって? 最小二乗法じゃないの?
それとも a, b はわかっているの?


返信引用
セイ
 セイ
(@セイ)
ゲスト
結合: 19年前
投稿: 7
Topic starter  

自分のやりたいことを書きますと
以下のx,y座標M点(例では5点)で折れ線グラフを書いてます。(xは時間、yは温度)
POINT pt[] = {
{0, 28}
{2, 33}
{4, 111}
{8, 80}
{10, 90}
};
条件としてpt[n-1]<pt[n]<[n+1]とします。
x=5のときのyが知りたいので
(4, 111)と(8, 80)の2点間の直線(a,b)を求めて
y = ax + bでyを求めると思いますが、
これを以下のように出来る関数とかないかなあと思いました。
y = func(pt, 5, x)


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

> これを以下のように出来る関数とかないかなあと思いました。
> y = func(pt, 5, x)

作りましょう。

えと、

int func(POINT* pt, int N, int x) {
1. 与えたxを挟むpt[t]とpt[t+1]を探し、
2. その2点を通る直線の式 y = ax +b の a, b を求め、
3. それに基づいてyを求める
}

ですか?

そのまんまやないの。なにがわからんですか?


返信引用
セイ
 セイ
(@セイ)
ゲスト
結合: 19年前
投稿: 7
Topic starter  

書いてることはわかりますが、
プログラムにするのが難しく。
こういう関数が用意されてないかなあと思って質問しました。
多分、普通の人ははちょちょいのちょいで出来るんでしょうが…
もうちょっと勉強してきます。m(__)m


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました