#define N 8
double x[N]={0,10,11,15,20,30,50,100},
y[N]={0, 0, 5,10,13,11, 8, 6};
といったデータ(実験で得られたデータです。)について任意のx座標tにおけるy座標を直線補間で求めたいのですが、この場合、0<t<10,10<t<11,......50<t<100と場合分けして直線の式を求める方法しか思いつかないのですが、この場合、実験で得られたデータの数の増減によってプログラムも毎回作り直さないといけないので困っております。もしこの方法以外に良い方法があれば教えてください。ソースも教えて頂けると有難いです。
No.1ベストアンサー
- 回答日時:
malloc()
という関数があります.
これは動的にメモリを確保する関数です.
よく使います.
これをつかうと,「Cらしいプログラム」になります.
まず,データの数を入力して,それに見合うメモリを動的に確保します.そして,大きい順に並べ替えをして,
あとは直線補間することになるでしょう.
下記の様なイメージでしょうか.
デバッグしてないので,あくまでイメージです.
int N;
double *x,*y;
fscanf("%d",&N);
if((p1=malloc(N*sizeof(double)))==NULL){
fprintf(stderr,"can't allocate system memoey [%d]\n",N*sizeof(double));
exit(1);
}
if((p2=malloc(N*sizeof(double)))==NULL){
fprintf(stderr,"can't allocate system memoey [%d]\n",N*sizeof(double));
exit(1);
}
x=(double *)p1;
y=(double *)p2;
for(i=0;i<N;i++){
fscanf("%lf %lf",&(x[i]),&(y[i]));
}
sort(x,y);// データを大きさによってソートするルーチン
// 直線補間ルーチン
// 区間による場合分け.
それでは.
No.4
- 回答日時:
似たような動作の直線近似機能クラスを設計したことがあります。
サンプルの座標を10個まで記憶できるようにして、サンプル個数
のパラメータを追加し、昇順にソートして使用しました。
サンプル数の上限を設定できるなら自動処理も楽です。
全体を挙げると大きいので検索のところだけ例示してみます。
typedef struct {
int PrmSampMax; /* 補正サンプル数最大値 */
int nowSampMax; /* 現在サンプル有効数 */
int nowInput; /* 現在入力データ */
int nowOutput; /* 現在出力データ */
int InSamp[KINJ_SAMPMAX];/* 入力サンプルテーブル */
int OutSamp[KINJ_SAMPMAX];/* 出力サンプルテーブル */
} KINJ_CLASS ;
//
// 区間検索
// src:入力値
// no: 区間( ptr->InSamp[*no]~ptr->InSamp[*no+1]間 )
//
static void KinjSampSearch( KINJ_CLASS *ptr,int src,int *no )
{
int *iAdr,max;
short i;
max = ptr->nowSampMax - 2;
iAdr = &(ptr->InSamp[1]);
getNo = 0;look = 0;
for( i = 0;i < max; ){
if( src <= *iAdr ){ break; }
i ++; iAdr ++;
}
*no = i;
return;
}
No.5
- 回答日時:
プログラムを毎回作り直すというのはどういう意味だろう・・・
Nが定数か変数かに関係なく、インデックスを1つ求めるだけですよね。
for (i = 1; i < N; i++) {
if (x[i] >= t) {
break;
}
}
/* この後、x[i - 1], y[i - 1], x[i], y[i]を使って直線補完する */
tの範囲が0~x[N-1]でない場合は少し工夫が必要ですが、解なし、もしくはy[0]かy[N-1]に張り付く。
Nが変数で、データをファイルから読み込むのであれば、No.1のFM-8さんの回答のようにするだけです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 数学 球面と接する直線の軌跡が表す領域 4 2023/07/30 12:37
- 統計学 直線の傾き(回帰係数)から相関係数を計算できるのでしょうか? 2 2022/09/16 19:28
- 数学 数学ベクトルに関しての質問 3 2022/05/25 23:21
- 数学 この問題が分かりません! 右図の直線①②の式は、y=-x+4①、 y=3/4x+1② である。2つの 3 2022/05/04 22:29
- 数学 ベクトル方程式(ヘッセの標準形)についての質問 2 2022/04/23 18:00
- 数学 極座標A(2,π/6)となる点を通り、OAに垂直な直線lの曲方程式を求めよ という問題を直交座標を利 1 2022/08/04 17:31
- 統計学 Rを用いた「繰り返しがある直交表実験計画法」の分析方法 8 2023/08/01 17:58
- 数学 数学の問題で法線ベクトルについて 5 2022/11/13 12:45
- 数学 【 数I 放物線と直線の共有点 】 問題 放物線y=x²+ax+bが点(1,1)を通り, 直線y=2 4 2022/07/18 09:57
- 統計学 t検定について教えてください 2 2023/02/23 16:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語で%を使わない余りの出し方
-
分数の足し算をさせるプログラ...
-
nCrの計算
-
C言語
-
カードシャッフルのブログラム...
-
CppUnitはCプログラムにも使え...
-
intとlongは同じ?
-
ハフマン符号化の問題を解くプ...
-
C++で表を作成したいのです ...
-
プログラミング
-
VC++でコマンドラインから引数...
-
C言語 サイコロ 2つの値を返せない
-
2÷3などの余りについて
-
比較回数と交換回数表示について
-
信頼区間の1.96や1.65ってどこ...
-
nCmの関数
-
複数桁10進数の*桁目だけを抽出...
-
Notepad++の関数リスト表示の変...
-
C言語のfor文です。 繰り返しの...
-
break文でループを一気に抜ける...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
2の補数を計算するプログラム
-
intとlongは同じ?
-
再起呼び出しの回数をカウント...
-
C言語で%を使わない余りの出し方
-
迷路を脱出する経路探索プログ...
-
画像の拡大・縮小
-
分数の足し算をさせるプログラ...
-
C言語で簡単なパックマンゲーム...
-
C++で表を作成したいのです ...
-
条件が多い場合
-
複数の共有メモリの作成
-
ヒストグラム均等化処理プログラム
-
3のつく数と3の倍数を表示 C言語
-
argvのNULLチェック
-
乱数で交互に偶数、奇数が、、、。
-
プログラミングに関して
-
OpenCVによる4値化について
-
再帰処理をループ処理に変換
-
16bitで乱数を生成する方法
-
C++ Debug Errorについて教えて
おすすめ情報