#3
by Math » 8年前
根をもとめるのはNewton法とにてますね。考え方はこうですね。(^^;
コード:
#include <stdio.h>
#include <stdlib.h>
double a;
/* 関数定義 */
double f(double x)
{
return x * x * x - a;
}
int main(int argc, char *argv[])
{
double xa, xb, xm; /* int xa, xb; */
/* double n, x, a, xm, f(xa), f(xm);
if (argv[1] == NULL)
{
printf("引数が足りません\n");
return 1;
}
n = atoi(argv[1]);
printf("初期区間を入力して下さい\n");
scanf("%d %d", &xa, &xb); */
a = 27.0; xa = 2.0; xb = 5.0; /* とする。答えは3.0のはず。 */
while (xb - xa >= 0.000001)
{
/* xm = ((double)xa + (double)xb) / 2;
f(xa) = (double)xa*(double)xa*(double)xa - a;
f(xm) = xm*xm*xm - a;
*/
xm = (xa + xb) / 2.0;
printf("%f\n", f(xm));
if (f(xm)*f(xa)<0)
/* if (f(xa) >= f(xm) >= 0 || f(xa) <= f(xm) <= 0) */
{
xb = xm;
}
else
{
xa = xm;
}
}
printf("%fの立方根は%f\n", a, xm);
return 0;
}
コード:
1>------ すべてのリビルド開始: プロジェクト:ConsoleApplication1, 構成: Debug Win32 ------
1>c1.cpp
1>ConsoleApplication1.vcxproj -> D:\z17a\07\16\ConsoleApplication1\Debug\ConsoleApplication1.exe
1>ConsoleApplication1.vcxproj -> D:\z17a\07\16\ConsoleApplication1\Debug\ConsoleApplication1.pdb (Partial PDB)
========== すべてリビルド: 1 正常終了、0 失敗、0 スキップ ==========
コード:
15.875000
-6.203125
3.517578
-1.652588
0.852570
-0.419682
0.211487
-0.105331
0.052769
-0.026359
0.013186
-0.006591
0.003296
-0.001648
0.000824
-0.000412
0.000206
-0.000103
0.000051
-0.000026
0.000013
-0.000006
27.000000の立方根は3.000000
続行するには何かキーを押してください . . .
[/size]
[size=85]根をもとめるのはNewton法とにてますね。考え方はこうですね。(^^;
[code]
#include <stdio.h>
#include <stdlib.h>
double a;
/* 関数定義 */
double f(double x)
{
return x * x * x - a;
}
int main(int argc, char *argv[])
{
double xa, xb, xm; /* int xa, xb; */
/* double n, x, a, xm, f(xa), f(xm);
if (argv[1] == NULL)
{
printf("引数が足りません\n");
return 1;
}
n = atoi(argv[1]);
printf("初期区間を入力して下さい\n");
scanf("%d %d", &xa, &xb); */
a = 27.0; xa = 2.0; xb = 5.0; /* とする。答えは3.0のはず。 */
while (xb - xa >= 0.000001)
{
/* xm = ((double)xa + (double)xb) / 2;
f(xa) = (double)xa*(double)xa*(double)xa - a;
f(xm) = xm*xm*xm - a;
*/
xm = (xa + xb) / 2.0;
printf("%f\n", f(xm));
if (f(xm)*f(xa)<0)
/* if (f(xa) >= f(xm) >= 0 || f(xa) <= f(xm) <= 0) */
{
xb = xm;
}
else
{
xa = xm;
}
}
printf("%fの立方根は%f\n", a, xm);
return 0;
}
[/code]
[code]
1>------ すべてのリビルド開始: プロジェクト:ConsoleApplication1, 構成: Debug Win32 ------
1>c1.cpp
1>ConsoleApplication1.vcxproj -> D:\z17a\07\16\ConsoleApplication1\Debug\ConsoleApplication1.exe
1>ConsoleApplication1.vcxproj -> D:\z17a\07\16\ConsoleApplication1\Debug\ConsoleApplication1.pdb (Partial PDB)
========== すべてリビルド: 1 正常終了、0 失敗、0 スキップ ==========
[/code]
[code]
15.875000
-6.203125
3.517578
-1.652588
0.852570
-0.419682
0.211487
-0.105331
0.052769
-0.026359
0.013186
-0.006591
0.003296
-0.001648
0.000824
-0.000412
0.000206
-0.000103
0.000051
-0.000026
0.000013
-0.000006
27.000000の立方根は3.000000
続行するには何かキーを押してください . . .
[/code]
[/size]