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

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

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

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

関数型プログラミング

関数型プログラミングとは、関数を用いて演算子を構築し、算出し、コンピュータプログラムを構成する枠組みです。

Q&A

解決済

1回答

2429閲覧

VBAプログラミング オイラー法について

torororo

総合スコア6

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

関数型プログラミング

関数型プログラミングとは、関数を用いて演算子を構築し、算出し、コンピュータプログラムを構成する枠組みです。

0グッド

0クリップ

投稿2021/07/25 14:56

VBAプログラミング オイラー法について質問です。

問題は以下です。
dy/dx=3x^2+2x+4をオイラー法によって解きたい。(x0=0のときy0=1)以下のプログラムを参考に、xの刻み幅hを0.5,0.05 0.005と変化させたときのx=1におけるyの近似値yapを求めなさい。

参考プログラム問題として「dy/dx=y/3xをオイラー法によって求める。初期条件はx=1のときy=1とし、x=1~2までを刻み幅h=0.1のm=10個の小区間に分解する。プログラムを実行し、xと数値解yを示しなさい。なお、プログラム実行後、理論解並びに誤差を別に求め、表中に表示しなさい。」が提示されています。
以下はそのプログラムです。

Sub オイラー法()
'変数宣言
Dim x As Single, y As Single, h As Single
Dim i As Integer, m As Integer
'初期値などの入力
x = Range("B1").Value
y = Range("B2").Value
h = Range("B3").Value
m = Range("B4").Value
'繰り返し計算と表示
For i = 0 To m
Cells(7 + i, 1).Value = x
Cells(7 + i, 2).Value = y
y = y + h * DF(x, y)
x = x + h
Next i
End Sub
Function DF(x As Single, y As Single) As Single
DF = y / (3 * x)
End Function

そこでわからない点が、式の形が違うことによって、プログラムをどう書き換えればよいのか、です。
同じような形でプログラムを作る際に、もともとのプログラムにはxとyが含まれていたのとは違い、x^2、xで構成された式になった時のプログラムの書き方を教えていただきたいです。
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

nステップ目のx, yをそれぞれx(n), y(n)とすると、
もとの微分方程式 dy/dx = y/3x では

y(n+1) = y(n) + h * (y(n) / 3x(n))
x(n+1) = x(n) + h

を繰り返し計算して、x(n), y(n)をアップデートしていました。

今度は dy/dx=3x^2+2x+4 なので、h*(...)の部分を書き換えて

y(n+1) = y(n) + h * (3x(n)^2 + 2x(n) + 4)
x(n+1) = x(n) + h

を繰り返し計算します。

なので、Function DFを以下のように書き換えればよいと思います。
前との違いは「引数にyがいらなくなったこと」です。

vba

1Function DF(x As Single) As Single 2DF = 3*x*x + 2*x + 4 3End Function

挙動を確認していないので正解かわかりませんが、

投稿2021/07/25 15:08

moootoko_ojisan

総合スコア32

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

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

torororo

2021/07/25 15:31

ありがとうございます。無事実行できるようになりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問