質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

1回答

1832閲覧

オイラー法の問題について

fadss

総合スコア11

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

1クリップ

投稿2017/07/10 06:27

オイラー法というのを勉強しており、dx/dt=2xのような基礎的な問題は以下のプログラムの場合は、

# include <stdio.h> main() { double t=0; double dt=0.1; double x=1; double dx; printf("%lf %lf\n", t, x); for(t=dt; t<=1; t=t+dt){ dx=2*x*dt; x=x+dx; printf("%lf %lf\n", t, x); } }

のように解けたのですが、下記の問題の解き方がわかりません。
dy/dx=e^-sinx - ycosx ,y(0)=2 ,終点xn=4π ,刻み幅は分割数n=64に対して均等 ,解析解y(x)=(x+2)e^-sinx よりオイラー法を適用するプログラムを作成する場合どのようにすればよいのかわかりません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

こんなもんじゃないでしょうか。
三角関数とべき乗関数を使うためにmath.hをインクルードしてください。

C

1# include <stdio.h> 2main() 3{ 4 double x=0; 5 double dx=終点 / 分割数; // dxは刻み幅 6 double y=初期値; 7 double dy; 8 9 for(x=dx; x<=終点; x=x+dx){ 10 dy=導関数 * dx; 11 y=y+dy; 12 printf("%lf %lf\n", x, y); 13 } 14}

見た目が難しそうなだけで、基礎問題と全く一緒です。


pashango2さんに指摘していただいた通り、ネイピア数のべき乗にはexp関数を使えます。
そっちの方が意味合いが明確でクールですね。
計算速度的にもひょっとしたら最適化されていたりする...かも?
とりあえず使わない理由はないです。

投稿2017/07/10 06:41

編集2017/07/11 11:09
LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pashango2

2017/07/11 10:14

ちなみにeはネイピア数ですね、expとかも使いそうですね。
LouiS0616

2017/07/11 11:06

あ、たしかに...解答に追記させていただきます。 お恥ずかしいことに、M_Eとpowで強引に突破する方法しか考えていませんでした。 ご指摘ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問