Taylorメソッドが実行時に関数のプロンプトを表示できるようにしたいと思います。MATLABのドキュメントで説明されているようにinput(prompt)を使用してみました。問題は、コードで関数が検出されるたびに関数を入力するように求められることです。
function taylorMethod(a, b, h, alpha, order)
f = @(t, y) input('Enter f(t, y): ');
fPrime = @(t, y) input('Enter f''(t, y): ');
taylor2 = @(t, w) f(t, w) + h/2*fPrime(t, w);
if order > 2
f2Prime = @(t, y) input('Enter f''''(t, y): ');
taylor3 = @(t, w) taylor2(t, w) + h^2/factorial(3)*f2Prime(t, w);
if order == 4
f3Prime = @(t, y) input('Enter f''''''(t, y): ');
taylor4 = @(t, w) taylor3(t, w) + h^3/factorial(4)*f3Prime(t, w);
end
end
function res = t(i)
if i == a
res = a;
return;
end
res = h + t(i - 1);
end
idx = a;
for i = a:h:b
fprintf('i = %d; t_i = %.2f; w(i) = %.10f\n', idx, t(idx), w(idx));
idx = idx + 1;
end
function res = w(i)
j = i - 1;
if i == a
res = alpha;
return;
end
if order == 2
res = w(j) + h*taylor2(t(j), w(j));
elseif order == 3
res = w(j) + h*taylor3(t(j), w(j));
elseif order == 4
res = w(j) + h*taylor4(t(j), w(j));
end
return;
end
end
また、ユーザー入力を次のような文字列に保存しようとしました。
fString = input('Enter f(t, y): ', 's');
fPrimeString = input('Enter f''(t, y): ', 's');
f = @(t, y) fString;
fPrime = @(t, y) fPrimeString;
taylor2 = @(t, w) f(t, w) + h/2*fPrime(t, w);
しかし、エラーが発生しました:
+行列の次元の使用エラーは一致する必要があります。
taylorMethod> @(t、w)f(t、w)+ h / 2 * fPrime(t、w)のエラー(13行目)taylor2 = @(t、w)f(t、w)+ h / 2 * fPrime(t、w);
taylorMethod / wのエラー(47行目)res = w(j)+ h * taylor2(t(j)、w(j));
taylorMethodのエラー(35行目)fprintf('i =%d; t_i =%.2f; w(i)=%.10f \ n'、idx、t(idx)、w(idx));
関数を引数として渡さない理由は、異なる順序に同じコードを使用したいためです...そして異なる順序では必要な関数の数が同じではありません。
ユーザーに関数の入力を1回プロンプトし、再度プロンプトを表示せずに関数全体を使用する方法はありますか?