欧拉';MATLAB中的s方法:代码不';行不通
在我的计算机课程中,我被赋予以下功能:欧拉';MATLAB中的s方法:代码不';行不通,matlab,ode,Matlab,Ode,在我的计算机课程中,我被赋予以下功能: y'(x)=-8y(x)+0.5x+1/16,初始值为y(0)=2 现在,我被要求在MATLAB中用欧拉方法求解这个方程 我的代码应该给出两个数组的输出:xar和yar,其中我看到了x-值和y-值,但是,如果我运行代码,它会说:“未定义的变量x”。这是我的密码: function [xar,yar] = Euler(a,b,ybouco,N) % a is the lower limit % b is the upper limit % ybouco i
y'(x)=-8y(x)+0.5x+1/16
,初始值为y(0)=2
现在,我被要求在MATLAB中用欧拉方法求解这个方程
我的代码应该给出两个数组的输出:xar
和yar
,其中我看到了x
-值和y
-值,但是,如果我运行代码,它会说:“未定义的变量x”。这是我的密码:
function [xar,yar] = Euler(a,b,ybouco,N)
% a is the lower limit
% b is the upper limit
% ybouco is the initial value
% N is the number of intervals
a=0;
b=3;
ybouco=2;
N=10;
h=(b-a)/N;
T=a:h:b;
y(1)=ybouco;
f = @(x) -8*y(x) + 0.5x + (1/16);
y(x) = 2*exp(-8*x)+(1/16)*x;
for i = 1:N
y (i+1) = y(i)+h*f(T(i));
end
end
有人能解释一下我的代码有什么问题吗?首先,请注意,在函数块中指定参数是错误的!(即
a
、b
、ybouco
和N
)应通过调用函数通过参数传递。除了在脚本中手动分配参数外,编写由用户分配的参数没有任何用处
一种方法是调用函数并在命令窗口中指定值,如下所示:
function [xar,yar] = Euler(a,b,ybouco,N)
h=(b-a)/N;
T=a:h:b;
y(1)=ybouco;
for i = 1: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
[x,y]=Euler(0,3,2,10)
其中,a=0
,b=3
,ybouco=2
和N=10
作为输入传递给函数,函数作为输出返回x
和y
另外,当你在数值上求解一个常微分方程时,这意味着你不知道解析的y
因此,您应该省略代码的赋值部分,并进行如下的小更改:
function [xar,yar] = Euler(a,b,ybouco,N)
h=(b-a)/N;
T=a:h:b;
y(1)=ybouco;
for i = 1: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
然后,通过在命令窗口中调用该函数,您将获得以下结果:
x =
Columns 1 through 8
0 0.3000 0.6000 0.9000 1.2000 1.5000 1.8000 2.1000
Columns 9 through 11
2.4000 2.7000 3.0000
y =
Columns 1 through 8
2.0000 -2.7813 3.9575 -5.4317 7.7582 -10.6627 15.1716 -20.9515
Columns 9 through 11
29.6658 -41.1533 58.0384
您还可以绘制
结果并获得以下图表:
如果将N
从10增加到100,您将获得更精确的结果和平滑的图形,如下图所示:
function [xar,yar] = Euler(a,b,ybouco,N)
h=(b-a)/N;
T=a:h:b;
y(1)=ybouco;
for i = 1: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
错误消息是因为您有工作分配
y(x) = 2*exp(-8*x)+(1/16)*x;
其中未定义x
。y(x)
中的x
索引到数组y中
也许你打算写
y = @(x) 2*exp(-8*x)+(1/16)*x;
定义一个匿名函数。但这将与您已经定义的数组y
冲突。也许删除这行
而且
h=(b-a)/N;
T=a:h:b;
可以更好地写成
T = linspace(a,b,N);
消息错误是不言自明的。。。在初始化之前,您正在使用一个
x
变量。。错误消息还应说明哪一行存在错误,以便您可以轻松更正。0.5x
在MATLAB中无效。您将N
作为参数,但您指定了N=10
,这是为什么?