【发布时间】:2017-01-13 21:31:45
【问题描述】:
我正在编写一个关于使用射击二等分法解决以下边值问题的程序:
y''-y+x=0, y(0)=y(1)=0.
我首先将其转换为一阶方程组,设置
y'=z
然后我让dydt代表向量(y',z'),并拿出脚本文件:
function dydt=shoot(t,y)
dydt=[y(2);y(1)-t]
end
有了这个,然后我想出了以下代码:
clear
clc
a=0;
b=1;
alpha=0;
beta=0;
s(1)=(beta-alpha)/(b-a);
s(2)=-1
[G,Y]=ode113('shoot',[a b],[alpha;s(1)]);
[G,Z]=ode113('shoot',[a b],[alpha;s(2)])
hold
tol=1e-4
u=s(1);
v=s(2);
while abs(u-v)>tol;
s(3)=(u+v)/2;
[G,W]=ode113('shoot',[a b],[alpha;s(3)]);
if W(end,1)>0
u=s(3);
else
v=s(3);
end
end
[G,W]=ode113('shoot',[a b],[alpha;s(3)])
plot(G,Y(:,1),'-o', G,Z(:,1),'-o',G,W(:,1),'-o')
然后我运行程序,MATLAB 说我错误地使用了 plot 参数,其中 plot 向量必须是相同的长度。我不知道如何解决这个问题。任何帮助表示赞赏。
【问题讨论】:
-
G的大小是多少,Y(:,1)的大小是多少?它们的大小必须相同。 -
如果您使用割线法(或括号变体的 regula falsi 法),您的迭代将在一步中终止。问题是线性的,因此第二个边界值线性依赖于第一个边界值,并且该线性函数可以由两个点确定。
-
@LutzL 我想我在两次拍摄后使用了二等分法。你的意思是在这种情况下我的循环在一步后终止?
-
如果您使用以
[0,1]开头的二分法求解0=f(x)=3x-1,您将无限迭代(直到达到停止标准),因为精确解是无限二进制分数。使用割线法,您可以一步找到解决方案。这种情况类似。
标签: matlab differential-equations