![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
これをもとにf(x)=loge(4x²+1)の[0,1/2]の定積分を近似するプログラミングを台形公式を使い書け
var n = WScript.StdIn.ReadLine();
n = Number(n);
var a = 0;
var b = Math.PI;
var intv = [a,b];
var approx = trapezoid_approx(Math.sin,intv,n);
var exact = -Math.cos(b) + Math.cos(a);
WScript.Echo("近似値: " + approx);
WScript.Echo("厳密値: " + exact);
function trapezoid_approx(f, intv, n){
var delta = (intv[1]-intv[0])/n;
var approx = 0;
var left = intv[0];
var right = left + delta;
for(var i=0; i < n; i++){
approx += delta*(f(left) + f(right))/2;
left += delta;
right += delta;
}
return approx;
}
No.2ベストアンサー
- 回答日時:
個人的には良い問題だ、と思う。
ネタ的には高階関数、つまり関数を引数を取る関数の問題、だ。
ただ、このコード自体は一般的なJavaScriptの関数「じゃない」ブツが混じってる。
環境は分かんないんだけど、恐らくWindowsで、VBScriptとやり取りする独自拡張の何かが入ってるんだよな。
冒頭の
> var n = WScript.StdIn.ReadLine();
とか、出力の
> WScript.Echo("近似値: " + approx);
> WScript.Echo("厳密値: " + exact);
がそれら、だ。
ただ、これは責められない。
っつーのもJavaScriptには入出力がない、んで、「なんかの助けがない」と入出力ができない。
後者はフツーのJSのプログラムだとconsole.logと言うWeb APIを使ったりするケースだろう。
当然、console.logもJavaScript本体の機能じゃない。
だから、入出力が絡むとJavaScriptの一般論は話しづらくなる。
参考までに、Node.jsと言うサーバーサイドJS環境をスタンドアロン処理系として使えば与題がどう書けるか、と言うのを挙げておく。
Node.jsによる実装例:
https://www.ideone.com/cZM4wR
さて、与題のコードのtrapezoid_approxを見てみる。
trapezoid_approxは3つ引数を取り、それらはf、 intv、 nだ。
fは与える関数、intvは定積分の為の区間、nは区間分割数だ。
この3つを変えるだけで色んな区間で、望みの分割数でfとx軸が織りなす図形の面積を求める事が出来る。
よって、trapezoid_approxは高階関数で、既に汎用的な定積分の為のプログラムだ。
従ってこれを弄る必要はない。
そっちじゃなくって、「定積分をする区間」と、「どういった関数を与えるのか」を作らなアカンのだけど、高校卒業した知識があればさして難しい問題じゃない筈だ。
関数trapezoid_approxにお題に従って与える関数は「f(x)=loge(4x²+1)」と指定されてる以上、
function fn(x) {
return Math.log(4 * x * x + 1);
}
になる。
積分区間に付いても
> [0,1/2]の定積分
って書いてるんで
var a = 0;
var b = 1/2;
var intv = [a,b];
となるだけ、だ。
従って近似値の算出は
var approx = trapezoid_approx(fn,intv,n);
とならざるを得ない(nは入力から与えられる)。
厄介なのはむしろ厳密値の計算だろう。
要するに学校で習ってる通り、f(x)=loge(4x²+1)の積分ができないとならない。手計算で。出来る?
一応不定積分の答えを書いておくと
F(x) = Const. + x*loge(4*x^2+1)+atan(2*x)-2*x
だ。
つまり、JavaScriptでこいつもプログラムしとかないとなんない。
function Fn(x) {
return x * Math.log(4 * x * x + 1) + Math.atan(2 * x) - 2 * x;
}
これを使えば定積分の数学的解はJavaScriptでは次のように記述出来る。
var exact = Fn(b) - Fn(a);
以上。
![「台形公式」の回答画像2](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/6/525078_63a419e56f33a/M.png)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 定積分の近似値を計算する関数composite_newton_cotesをつくりたい 1 2023/01/18 14:09
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- オープンソース Coinmarketcap api 1 2022/05/30 15:47
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- JavaScript gasについて 1 2022/05/31 21:51
- JavaScript javascriptでテーブルに追加した項目のid追加してローカルストレージを操作したい 5 2023/01/01 15:52
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- Ruby vscode 文字化け 1 2022/05/21 19:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#OpenCv V4にのエラーに関する...
-
GASでundefinedエラーが出ます
-
googleスプレッドシートのApps ...
-
シンプルなweb版スタンプラリー...
-
テーブルセル内のinput要素のna...
-
ドラッグでセルを選択した後に
-
特定のclassを表示、非表示にする
-
google apps scriptの終了のさせ方
-
正規表現について質問です。条...
-
C#で、ContextMenuStripに動的...
-
C# 演算 分岐処理 繰り返し処理
-
javaScriptのコードの修正をお...
-
ローカルにあるファイルを検索...
-
Jscriptからのオープン
-
javaScript textareaの一行あた...
-
gas スプレッドシートがアクテ...
-
VSCODE[Python]の設定について
-
メールフォームの日付入力フォ...
-
翌月を取得するGASが分かりません
-
javascriptカウントタイマー設...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
google apps scriptの終了のさせ方
-
C#OpenCv V4にのエラーに関する...
-
なぜmatchメソッドがエラーにな...
-
GASでundefinedエラーが出ます
-
ジェネレーターの作り方
-
html javascript リンク先アド...
-
gas スプレッドシートがアクテ...
-
翌月を取得するGASが分かりません
-
ASP.NETのコントロールの値をJa...
-
C# 演算 奇数と偶数 表現の仕方
-
javascriptでiframeのURL変更は?
-
C#で、ContextMenuStripに動的...
-
ASP.NET MVCでObjectをjsに渡す
-
1日1回引けるJavaScriptおみく...
-
javascriptでテーブルに追加し...
-
JavaScriptを使って毎日決まっ...
-
googleスプレッドシートのApps ...
-
JavaScriptで文字列の特定文字...
-
アクセス時からのカウントダウ...
-
ローカルにあるファイルを検索...
おすすめ情報