Я пишу программу относительно решения следующей краевой задачи, используя метод съемки половинного деления:MATLAB сюжетных векторы должны быть одни и те же длинами
y''-y+x=0, y(0)=y(1)=0.
Я первый преобразовать это к системе уравнений первого порядка, набор
y'=z
я пусть dydt представим вектор (у 'г'), и придумать с файлом сценария:
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 сказал я использую сюжет аргумент неверно, где сюжетные векторы должны быть одинаковой длины. Я не знаю, как решить эту проблему. Любая помощь приветствуется.
Каков размер 'G' и каков размер' Y (:, 1) '? Они должны быть одного размера. – Suever
Ваша итерация закончилась бы за один шаг, если бы вы использовали секущий метод (или метод регуляции регуляции для варианта в квадратных скобках). Задача линейна, поэтому второе граничное значение линейно зависит от первого, а линейная функция может быть определена двумя точками. – LutzL
@LutzL. Я думаю, что я использую метод деления пополам после двух съемок. Вы имеете в виду, что моя петля заканчивается после одного шага в этом случае? –