でなければならない私は、撮影-二分法を使用して、次の境界値問題の解決に関するプログラムを書いています:MathWorks社のMATLABプロットのベクトルが同じ長さ
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は、プロットのベクトルが同じ長さでなければならないところ、私は、間違ってプロット引数を使用していました。私はこの問題をどのように修正するのか分かりません。どんな助けもありがとうございます。
'G 'のサイズは何ですか?' Y(:、1) 'のサイズは何ですか?彼らは同じサイズである必要があります。 – Suever
セカントメソッド(または括弧で囲まれたバリアントにregula falsiメソッド)を使用する場合、繰り返しは1ステップで終了します。問題は線形であるため、第2の境界値は第1の境界値に線形に依存し、その線形関数は2つの点で決定することができる。 – LutzL
@LutzL私は2回の射撃の後に二分法を使用していると思う。この場合、ループが1ステップ後に終了することを意味しますか? –