情報
大学生・専門学校生・社会人
解決済み

C言語ラグランジュの補間公式のプログラミングy=loge(x)(データはリダイレクトで読み込みます)についてです

2枚目の赤丸に入るところを考えても分からずエラーが出るので教えて頂きたいです。またこのプログラムで間違っているところがあれば指摘していただきたいです。

Lagrange の補間公式を用いて関数値を計算する手順 計算機で,いろいろなaに対して, (2) を計算するには, "チm; (i=0,1, , n) のとき Pn(z) (- 2o)( - 1) (日 1 ) × 1 f(r) 三 2- C; di 4 = (T- o).… (g- m-1)(H- 41)… (エ-En) da となることから16, 次の手順でするのがよいでしょう.このようにするのが速いとされています. ただし, a におけるf(z) の推定値 faを計算するものとします。 1. Co, I1,… Tn をそれぞれ配列の要素 a[0], z[1], , a[n] に代入する。 2. f(zo),f(z1),…, f(エn) をそれぞれ配列の要素 f[O], f[1]),……, f\n]に代入する 3. a を与える。 4.i= 0,1,2, ..,n に対して, 順に, di] = (z] - [0)) * * (z[i]-2i-1]) * (z]-2i+1)) * ** (z]-alnl) を計算する。 5.c=1, s=0 と初期化し,
#define N 35 int main(void) int i, j, n; double xx, d[N], x[N], f[N], c=1, s=0, fx; scanf("%d",&n); /* dataの個数+1 */ scanf("%d",&xx); /* 計算するための ×を読み込む */ /* data を読み込む */ for(i= 0;i<=n;i++) scanf("%lf %lf", x[i],f[i]); printf("\nLagurange Interpolation Polunomial: f(x) 3D log_e x\n"); /* 読み込んだ data をprint */ printf("\nx[i] for(i=0;i<=n;i++) log_e(x[i])\n"); printf("%10.6f %10.6f %10.6f\n", x[i],f[i],log(x[i])); /* (x_i-x_0) (x_i-x_{i-1})(x_-x_{i+1}) (x_i-x_n)を計算 */ for(i= 0;i<=n;i++ )
* (x_i-x_0) (x_i-x_{i-1})(x_i-x_{i+1}) (x_i-x_n)を計算 */ for(i= 0;i<=n;i++) for( j = 0;j <=n;j++) if( j1=i) /* p_n(x) を計算 */ for(i= 0;i<=n;i++) if(xx != x[i]) else c= 1; = f[i]}; break; fx = c*s; /* x_p(x), log_e(x) を print */ printf ("\nx printf("%10.6f %10.6f %10.6f %10.6f\n", xx ,fx, log(xx), fx-log(xx)); P(x) log_e(x) p(x)-log_e(x)\n")

回答

✨ ベストアンサー ✨

赤丸の上のscanfで渡す引数に&がついていないからエラーになってるんじゃないでしょうか。

ざっと見た感じではそうですね。

抜けてるというか、もしかしたら順番が違うのかもしれませんね。
計算するためのxを読み込むのがx[n],f[n]のデータを読み込む前になってますが、後の方がいいのかもしれません。
そしてxのscanは%dじゃなくて%lfだと思います。

scanf("%d", &n)

for ( i = 1 ; i <= n ; i++ )
{
scanf(“%lf %lf “ , &x[i], &f[i]);
}

scanf(“%lf”, &xx);

こうかもしれないということです。

訂正
for(i=0;…(略)
ですね。

なるほどそういうことでしたか。無事エラーが解決したようでよかったです。

この回答にコメントする
疑問は解決しましたか?

この質問を見ている人は
こちらの質問も見ています😉