查看: 100|回复: 3|关注: 0

[已解决] 关于ode求微分方程组数值解的问题

[复制链接]

新手

7 麦片

财富积分


050


3

主题

5

帖子

0

最佳答案
这个微分方程组初值是0,a和n的值需要每次定义,第二张图片是我现在用的子函数,但是因为每次n取值不一样,每次都要编写新的方程,有什么比较方便的方法可以解这个微分方程组????

微分方程组

微分方程组

子函数

子函数

论坛优秀回答者

权威

4180 麦片

财富积分



4

主题

4345

帖子

914

最佳答案
  • 关注者: 207
发表于 2020-3-24 09:27:03 | 显示全部楼层 |此回复为最佳答案
function dy = odefun(t,y,a,n)
dy=zeros(n,1);
dy(1)=a*(35-2*y(1)+y(2));
for i=2:n-1
dy(i)=a*(y(i-1)-2*y(i)+y(i+1));
end
dy(n)=a*(y(n-1)-y(n));

a=2;n=6;
[t,y]=ode45(@(t,y)odefun(t,y,a,n),[0 5],zeros(1,n));

新手

7 麦片

财富积分


050


3

主题

5

帖子

0

最佳答案
 楼主| 发表于 7 天前 | 显示全部楼层
maple1314168 发表于 2020-3-24 09:27
function dy = odefun(t,y,a,n)
dy=zeros(n,1);
dy(1)=a*(35-2*y(1)+y(2));

谢谢,解了我饿燃眉之急,还有个问题,计算步长[0,5]这个一般怎么取????

新手

7 麦片

财富积分


050


3

主题

5

帖子

0

最佳答案
 楼主| 发表于 7 天前 | 显示全部楼层
maple1314168 发表于 2020-3-24 09:27
function dy = odefun(t,y,a,n)
dy=zeros(n,1);
dy(1)=a*(35-2*y(1)+y(2));

大神,看我这段程序有什么问题吗?意图是从u中取出最后一行的行数,然后进行v的循环计算,最后把v中的最后一行第d列的元素放入矩阵U中,运行结果总显示“数组索引必须为正整数或逻辑数”,应该怎么改???
for n=1:1:372
    u0=zeros(n,1);
    t_end=10000;
    b=round(372/n);
    a=0.154/b;
    u(0)=zeros(n,1);
    u(n)=ode23('odefun21',[0,t_end],u0);
    c=size(u,1);
    for i=1:1:n
    v(i)=35-u(c,i);
    end
    d=round(93/b);
    U=v(end,d);
end
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表