このコードをMatlabからRコードにどのように変換できるのでしょうか。これは中点法のコードだと思われる。どんな助けも高く評価されます。matlabコードをRコードに変換する
% Usage: [y t] = midpoint(f,a,b,ya,n) or y = midpoint(f,a,b,ya,n)
% Midpoint method for initial value problems
%
% Input:
% f - Matlab inline function f(t,y)
% a,b - interval
% ya - initial condition
% n - number of subintervals (panels)
%
% Output:
% y - computed solution
% t - time steps
%
% Examples:
% [y t]=midpoint(@myfunc,0,1,1,10); here 'myfunc' is a user-defined function in M-file
% y=midpoint(inline('sin(y*t)','t','y'),0,1,1,10);
% f=inline('sin(y(1))-cos(y(2))','t','y');
% y=midpoint(f,0,1,1,10);
function [y t] = midpoint(f,a,b,ya,n)
h = (b - a)/n;
halfh = h/2;
y(1,:) = ya;
t(1) = a;
for i = 1 : n
t(i+1) = t(i) + h;
z = y(i,:) + halfh * f(t(i),y(i,:));
y(i+1,:) = y(i,:) + h * f(t(i)+halfh,z);
end;
Iは
euler <- function(f, h = 1e-7, x0, y0, xfinal) {
N = (xfinal - x0)/h
x = y = numeric(N + 1)
x[1] = x0; y[1] = y0
i = 1
while (i <= N) {
x[i + 1] = x[i] + h
y[i + 1] = y[i] + h * f(x[i], y[i])
i = i + 1
}
return (data.frame(X = x, Y = y))
}
ので、MATLABコードに基づいて、私は(B - A)にオイラー法(Rコード)でHを変更する必要がないであるオイラー法のためのRコードを有します/ nを使用して、オイラーコードをmidpointメソッドに変更しますか?
@Sardarウサマ・、オイラーコードをmidpointメソッドに変更したい。 Rにオイラーコードを追加しました。Matlabの中点メソッドのコードを見つけましたので、それをRに変換する方法を探していました。 – david
中点メソッドは、より広いクラスのRunge-Kuttaメソッドに属しています。 'deSolve'パッケージを見てください。 'rkMethod'のリファレンスとビネットの1つは、midpointメソッドを適用する関数を定義する方法を示します:https://cran.r-project.org/web/packages/deSolve/index.html –