楕円x^2/9+y^2/4=1を用いてシンプソンの公式を用いてπの値を求める問題なんですが刻み0.1として
どうしたらいいか全然わからないので教えて欲しいです><
一様台形の場合
#include<stdio.h>
#include<math.h>
int main(void){
double dean(double,double,double,double);
double a,b,s,dx,y0,y1,x,pi;
x=0;
dx=0.1;
s=0;
a=3;
b=2;
y0=dean(a,b,x,dx);
x=dx;
while(x<a){
y1=dean(a,b,x,dx);
s=s+(y1+y0)/2;
y0=y1;
x=x+dx;
}
pi=4*s/6;
printf("π=%lf\n",pi);
return 0;
}
double dean(double a,double b,double x,double dx){
double y;
y=b/a*sqrt(a*a-x*x)*dx;
return y;
}
シンプソン公式
Re: シンプソン公式
では、手始めに、各関数や変数がどういう役割を持っているか(何のための関数かどうしたらいいか全然わからないので教えて欲しいです
あるいは何のための変数か)をわかる範囲でいいから教えてください。
こんなところにプロトタイプ宣言を置いちゃっていいんでしょうか。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: シンプソン公式
怒られや減点が発生したりコーディング規約違反になったりするかはわかりませんが、
文法・意味的には全く問題ないはずです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: シンプソン公式
dean とは楕円のことですか?yasuhiro さんが書きました: ↑4年前double dean(double,double,double,double);
dx = 0.1 だと、x が 0.0 から 3.0 までの 30分割ですが、
それだと十分な精度を持った円周率は求まりません。
#include <stdio.h>
#include <math.h>
double f(double a, double b, double x)
{
double d = a * a - x * x;
if (d < 0) d = 0;
return b / a * sqrt(d);
}
int main(void)
{
int n = 8192; // int n = 30; // x: 0.0 -> 3.0, dx = 0.1
double a = 3, b = 2, dx = a / n;
double x = 0, y0 = f(a, b, x), y1, y2, pi, s = 0;
for (int i = 1; i < n; i += 2) {
x = dx * i;
y1 = f(a, b, x);
y2 = f(a, b, x + dx);
s += y0 + 4 * y1 + y2;
y0 = y2;
}
pi = s / 6 * (2 * dx) * 4 / (a * b);
printf("π = %f\n", pi);
return 0;
}
複数の掲示板で質問するときは、そのことを書くとか、
フォーラム(掲示板)ルールにしたがってください。
そうすれば、コードの解説をします。
Re: シンプソン公式
Re: シンプソン公式
しかしここまでできているのだから刻みをdx=0.001くらいにして
ここhttps://keisan.casio.jp/exec/system/1503541086を参照すれば簡単だよ。
https://ja.wikipedia.org/wiki/%E3%82%B7 ... C%E5%BC%8F
も参照
ここhttps://keisan.casio.jp/exec/system/1503541086を参照すれば簡単だよ。
https://ja.wikipedia.org/wiki/%E3%82%B7 ... C%E5%BC%8F
も参照