我想知道如何将此代码从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;
我有欧拉方法将R代码是
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代码,是否需要改变欧拉法(R代码)H与(b - 一)/n将欧拉代码修改为中点法?
@Sardar乌萨马,我想修改欧拉代码到中点方法。我在R中添加了欧拉代码。我在Matlab中找到了一个用于中点方法的代码,因此我正在寻找将其转换为R的方法。 – david
中点方法属于更广泛的龙格库塔方法类。看看'deSolve'软件包。 'rkMethod'的参考以及其中一个小插曲演示了如何定义一个应用中点方法的函数:https://cran.r-project.org/web/packages/deSolve/index.html –