如何在MATLAB中增加步长?

如何在MATLAB中增加步长?,matlab,Matlab,在我的计算课程中,我被要求用欧拉方法解一个常微分方程。 我的代码正在运行,但现在有人问我以下问题: 根据N=100200400800….增加N的次数。。。。因此,您可以获得答案y100、y200、y400、y800 这是我的密码: function [xar,yar] = eulsol(a,b,ybouco,N) h=(b-a)/N; T=a:h:b; y(1)=ybouco; for i = 100:N f(i) = -8*y(i) + 0.5*T(i) + (1/16); y

在我的计算课程中,我被要求用欧拉方法解一个常微分方程。 我的代码正在运行,但现在有人问我以下问题:

根据N=100200400800….增加N的次数。。。。因此,您可以获得答案y100、y200、y400、y800

这是我的密码:

function [xar,yar] = eulsol(a,b,ybouco,N)
h=(b-a)/N;
T=a:h:b;
y(1)=ybouco;
for i = 100:N
    f(i) = -8*y(i) + 0.5*T(i) + (1/16);
    y(i+1) = y(i)+h*f(i);
end
xar=T;
yar=y;
end

有人能帮我在MATLAB中获得一个很好的表格吗?它显示了数组x和y,根据增加的N 100200400800…?

让我们定义K为步数。在您的示例中,K=4 N=100200400800。如果N=10020040080016003200,则K=6

注意,N的第i个元素对应于100*2^i-1:

i = 1 => N = 100 * 2^(1-1) = 100
i = 2 => N = 100 * 2^(2-1) = 200
i = 3 => N = 100 * 2^(3-1) = 400
等等

因此,如果要计算N=100200400800,则代码应为:

function [xar,yar] = eulsol(a,b,ybouco,K)
N_max = 100 * 2^(K-1)
h=(b-a)/N_max;
T=a:h:b;
y(1)=ybouco;
for i = 1:K
    N = 100 * 2^(i-1)
    f(N) = -8*y(N) + 0.5*T(N) + (1/16);
    y(N+1) = y(N)+h*f(N);
end
xar=T;
yar=y;
end
如果要在for循环中创建正确的N,这个答案是正确的,但是您应该检查您的代码!如你所见:对于i=1,你有N=100,要计算F100,你需要y100,但你没有y100,只有y1。 也许正确的答案是Fi=-8*yi+0.5*TN+1/16; 但是,又一次,想要是TN吗


正如@Argyll所指出的,请解释你想要什么,你不应该期望人们从错误的代码中理解你的问题。

让我们将K定义为步骤数。在您的示例中,K=4 N=100200400800。如果N=10020040080016003200,则K=6

注意,N的第i个元素对应于100*2^i-1:

i = 1 => N = 100 * 2^(1-1) = 100
i = 2 => N = 100 * 2^(2-1) = 200
i = 3 => N = 100 * 2^(3-1) = 400
等等

因此,如果要计算N=100200400800,则代码应为:

function [xar,yar] = eulsol(a,b,ybouco,K)
N_max = 100 * 2^(K-1)
h=(b-a)/N_max;
T=a:h:b;
y(1)=ybouco;
for i = 1:K
    N = 100 * 2^(i-1)
    f(N) = -8*y(N) + 0.5*T(N) + (1/16);
    y(N+1) = y(N)+h*f(N);
end
xar=T;
yar=y;
end
如果要在for循环中创建正确的N,这个答案是正确的,但是您应该检查您的代码!如你所见:对于i=1,你有N=100,要计算F100,你需要y100,但你没有y100,只有y1。 也许正确的答案是Fi=-8*yi+0.5*TN+1/16; 但是,又一次,想要是TN吗


正如@Argyll所指出的,请解释你想要什么,你不应该期望人们从错误的代码中理解你的问题。

你可以创建一个向量Nvect=[100200400800],然后在for i循环中一次选择一个向量元素。或者,您可以使用索引,例如i_old和i_new,i_new=i_old*2,从值100开始。@marsei谢谢!但是在我的代码中应该把索引代码i_new=i_old*2放在哪里呢?在我的for循环中?正如我的一位教授曾经说过的那样,要有创造力——这是你的任务。祝你好运,你为什么从100岁开始?y00是什么?你说你的代码可以运行。但它能给出正确的结果吗?请进一步解释你的问题。请评论你的代码。请不要认为别人应该通过逐行阅读来理解你的程序是有资格的。绝对不要这样对待你未来的同事。所以不是一个家庭作业帮助网站。我可以向你保证,没有人急于为你完成任务。然而,我相信很多人很乐意帮助您了解更多关于在matlab上实现数值方法的知识。据我所知,你的问题与matlab无关。你可以创建一个向量Nvect=[100200400800],然后在for I循环中一次选择一个向量元素。或者,您可以使用索引,例如i_old和i_new,i_new=i_old*2,从值100开始。@marsei谢谢!但是在我的代码中应该把索引代码i_new=i_old*2放在哪里呢?在我的for循环中?正如我的一位教授曾经说过的那样,要有创造力——这是你的任务。祝你好运,你为什么从100岁开始?y00是什么?你说你的代码可以运行。但它能给出正确的结果吗?请进一步解释你的问题。请评论你的代码。请不要认为别人应该通过逐行阅读来理解你的程序是有资格的。绝对不要这样对待你未来的同事。所以不是一个家庭作业帮助网站。我可以向你保证,没有人急于为你完成任务。然而,我相信很多人很乐意帮助您了解更多关于在matlab上实现数值方法的知识。据我所知,你的问题与matlab无关。