よろしくお願いします

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
初者ああ

よろしくお願いします

#1

投稿記事 by 初者ああ » 3年前

1)sinX-cosX=0をRegular-Falsi法でときなさい
またx1=0 x2=1 ε=10^-6とする 途中経過がわかるように出力しなさい

2)x^2-sinX=0をNweton法でときなさい X0=1 ε=10^-6とする 途中経過がわかるように出力しなさい
よろしくお願いします。

かずま

Re: よろしくお願いします

#2

投稿記事 by かずま » 3年前

フォーラムルールに従って質問すると、すぐに回答が得られます。
そうでないと、回答が得られることはほとんどないと思います。

アバター
purin52002
記事: 235
登録日時: 4年前
連絡を取る:

Re: よろしくお願いします

#3

投稿記事 by purin52002 » 3年前

regularなんとか法というのを初めて聞いたので作ってみました^^

コード:

(1)regularなんとか法
1:x=0.768540 y=-0.023840                                                                                                
2:x=0.785518 y=0.000169                                                                                                 
3:x=0.785398 y=-0.000000                                                                                                

(2)ついでにNewton法(ですよね?きっと?)
1:x=0.891396 y=0.016637                                                                                                 
2:x=0.876985 y=0.000288                                                                                                 
3:x=0.876726 y=0.000000 
手元の電卓で計算したところおおよそ正しい出力だと思います^p^
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^

Math

Re: よろしくお願いします

#4

投稿記事 by Math » 3年前

2) Nweton法は過去ログで何度か答えてます。
Windows10、VS2017Community、C言語

コード:

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


/* --- f(x) 関数定義 --- */
double f(double x)
{
	/* x^2-sinx=0 */
	return x*x - sin(x);
}

double Df(double x)
{
	/* 微分 2x-cosx=0 */
	return 2*x - cos(x);
}

/* ---ニュートン法--- */

/* ---f:関数, x:初期値--- */
double newton(double(*fx)(double), double x)
{
	double eps = 0.000001;
	double xx;
	do {
		xx = x;
		x = x - f(x) / Df(x);
		printf("x = %f\n", x);
	} while (fabs(x - xx) > eps);
	return x;
}


int main()
{
	double x;
	x = 1; 
	printf("初期値 x=%f\n", x);
	printf("ANS = %f\n", newton(f, x));
	return 0;
}

コード:

1>------ ビルド開始: プロジェクト: ConsoleApplication1, 構成: Debug Win32 ------
1>c1.c
1>ConsoleApplication1.vcxproj -> D:\z17a\07\13\ConsoleApplication1\Debug\ConsoleApplication1.exe
1>ConsoleApplication1.vcxproj -> D:\z17a\07\13\ConsoleApplication1\Debug\ConsoleApplication1.pdb (Partial PDB)
========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ==========

コード:

初期値 x=1.000000
x = 0.89140
x = 0.87698
x = 0.87673
x = 0.87673
ANS = 0.876726
続行するには何かキーを押してください . . .

Math

Re: よろしくお願いします

#5

投稿記事 by Math » 3年前

あ、”数値微分”をするつもりだったけどやめたのでこれでいいのか。

コード:

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

/* --- f(x) 関数定義 --- */
double f(double x)
{
	/* x^2-sinx=0 */
	return x*x - sin(x);
}

double Df(double x)
{
	/* 微分 2x-cosx=0 */
	return 2*x - cos(x);
}

/* ---ニュートン法--- */
double newton(double x)
{
	double eps = 0.000001;
	double xx;
	do {
		xx = x;
		x = x - f(x) / Df(x);
		printf("x = %f\n", x);
	} while (fabs(x - xx) > eps);
	return x;
}


int main()
{
	double x;
	x = 1; 
	printf("初期値 x=%f\n", x);
	printf("ANS = %f\n", newton(x));
	return 0;
}

アバター
usao
記事: 1635
登録日時: 7年前

Re: よろしくお願いします

#6

投稿記事 by usao » 3年前

オフトピック
・Df(x)の値もチェックした方がよいのではないだろうか?
・初期値がいきなり解! ということも有り得ることを考慮すべきではないだろうか?
とか思ったり.

返信

“C言語何でも質問掲示板” へ戻る