積分

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

積分

#1

投稿記事 by さっさ » 17年前

課題でいろいろな積分方法で面積を求めるのプログラムを作っています。
左端点則での面積を求めるプログラムを作ったのですがうまく実行できません・・・

#include<stdio.h>
#include<math.h>
#define N 100
#define xa 0.0
#define xb 1.0


double f(double);


struct XY
{
double x;
double y;
};


int main(void)
{
int i;
double S=0.0,dx,x;
dx=(xb-xa)/N;
for(i=1;i<2*N;i++)
{
S+=f(x)*dx;
x+=dx;
}
printf("I= %f\n", S);
}

double f(double x)
{
double y;
y=x*x;
return(y);
}

また、右端点則、中点則、台形則、もわかりません・・
助けてください!!

管理人

Re:積分

#2

投稿記事 by 管理人 » 17年前

単に細かく長方形を区切る方法なら簡単ですよ。

こちら、y=--x^2+25のyの正の領域を求めるプログラムです。
#include<stdio.h> 
int main(){
	double x,S=0;
	for(x=-5.0;x<=5.0;x+=0.01)
		S+=(-x*x+25)*0.01;
	return 0;
}

さっさ

Re:積分

#3

投稿記事 by さっさ » 17年前

課題では右端点則、中点則、台形則、左端点則のそれぞれの求め方で、
誤差を比較しなくてはいけないんです・・・

管理人

Re:積分

#4

投稿記事 by 管理人 » 17年前

↑クリックで画像拡大↑


えぇと、台形則は名前からしてだいたい想像つくんですけど、

左端点則、中点則、右端点則は、順番に画像のような考え方でいいのでしょうか?

今は、今いる地点から右に0.01ずらして長方形を作っていますから、それを左にずらすとか・・。

いやそれでは同じ計算結果になってしまう・・。

その法則の考え方を教えてもらえませんか?

管理人

Re:積分

#5

投稿記事 by 管理人 » 17年前

では、はっきりわかっている台形則から。

台形の求め方はわかりますよね?

(上底+下底) * 高さ /2

これを普通にたしていけばいいでしょう。

( f(x_n)+f(x_n+1) ) * 自分で指定した刻み幅 / 2

を刻んだ分だけ足していけばいいでしょう。

先ほどのサンプルのループの中をこのように変えるだけで出来るはずです。

管理人

Re:積分

#6

投稿記事 by 管理人 » 17年前

プログラムの最初に

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

#define PI 3.1415926
#define NUM 0.001

これを書いておいてください。
NUMは刻み幅です。PIは円周率です。mathはsin関数を求める為に必要です。

ここで、sin波のπまでの面積を求めてみましょう。
台形則で書くとこんな感じになります。
int main(){
	double x,S=0.0;
	for(x=0.0;x<=PI;x+=NUM)
		S += (sin(x)+sin(x+NUM))*NUM/2;
}
さっき言った通りのアルゴリズムです。
難しくないですよね?
どこかわからない箇所があれば言ってください。

さっさ

Re:積分

#7

投稿記事 by さっさ » 17年前

返事が遅れてすいません・・・
左端点則、中点則、右端点則は画像の考え方であっています!!
台形則はわかりました!!ありがとうございます!

左端点則、中点則、右端点則は具体的にどのようなプログラムを作ればよいのですか?

管理人

Re:積分

#8

投稿記事 by 管理人 » 17年前

いや、画像の方法では全部同じ値になってしまうんですよ。
例えば先ほどの画像の分割した面積を左から1、2、3、とすると

全部面積は
1+2+3になってしまいます。
私の想像する方法とは違う方法で計算をするんじやないかと思いますがもし

私の理論であってるから簡単ですよ。台形の方がよっぽど難しいですし台形のプログラムが理解できたのならそれを
元に自分で考えて見てください。
たった一、二行程度の計算式ですから

さっさ

Re:積分

#9

投稿記事 by さっさ » 17年前

がんばってやってみます!
ありがとうございました!!

閉鎖

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