シンプソン公式

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

シンプソン公式

#1

投稿記事 by yasuhiro » 1ヶ月前

楕円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;
}

box
記事: 1735
登録日時: 8年前

Re: シンプソン公式

#2

投稿記事 by box » 1ヶ月前

どうしたらいいか全然わからないので教えて欲しいです
では、手始めに、各関数や変数がどういう役割を持っているか(何のための関数か
あるいは何のための変数か)をわかる範囲でいいから教えてください。

コード:

int main(void){
double dean(double,double,double,double);
double a,b,s,dx,y0,y1,x,pi;
こんなところにプロトタイプ宣言を置いちゃっていいんでしょうか。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

yasuhiro

Re: シンプソン公式

#3

投稿記事 by yasuhiro » 1ヶ月前

正直シンプソンの公式もプログラムも全然分かってなくて困っているんですよね、

アバター
みけCAT
記事: 6150
登録日時: 8年前
住所: 千葉県
連絡を取る:

Re: シンプソン公式

#4

投稿記事 by みけCAT » 1ヶ月前

box さんが書きました:
1ヶ月前

コード:

int main(void){
double dean(double,double,double,double);
double a,b,s,dx,y0,y1,x,pi;
こんなところにプロトタイプ宣言を置いちゃっていいんでしょうか。
怒られや減点が発生したりコーディング規約違反になったりするかはわかりませんが、
文法・意味的には全く問題ないはずです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

かずま

Re: シンプソン公式

#5

投稿記事 by かずま » 1ヶ月前

yasuhiro さんが書きました:
1ヶ月前
double dean(double,double,double,double);
dean とは楕円のことですか?

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;
}
ソースコードを貼り付ける場合は codeタグを使うとか、
複数の掲示板で質問するときは、そのことを書くとか、
フォーラム(掲示板)ルールにしたがってください。
そうすれば、コードの解説をします。

かずま

Re: シンプソン公式

#6

投稿記事 by かずま » 1ヶ月前

box さんが書きました:
1ヶ月前
こんなところにプロトタイプ宣言を置いちゃっていいんでしょうか。
Kernighan & Ritchie の The C Programming Language
p.72 に次のような例があります。

コード:

	main()
	{
		double sum, atof(char []);
		char line[MAXLINE];
		int getline(char line[], int max);

Math

Re: シンプソン公式

#7

投稿記事 by Math » 1ヶ月前

ちなみに台形則の計算結果は円周率にほど遠いね

VS2019 Communityss使用
http://www2.koyoen.birdview.co.jp/~abcx ... -22-a-.PNG

Math

Re: シンプソン公式

#8

投稿記事 by Math » 4週間前

しかしここまでできているのだから刻みをdx=0.001くらいにして

ここhttps://keisan.casio.jp/exec/system/1503541086を参照すれば簡単だよ。

https://ja.wikipedia.org/wiki/%E3%82%B7 ... C%E5%BC%8F
も参照

Math

Re: シンプソン公式

#9

投稿記事 by Math » 4週間前

台形則でも 刻みを dx=0.001 にしただけで

π=3.141585

と改善されたぞ(^^;

返信

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