学校の課題で
y=f(x) の変数xの区間 a<=x<=bの定積分の計算をやるためのプログラムをPostScript言語で書けという課題が出ました。
関数をfとし、台形則か中点則を使うとよい と書かれているのですが、数学が苦手で定積分の解き方すら理解できていません。
どのようにプログラミングすればいいのか、詳しくて大まかな手順と、プログラミングができた際に正しいか確認するための数字をいくつか、教えていただけないでしょうか?
手順と ○○と入力して実行すると××という結果が出る というのをいくつかお願いします
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
中点則と台形則さらにガウス・ルジャンドル積分を用いて数値積分を行い横軸に必要な点数、縦軸に積分結果をとったグラフを書かせてみました。
ガウス・ルジャンドル積分の優秀さが分かります。どの色がどのグラフかはソースを見てください。以下ソース:
%!PS-Adobe-2.0
100 dict begin
% f(x)の定義
% 例としてf(x)=x^2
/F {
/X exch def
X dup mul
} def
% 積分範囲の定義
% 例として0から1
/Start 0 def
/End 3 def
% 区間幅を計算するマクロ
/Span { End Start sub Imax div } def
% 分割数を引数に中点則で数値積分
/Integ {
10 dict begin
% 微小区間への分割数の定義
/Imax exch def
0
Start Span 2 div add Span End Span 2 div sub { F add } for
Span mul
end
} def
% 分割数を引数に台形則で数値積分
/Integ_daikei {
20 dict begin
% 微小区間への分割数の定義
/Imax exch def
0
Start Span End Span sub {
/XI exch def
XI F XI Span add F add Span mul 2 div add
} for
end
} def
% ガウス・ルジャンドル積分
% n=2
/Integ_gauss_2 {
30 dict begin
/UI 0.577350269189626 def
/KX End Start sub 2 div def
/KF { KX mul Start End add 2 div add F } def
UI KF -1 UI mul KF add
KX mul
end
} def
% n=3
/Integ_gauss_3 {
40 dict begin
/UI 0.774596669241483 def
/KX End Start sub 2 div def
/KF { KX mul Start End add 2 div add F } def
UI KF -1 UI mul KF add 0.5555555555555556 mul
0.0 KF 0.888888888888889 mul add
KX mul
end
} def
% n=4
/Integ_gauss_4 {
50 dict begin
/KX End Start sub 2 div def
/KF { KX mul Start End add 2 div add F } def
/U1 0.861136311594053 def
/U2 0.339981043584856 def
U1 KF -1 U1 mul KF add 0.347854845137454 mul
U2 KF -1 U2 mul KF add 0.652145154862546 mul add
KX mul
end
} def
% n=5
/Integ_gauss_5 {
60 dict begin
/KX End Start sub 2 div def
/KF { KX mul Start End add 2 div add F } def
/U1 0.906179845938664 def
/U2 0.538469310105683 def
U1 KF -1 U1 mul KF add 0.236926885056189 mul
U2 KF -1 U2 mul KF add 0.478628670499366 mul add
0 KF 0.568888888888889 mul add
KX mul
end
} def
/inch { 72 mul } def
/cm { inch 2.54 div } def
% main
gsave
mark
1 cm 1 cm scale
0 setlinewidth
/tx 1 def
tx tx Integ moveto
(tyuten) =
tx Integ =
9 { /tx tx 1 add def tx tx Integ lineto tx Integ = } repeat
1 0 0 setrgbcolor
stroke
/tx 1 def
tx 1 add tx Integ_daikei moveto
(daikei) =
tx Integ_daikei =
8 { /tx tx 1 add def tx 1 add tx Integ_daikei lineto tx Integ_daikei = } repeat
0 1 0 setrgbcolor
stroke
(gauss) =
2 Integ_gauss_2 moveto
Integ_gauss_2 =
3 Integ_gauss_3 lineto
Integ_gauss_3 =
4 Integ_gauss_4 lineto
Integ_gauss_4 =
5 Integ_gauss_5 lineto
Integ_gauss_5 =
0 0 1 setrgbcolor
stroke
0 9 moveto
10 9 lineto
0 0 0 setrgbcolor
stroke
1 1 cm div 1 1 cm div scale
cleartomark
end
grestore
showpage
No.5
- 回答日時:
>PSで書かせるというのと質問のレベルにギャップがありすぎるから
全然ギャップないように思うのは
普段,手書きでPSもしてるからかな(苦笑).
RPNはそれなりに楽しい.
#ドライバに引き渡されるPSのライブラリを自前で直すという
#比較的不毛な作業が存在したりする・・・・
No.4
- 回答日時:
別に誰もPSでプログラムが書けないなんて書いてないんだけどねえ。
PSで書かせるというのと質問のレベルにギャップがありすぎるから
確認したんだけど。
まあいいや。
No.3
- 回答日時:
PostScriptは
単に「表示系」が「印刷向け」というだけで
印刷専用言語ではないです.
PostScriptで書かれたhttpサーバとかライフゲームまであるくらい(笑).
さてさて・・・それにしても
マニアックな課題というか,
確かにスタックの挙動を見るにはいいのかも.
それとPSの処理系として何を使ってますか?
たぶん,GhostScriptですかね
丸投げで削除されるかもしれないけどね.
うんじゃ,取りあえず簡単なものだけ
y=x^2 で[0,1]でn分割,分点として下端をとって
下積分でも計算しますか
/f { dup mul } def
/int {
/n exch def
/I 0 def
0 1 n 1 sub
{ n div f 1 n div mul I add /I exch def} for I
} def
100 int %100分割
1000 int %1000分割
局所変数とか辞書とかいろいろ使って
もっと汎用的にしてください.
No.2
- 回答日時:
PostScriptは一応チューリング完全なので課題で出たことも出来ます。
中にはPostScriptで別の言語のインタープリタを作った方までいます。http://blog.bugyo.tk/lyrical/2008/01/_o_lisppost …
で、PostScriptである理由はスタック型の言語の代表として出たのではないかと思います。
次に定積分ですが、高校で習うような式変形はコンピューター上では行いにくいので積分区間を微小区間に区切り微小区間を台形や長方形で近似しその面積の総和をその区間における積分とする数値積分を行います。台形則や中点則は数値積分の手法です。台形則は微小区間を台形で近似し中点則は長方形で近似します。
中点則で行くと
F(x)=rΣf(x_i)
となります。ここでrは微小区間の区間幅、x_iは微小区間のi番目における中点のx座標です。
後はこれをリファレンス片手にPostScriptに落とし込んでください。
No.1
- 回答日時:
>詳しくて大まかな手順と
詳しいのか、大まかなのかどっち?w
それと、PostScriptってプリンタとかディスプレイに
図形を描画するためのもの(文字も「描画」する)なので
>プログラミングができた際に正しいか確認するための数字をいくつか
問題文に見落としがあるような気がします。
あるいは前提条件があるとか。
それにしたって PostScriptなんて普通は手書きのプログラムで使うものじゃないから
回答を教えてくれといってもできる人がいないんじゃないかなあ。
丸投げもいいところだし。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) プログラミングって本来数学的な計算をする為のものではないのですか? 学校で配られたFortran90 11 2022/08/25 22:14
- その他(プログラミング・Web制作) パイソンのプログラミングについての質問です 2 2023/05/22 12:39
- C言語・C++・C# C言語 3 2022/10/04 15:07
- 高校受験 あと3ヶ月で偏差値10上げる方法を教えてください 3 2022/12/16 19:14
- 数学 旧帝大の数学は抽象的、例えば微分積分でもf(x)がやたら出てきますが、工業大学の数学は具体的な計算、 5 2022/10/05 16:04
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- 高校 勉強ができない。 4 2022/07/03 08:13
- 大学受験 自己推薦書の添削や意見・アドバイスお願いします 2 2022/08/27 19:34
- 数学 原始関数の存在性の証明について 数学科の3回生です。院試の勉強でつまづいたので助けてほしいです。 R 6 2022/11/13 19:19
- 数学 大変基本的な質問過ぎて恐縮なのですが教えてください。高校数学の微積分の勉強をするなかで、度々耳にする 5 2022/03/31 14:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パイソンのクラス
-
Rubyについて質問です
-
No route matches [GET] "/post...
-
pythonのerrorコード
-
classのdelete
-
What class are you in? には何...
-
HSTLやSSTL等のI/Oピン
-
get() と find() の違いについて
-
エクセルVBA オートフィルタで...
-
「arg」は何の略?
-
メソッド定義の構文のdefって
-
教えてください。vb5.0
-
クエリーストリングとは?
-
RubyでバイナリデータをIOスト...
-
Rubyの超初心者です。「戻り値r...
-
cos波表示について マクローリ...
-
実行時エラー450:引数の数が一...
-
エラー「メソッドまたはデータ...
-
Csvファイルの最終行を取得する...
-
ぱいソン
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
pythonのerrorコード
-
What class are you in? には何...
-
パイソンのクラス
-
No route matches [GET] "/post...
-
クラス名やモジュール名の競合...
-
Rubyについて質問です
-
変数の隠蔽とは?
-
HSTLやSSTL等のI/Oピン
-
クラスの再定義について(C++)
-
redirect先でredirect元の変数...
-
Ruby ハッシュ継承クラス、作成...
-
classのdelete
-
PostScript言語で定積分の計算
-
Rubyの質問です
-
class roomとclassroom どちら...
-
テンプレートの特殊化でコンパ...
-
get() と find() の違いについて
-
「arg」は何の略?
-
エラー「メソッドまたはデータ...
-
教えてください。vb5.0
おすすめ情報