绘制';n';R中具有给定间隔的给定函数之间的大小向量

绘制';n';R中具有给定间隔的给定函数之间的大小向量,r,R,让我把我的问题说清楚,因为我不知道如何恰当地提问(因此我不知道它是否已经得到了回答),我将讨论我的整个问题: 有一个给定的函数(如果重要的话,它是显式一阶微分方程的右侧): 然后有一个从'a'到'b'的给定间隔,这是函数计算的范围,其中有'n'步,因此间隔(dt)中的步长为: 在本例中,“a”始终为0,“b”始终为正,因此“b”始终大于“a”,但我尝试使用泛型 初始条件: yt0=y0 确定向量的计算: yt=vector("numeric",n) for (i in

让我把我的问题说清楚,因为我不知道如何恰当地提问(因此我不知道它是否已经得到了回答),我将讨论我的整个问题:

有一个给定的函数(如果重要的话,它是显式一阶微分方程的右侧):

然后有一个从'a'到'b'的给定间隔,这是函数计算的范围,其中有'n'步,因此间隔(dt)中的步长为:

在本例中,“a”始终为0,“b”始终为正,因此“b”始终大于“a”,但我尝试使用泛型

初始条件:

yt0=y0
确定向量的计算:

yt=vector("numeric",n)


for (i in 1:(n-1)) 
{

yt[1]=f(0,yt0)*dt+yt0

yt[i+1]=(f(dt*i,yt[i]))*dt+yt[i] 
} 
创建的向量为“n”长,但这是从“a”到“b”区间之间微分方程的近似解。我的问题来了:

当我尝试将它与精确解一起绘制时(使用deSolve),它并不精确。向量的值是准确的,但它不知道这些值属于介于区间“a”到“b”之间的近似函数

这就是为什么精确解和近似解的图形根本不匹配的原因。我觉得筋疲力尽,所以我可能无法恰当地描述我的问题,但有解决办法吗?使其意识到其值在“x”轴上的“a”和“b”之间,而不是在“1”和“n”之间? 我提前感谢大家的回答

我使用的deSolve行(关于“b”大于“a”):


我试图重建使用循环的“近似”解决方案(实际上是Euler方法)与使用packagedeSolve的解决方案之间的比较。默认情况下,它使用比Euler方法更精确的
lsoda
解算器,但它当然也是近似值(默认相对和绝对公差设置为1e-6)

由于问题遗漏了一些具体值和绘图函数,因此不清楚原始问题在哪里,但以下示例可能有助于重新表述问题。我假设问题可能是两种方法之间的
t
(绝对时间)和
dt
混淆。将标记为“原始代码”的行与“建议”进行比较:

库(deSolve)
f=函数(t,y){
-2*y+3*t
}
##一些价值观

y0我试图重建使用循环的“近似”解决方案(实际上是Euler方法)与使用packagedeSolve的解决方案之间的比较。默认情况下,它使用比Euler方法更精确的
lsoda
解算器,但它当然也是近似值(默认相对和绝对公差设置为1e-6)

由于问题遗漏了一些具体值和绘图函数,因此不清楚原始问题在哪里,但以下示例可能有助于重新表述问题。我假设问题可能是两种方法之间的
t
(绝对时间)和
dt
混淆。将标记为“原始代码”的行与“建议”进行比较:

库(deSolve)
f=函数(t,y){
-2*y+3*t
}
##一些价值观

y0你是说你得到了正确的y值,但是他们水平移动,因为你不能得到正确的x值?如果是这样的话,将您用于绘图的代码精确地显示出来会很有帮助。我的绘图并不复杂,它是(没有任何装饰):绘图(ddf)线(yt)这里一定有我可以做的事情,但我不确定是什么。所以我基本上是要求绘制想法。你是说你得到了正确的y值,但是它们水平移动,因为你不能得到正确的x值?如果是这样的话,将您用于绘图的代码精确地显示出来会很有帮助。我的绘图并不复杂,它是(没有任何装饰):绘图(ddf)线(yt)这里一定有我可以做的事情,但我不确定是什么。所以我基本上是在要求构思一些想法。谢谢你,成功了!但是我想确保我完全理解,我只是错过了
中的
t
,或者循环中的更改使
正确?两者是否连接?不确定,因为未显示绘图功能。
for
循环中的变化是两个(1,只是化妆品)移动到循环前面的第1行,以及(2,重要)将
dt*i
替换为
a+dt*i
。谢谢,成功了!但是我想确保我完全理解,我只是错过了
中的
t
,或者循环中的更改使
正确?两者是否连接?不确定,因为未显示绘图功能。
循环的
变化是两个(1,只是化妆品)移动到循环前面的第1行,以及(2,重要)用
a+dt*i
替换
dt*i
yt0=y0
yt=vector("numeric",n)


for (i in 1:(n-1)) 
{

yt[1]=f(0,yt0)*dt+yt0

yt[i+1]=(f(dt*i,yt[i]))*dt+yt[i] 
} 
df = function(t, y, params) list(-2*y+3*t)

t = seq(a, b, length.out = n)

ddf = as.data.frame(ode(yt0, t, df, parms=NULL))