Я работаю над решением ODE, и мне нужно вычислить ошибку числового решения, вычитая ее из точного решения $ x (t) = e ^ {0.2t} x (0) $.
Я уже рассчитал решение для одного временного шага, но я не могу обойти ошибку "количество заменяемых элементов не кратно длине замены" в моем коде для вычисления ошибки.Я включил свой код как для решения ODE, так и для вычисления ошибки.
#Calculating numeric solution ($$ \frac{dx}{dt} = 0.2 x $$)
fefunction<-function(x){
ans<-0.2*x
return(ans)
}
Tmax<-1 #length of time
dt<-0.1 #time step
numsteps<-Tmax/dt #number of steps
y<-rep(0,numsteps+1) #pre-allocating y
time<-seq(0,Tmax,dt) #setting up time vector
y[1]<-5 #initial value for the numeric solution
for(i in 1:numsteps){
#forward Euler
y[i+1]<-y[i]+dt*fefunction(y[i])
}
print(y[2]) #Numeric solution: 5.1
#calculating exact solution: $x(t) = e^{0.2t}x(0)$
exact<-function(t,x){
ans<-exp(0.2*t)*x
return(ans)
}
Tmax<-1 #length of time
dt<-0.1 #time step
t<-seq(0,Tmax,dt) #setting up time vector
numsteps<-Tmax/dt #number of steps
sol1<-rep(0,numsteps+1) #pre-allocating the solution
sol1[1]<-5 #initial value for the exact solution
for(i in 1:numsteps){
#exact solution
sol1[i+1]<-exact(t,sol1[i])
}
error<-sol1[1]-y[2]
print(error)
Ошибка должна составлять 0,0010067, поскольку точное решение - 5,1010067, а числовое - 5,1.Тем не менее, я получаю сообщение об ошибке «количество заменяемых элементов не кратно длине замены» для моего расчета ошибки, несмотря на наличие векторов одинаковой длины.
Как решить эту проблему?
Спасибо!