C++のプログラミングについての質問です。
C++のプログラミングについての質問です。
f(x)=\int_{1}^{0} \frac{1+e^t}{\sin(xt)}dt -0.1=0 (式を皆さんに分かってもらえるように表記する方法が分からないため、TeX表記します。)
このようになるようなx2の値を求めるプログラムを教えてください。 ちなみに、定積分は積分区間は100等分して、シンプソン法と狙い撃ち法を用いて
プログラムを作ってください。
P.S
狙い撃ち法は簡単に言うと x2=\frac{f(x0)-f(x1)}{x1*f(x0) - x0*f(x1)}
この式を使って後はシンプソン法で求めた値を上式に突っ込むだけです。
一応自分が考えたプログラムを載せます。
間違いがあればご指摘お願いします。
↓
// kadai5.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int _tmain(int argc, _TCHAR* argv[])
{
int t;
double ta,x0=100,x1=x0-0.01,x2,S0=0,S1=0,Ds0,Ds1,fx0,fx1,y00,y01,y02,y10,y11,y12,esp=0.000001;
for(;;){
for(t=0;t<=99;t=t+2){
ta=t*0.01;
y00=sin(x0*ta)/(1+exp(ta));
y01=sin((x0+1)*(ta))/(1+exp(ta));
y02=sin((x0+2)*(ta))/(1+exp(ta));
Ds0=0.01*(y00+4*y01+y02)/3;
S0=S0+Ds0;
y10=sin(x1*ta)/(1+exp(ta));
y11=sin((x1+1)*(ta))/(1+exp(ta));
y12=sin((x1+2)*(ta))/(1+exp(ta));
Ds1=0.01*(y10+4*y11+y12)/3;
S1=S1+Ds1;
printf("S0=%lf \n S1=%lf",S0,S1);
}
fx0=S0-0.01;
fx1=S1-0.01;
x2=((x1*fx0)-(x0*fx1))/(fx0-fx1);
printf("x=%lf \n",x2);
if(fabs(x1-x2) <= esp)break;
x0=x1;
x1=x2;
}
return 0;
}