【发布时间】:2015-01-12 23:24:41
【问题描述】:
我正在尝试在 matlab 中实现有限差分法。我做了一些计算,当我知道y(1) 和y(n+1) 时,我得到y(i) 是y(i-1) 和y(i+1) 的函数。但是,我不知道如何实现这一点,因此y 的值会以正确的方式更新。我尝试使用 2 fors,但它不会那样工作。
编辑 这是脚本,结果不对
n = 10;
m = n+1;
h = 1/m;
x = 0:h:1;
y = zeros(m+1,1);
y(1) = 4;
y(m+1) = 6;
s = y;
for i=2:m
y(i) = y(i-1)*(-1+(-2)*h)+h*h*x(i)*exp(2*x(i));
end
for i=m:-1:2
y(i) = (y(i) + (y(i+1)*(2*h-1)))/(3*h*h-2);
end
等式是: y''(x) - 4y'(x) + 3y(x) = x * e ^ (2x), y(0) = 4, y(1) = 6
谢谢。
【问题讨论】:
-
为什么不将新时间步的值计算到单独的向量中?
-
当第一次迭代既不是 y(i-1)(也就是 y(0),但在 MATLAB 中不能用 0 索引,它使用 1- 时,该循环应该如何工作?基于索引)也没有定义 y(i+1)(即 y(2))?
-
是的...实际上,for 来自 2
-
查看循环的第一次迭代,您的索引 i 将取值 1。然后您尝试从 y(0) 和 y(2) 中计算该值。但是 y(0) 在 MATLAB 中没有定义,因为 MATLAB 中任意向量的第一个值的索引为 1。
-
你能指定你想用这个方法求解的微分方程吗?
标签: matlab differential-equations