#include <stdio.h>
#include <math.h>
float f( float x, float v);
float fd( float x, float v);
int newton( float x0, float v, float accuracy, int max_calc, float *x, int *n);
main()
{
float x0, v, accuracy, x;
int max_calc, n, error;
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 x1, y1, yd1, x2, dx;
int error;
*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;
}
float f(float x, float v)
{
float fx, a, b, c, d, e;
fx = 0.;
a = x * tan(x);
b = x * x;
c = v * v;
d = c - b;
e = sqrt(d);
fx = a - e;
return fx;
}
float fd(float x, float v)
{
float fxl, a1, a2, a3, a4, a5, a6, a7;
fxl = 0.;
a1 = tan(x);
a2 = x / cos(x) / cos(x);
a3 = x * x;
a4 = v * v;
a5 = a4 - a3;
a6 = sqrt(a5);
a7 = x / a6;
fxl = a1 + a2 + a7;
return fxl;
}
xの初期値x0、vの初期値を1.4,1.5にして
f(x)=0を満たすxのv依存性を精度accuracy=1x10^(-6)で求め図に示せ。ただし0<v<π/2とする。
という問題なのですが上のプログラムをコンパイルして実行しても
error=2が永遠とでてきます。
どこをどうすればいいんでしょうか?
あと、gnuplotを使って図に示すのですが、
accuracy=1×10^(-6)の示し方と0<v<n/2の範囲の決め方がわかりません。
本当に分からないんです。(TT)
親切な方、詳しく教えてください。待ってます。。。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
とりあえず、if(0 < x1 < v)
があなたの意図と違う結果を返している可能性があるので、まずこれ読んで下さい。
https://www.jpcert.or.jp/sc-rules/c-exp13-c.html
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語: ポインタ 5 2022/06/01 08:33
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
- C言語・C++・C# C++ と、 1 2022/11/07 23:45
- その他(プログラミング・Web制作) Pythonでのかんたんな物理シミュレーションについての書籍 5 2023/06/02 07:37
- その他(プログラミング・Web制作) 物理の斜方投射のシミュレーションにおける位置や速度の単位について 4 2023/05/31 09:50
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- その他(プログラミング・Web制作) Pythonにおける物理のシミュレーションでの単位変換について 2 2023/06/02 17:11
- その他(プログラミング・Web制作) Pythonによる物理の斜方投射の位置座標表示について 2 2023/06/05 12:46
- その他(プログラミング・Web制作) ボールの動きがスムーズに動いてかつ目盛り線描画を維持するためには 4 2023/05/31 10:01
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
printf で二進表示を行いたい。
-
10個出力で改行したいのですが...
-
コマンドラインに出力した文字...
-
ブラックジャック
-
C言語で、「自然数nを入力し、n...
-
error C2143: 構文エラー : ';'...
-
scanfに文字が入力されたときに...
-
4の倍数を論理演算で表す。。
-
縦の棒グラフ
-
パスカルの三角形についてのCプ...
-
(C言語)めちゃくちゃな値にな...
-
ピラミッド表示プログラム。
-
C言語 ツェラーの公式を使った...
-
CTRL+Dでループを抜けるには
-
勝率をプログラムに
-
Visual Sutdio 2017 でのC言語...
-
%P と %X の違い
-
printf( " %2d", p * q );
-
C言語 プログラミング ごめんな...
-
printf()文の書式
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
既約分数の表示プログラム
-
printf で二進表示を行いたい。
-
8人分のテストの点数を入力し、...
-
printf( " %2d", p * q );
-
strcmp
-
CTRL+Dでループを抜けるには
-
4の倍数を論理演算で表す。。
-
%P と %X の違い
-
【C言語教えてください】sin波...
-
c言語でAからZまでを表示する...
-
cshの文字列操作(0埋め)
-
万年カレンダーのC言語プログラ...
-
コマンドラインに出力した文字...
-
scanfに文字が入力されたときに...
-
コンパイルエラーについて
-
ホームページをC言語で作りたい...
-
改行について 1行に何個かづ...
-
台形の面積を求めるプログラム
-
なぜgccはstdio.hをインクルー...
おすすめ情報