ここから本文です

数値解析のプログラミングで対数log(1+x)を求めるプログラムがわかりません 二分...

str********さん

2015/5/2521:18:55

数値解析のプログラミングで対数log(1+x)を求めるプログラムがわかりません
二分法とニュートン法で作成したいです

平方根√xを求めるプログラム(以下のプログラム)の形式を参考に作らなければなりません
また、出力形式は画像のような形式にしたいです
さらに、方程式を立てなければならず
平方根の場合は、f(t)=t^2 -x=0ですがlog(1+x)の方程式がわかりません
よろしくお願いします

二分法
#include <stdio.h>
#include<math.h>

double bisection(double x);
int main()
{
double x = 2.0;
printf("%e\n",bisection(x));
return 0;
}

double bisection(double x)
{
double lo, hi, lv, hv, md, mv;

lo = 0.0;
lv = -x;
hi = 2.0;
hv = 2.0 * 2.0 - x;

while (fabs(hi - lo) > 1e-10){
md = (lo + hi) / 2.0;
mv = md * md - x;
if (mv < 0) {
lo = md;
lv = mv;
}else {
hi = md;
hv = mv;
}
}
return (hi + lo) / 2.0;
}

ニュートン法
#include <stdio.h>
#include <math.h>

double newton(double x);
int main()
{
double x = 2.0;
printf("%e\n",newton(x));
return 0;
}

double newton(double x)
{
double v, vv;

v = 2.0;
vv = v + 1.0;
while (fabs(vv-v) > 1e-10) {
vv = v;
v = (v*v+x)/(2*v);
}
return v;
}

double x,double newton,stdio.h&amp;gt,math.h&amp;gt,int main,double newtonR,double binsrcg

閲覧数:
555
回答数:
2
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

apr********さん

2015/5/2700:29:55

/*
2015/5/25 21:18:55

1.log(1+x)を求めるための方程式の選択
__root(c) = x_ c = x*x__ f(x,c) = x*x-c = 0
__log(1+c)= x_ 1+c=e^x__ f(x,c) = e^x-c-1 = 0
2.オリジナル・ソースを確実化するため検討を兼ねて
__変数名の改定,ステートメントの配置改善,
__制御の改善,などなど実施
*/

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

#define EPS 1e-10_ // 許容誤差
#define XL_0___ // 二分探索区間下限
#define XH_2___ // 二分探索区間上限
#define X0_0___ // ニュートン法初期値

double binsrcg(double c);
double newtonR(double c);

double_f(double_x,double_c){
_return exp(x)-c-1;
}

double_d(double_x){
_return exp(x);
}

int main(){
_double_x,c;
_int__ k;
_// 二分法
_for(k=5;k<=10;k++){
__x = binsrcg(c=0.1*k);
__printf("%e %e %e\n",c,x,fabs(f(x,c)));
_} printf("\n");
_// ニュートン法
_for(k=5;k<=10;k++){
__x = newtonR(c=0.1*k);
__printf("%e %e %e\n",c,x,fabs(f(x,c)));
_} printf("\n");
_// 正常終了確認、一時停止
_printf("\n# Normal End #\n");
_printf("任意のキーで続行します\n"); getchar();
_return 0;
}

double binsrcg(double c){
_double xl,xh,xc;
_double fl,fh,fc;
_
_fl = f(xl=XL,c);
_fh = f(xh=XH,c);
_if( fl*fh > 0 ){
__printf("Error: fl*fh = %f*%f > 0.\n",fl,fh);
__exit(-1);
_}
_
_while( xh-xl > EPS ){
__xc = (xl+xh)/2;
__fc = f(xc,c);
__if( fc*fh < 0 ){
___xl = xc;
__}else{
___xh = xc;
__}
_}
_return xc;
}


double newtonR(double c){
_double_xn,x0=X0;
_
_xn = X0;
_x0 = xn + 1.0;
_do{
__x0 = xn;
__xn -= f(xn,c)/d(xn);
_} while( fabs(x0-xn) > EPS );
_return xn;
}
/* 実行出力:console
5.000000e-001 4.054651e-001 8.510082e-011
6.000000e-001 4.700036e-001 5.150458e-011
7.000000e-001 5.306283e-001 4.128342e-011
8.000000e-001 5.877867e-001 1.236855e-011
9.000000e-001 6.418539e-001 7.562118e-011
1.000000e+000 6.931472e-001 3.239697e-011

5.000000e-001 4.054651e-001 0.000000e+000
6.000000e-001 4.700036e-001 0.000000e+000
7.000000e-001 5.306283e-001 0.000000e+000
8.000000e-001 5.877867e-001 0.000000e+000
9.000000e-001 6.418539e-001 0.000000e+000
1.000000e+000 6.931472e-001 0.000000e+000


# Normal End #
任意のキーで続行します

*/

質問した人からのコメント

2015/5/27 00:49:04

助かりました
ありがとうございます

ベストアンサー以外の回答

1〜1件/1件中

k03********さん

2015/5/2523:14:43

strikewasabiさん

平方根の場合は、f(t)=t^2 -x=0ですが
上は方程式

下は方程式でない(=がない)
log(1+x)の方程式がわかりません

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる