アプリ版:「スタンプのみでお礼する」機能のリリースについて

ニュートン法による非線型方程式を解くプログラムを作れ。と言う問題で、

#include <stdio.h>
#include <math.h>

float f( float x, float v);
float fd( float x, float v);

main()
{
float x0, v, max_calc, accuracy, x, n, error, newton;
x0 = 1.4;
v = 1.5;
max_calc = 0.;
accuracy = 0.;
error = newton( x0, v, accuracy, max_calc, &x, &n);
if(error == 1)
{
printf("x=%f,n=%f\n", x, n);
}
else
{
printf("正常終了しなかった\n");
}
}

int newton( float x0, float v, float accuracy, int max_calc, float *x, int *n)
{
float error, x1, y1, yd1, x2, dx;

*n = 1;
error = 0;
x1 = x0;

while(!error)
{
y1 = f(x1, v);
yd1 = fd(x1, v);
x2 = x1 - y1 / yd1;
dx = fabs(x1 - x2);
if(dx < accuracy)
{
*x = x2;
printf("error=1\n");
}
else if(0 < x1 < v)
{
*x = x2;
printf("error=2\n");
}
else if(*n > max_calc)
{
*x = x2;
printf("error=3\n");
}
else{
printf("x2=%f,*n=%f,dx=%f\n", x2, *n, dx);
x1 = x2;
*n = *n + 1;
}
}
return error;
}

で、gcc ??????.c -lm
コンパイルにかけてみると、
14: error: called object ‘newton’ is not a function
とでてきて、できません。
色々と試してみましたが、分かりません。

また、
上で作った関数を用いて、f(x)=0を満たすxのv依存性を精度accuracy=1x10-6で求め図に示せ。ただし0<v<π/2とする。

gnuplotを使ってすると思うのですが
精度の示し方と範囲の表示の仕方が分かりません。

分かる方、ぜひ、教えてください!!!

A 回答 (2件)

main の中で


float x0, v, max_calc, accuracy, x, n, error, newton;
って書いてるじゃん. これで「newton」を関数と思ってくれというのは, いくらなんでも無茶が過ぎるというものだ.
    • good
    • 1

float f( float x, float v);  ← 実体がありません


float fd( float x, float v);  ← 実体がありません

main()
{
 float x0, v, max_calc, accuracy, x, n, error, newton; ← newtonは関数名に使用されています。max_calc, n は int型であるべきです。

これ以上、書くのが面倒なぐらいデタラメなコードです。
よく見直しましょう。
    • good
    • 1

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