。
曲线拟合は,曲线拟合工具箱™ののコマンド群群使使,铁路形常分类方程程式(ode)をを方法をを明します。
次の非线形异摂の问题について考えます。
epsilon d ^ 2g(x)+(g(x))^ 2 = 1 on [0..1]
dg(0)= g(1)= 0。
この问题はepsilon = .001
でもでも既にかなり难しい,控えめに次を选択し。
epsilon = .1;
指定されたブレークシーケンス休息
をを用するc ^ 1区から,选点により近似解をます。したがっしたがっ,次数K.
が4になるようにし。
休息=(0:4)/ 4;k = 4;
対応する节点シーケンスを次のように取得します。
结=奥克斯(休息,K,2)
结=1×14.0 0 0 0 0.2500 0.2500 0.5000 0.5000 0.7500 0.7500 1.0000 1.0000 1.0000 1.0000
どのどのと节点をしても,対応するスプライン空间の次元はのようなりなり。
n =长度(结) - k
n = 10.
自我度の数码10であれば,多重分别ごとに2つのサイトでををとするデータとうまく近似され,合肥でデータうまく场され,2つの周辺条件场追はする条件のが全部で10にになり。
空间ごとに2つのガウスサイトサイト选択します単位长さ'标准'空间[-1/2 .1/2]のの合,これらは次の2つのサイトとます。
高斯= .5773502692 * [ - 1/2;1/2];
ここから,次次使使して选点サイトのコレクションコレクションコレクションししししししししししし
ninterv =长度(中断)-1;temp =(中断(2:ninterv + 1)+断裂(1:ninterv))/ 2;temp = temp([1 1],:) + Gauss * Diff(breaks);COLSITES = TEMP(:)。';
解决する数据的な问题は,任意の次数および任意のをもつ,非线形システムを満たす分子的多重(PP.)y
を见つけることです。
DY(0)= 0
(y(x))^ 2 + epsilon d ^ 2y(x)= 1在咖喱中的x
Y(1)= 0
y
が解の现出,の近似である合,ニュートン法による,さらに适切と推定さ(?)解Z.
に対する线路问题は次のとおりです。
DZ(0)= 0
w_0(x)z(x)+ epsilon d ^ 2z(x)= b(x)在咖喱中的x
z(1)= 0
ここで,w_0(x):= 2y(x)
およびB(x):=(y(x))^ 2 + 1
です。
実际,w_0(1):= 1
那w_1(0):= 1
および
w_2(x):= epsilon,w_1(x):= x在咖喱中的0
を选択して,他のすべての値W_0.
那W_1.
那W_2.
を选択し,B.
をまだゼロとして指定ていない场合书,システムに均一。
w_0(x)z(x)z(x)+ w_1(x)dz(x)+ w_2(x)d ^ 2z(x)= b(x)在站点中的x
ここで,
站点= [0,辣静,1];
このこのシステム,そのそのZ.
これには,すべては,すべての遗址
の各X
における,すべての关键词Bスプラインについての0分数,1分别および2阶微分がですです値は,sp
コマンドによって提供されます。
次に,sp
ののドキュメンテーションの重要重要部示し示し示し示し示し示し示し示し
Spcol B样条搭配矩阵。
colloc = spcol(结,k,tau)是矩阵
[D ^ M(i)b_j(tau(i)):i = 1:长度(tau),j = 1:长度(结)-k],
用d ^ m(i)b_j的m(i) - b_j的衍生物,
b_j为结序列结的订单k的第j个b样条曲线,
Tau一系列网站,
假设结和tau都被认为是nondecreaping,而且
m(i)是整数#{j
TAU中的“累积”,TAU(i)多重。
sp
をを用して次の列を指定します。
Colmat = Spcol(Knots,K,Brk2knt(网站,3));
ここで使用するBRK2KNT.
は遗址
の各エントリを3倍にするため,遗址
の各X
について,科尔马
で,すべての关键词X
における値,1分,および2分别が得ます。
ここから,重みw_0(x),w_1(x),w_2(x)
をを用してX
に対する3倍の行ををわせることで,线路システムの行列X
に対応する行を取得し,选点行列を取得します。
スプライン空间からのの在の近似y
も必要です。最初最初,遗址
におけるpp空间から妥当初推定を内插して近似近似をします。この推定には,次のに,次のの物线をしし。
x ^ 2 - 1
これこれは端点条件を,またスプライン空间内に现处于しし。遗址
における内插により,そのb型を求めます。非スパース行科尔马
から关连する内插行列を选択します。これはいくつかの注意が必要なステップで実行されます。
intmat = colmat([2 1+(1:(n-2))* 3,1+(n-1)* 3],:);cofs = intmat \ [0 colsites。* colsites-1 0]。';y = spmak(结,cofs。');
结果をプロットし,x ^ 2-1
そのものそのものとなってているを确认しし
fnplt(y,'G');传奇('初始猜测(x ^ 2-1)'那'地点'那'nw');轴([ - 0.01 1.01 -1.01 0.01]);抓住上
在の推定y
から,改善された近似解Z.
ををために线路システムを作用成し,解くことができました。実际,使ことができました。y
を使用しし,変更Z-Y.
が指定された误差より小さいさい合。
公差= 6.e-9;
各反复における変更Z-Y.
の最大ノルムをのの力に示し,この图に反复のそれぞれも示し示し。
尽管1 vtau = fnval(y,colsites);重量= [0 1 0;[2 * vtau。'零(n-2,1)Repmat(epsilon,n-2,1)];1 0 0];colloc = zeros(n,n);为了j = 1:n colloc(j,:) =权重(j,:) * colmat(3 *(J-1)+(1:3),:);结尾cofs = colloc \ [0 vtau。* vtau + 1 0]。';z = spmak(结,cofs。');fnplt(z,'K');maxdif = max(max(abs(z.coefs-y.coefs))));fprintf('maxdif =%g \ n',maxdif)如果(maxdif休息那结尾%现在重申y = z;结尾
maxdif = 0.206695.
maxdif = 0.01207.
maxdif = 3.95151e-05
maxdif = 4.43216e-10
传奇({'初始猜测(x ^ 2-1)''迭代'},'地点'那'nw');
ニュートン反复から予想される,これは2次收束のようにます。
埃斯利昂
をを场は,右端点右端点に近い境界层作作作者人。これこれは,等间隔でないが必要です。纽knt.
を实用して,现处于の近似からな(细かい)メッシュを作物成し。
结= newknt(z,ninterv + 1);休息= knt2brk(结);结=奥克纳(休息,4,2);n =长度(结)-k;
次に,新闻休息
に対応する选点サイトを取得します。
ninterv =长度(中断)-1;temp =((2:ninterv + 1)+断裂(1:ninterv))/ 2);temp = temp([1 1],:) + Gauss * Diff(breaks);COLSITES = TEMP(:)。';站点= [0,辣静,1];
さらに,新しい选点行列をます。
Colmat = Spcol(Knots,K,Brk2knt(网站,3));
计算した解Z.
への现处于のスプライン空间からのとしててて,初推定y
を求めます。得られた内插をプロットし,现处于の解に近いことを确认します。
intmat = colmat([2 1+(1:(n-2))* 3,1+(n-1)* 3],:);y = spmak(结,[0 fnval(z,colsites)0] / intmat。');fnplt(y,'C');斧头= GCA;h = ax.children;传奇(H([6 5 1]),{'初始猜测(x ^ 2-1)''迭代'......'epsilon新价值的新初步猜测'},......'地点'那'nw');
ここでは,埃斯利昂
を3で除算して上记反复を缲り返します。收束は再び2次となり。
epsilon = epsilon / 3;尽管1 vtau = fnval(y,colsites);重量= [0 1 0;[2 * vtau。'零(n-2,1)Repmat(epsilon,n-2,1)];1 0 0];colloc = zeros(n,n);为了j = 1:n colloc(j,:) =权重(j,:) * colmat(3 *(J-1)+(1:3),:);结尾cofs = colloc \ [0 vtau。* vtau + 1 0]。';z = spmak(结,cofs。');fnplt(z,'B');maxdif = max(max(abs(z.coefs-y.coefs))));fprintf('maxdif =%g \ n',maxdif)如果(maxdif休息那结尾%现在重申y = z;结尾
maxdif = 0.237937.
maxdif = 0.0184488.
maxdif = 0.000120467.
maxdif = 4.78115e-09
斧头= GCA;h = ax.children;传说(h([10 9 5 4]),......{'epsilon = .1'的初始猜测(x ^ 2-1)'迭代'......Sprintf('初步猜测epsilon =%.3f',epsilon)......'迭代'},'地点'那'nw');
埃斯利昂
が非常に小さい结合は,毎回埃斯利昂
を3で除算しての计算をを缲り返すです。
为了ee = 1:4结= Newknt(z,ninterv + 1);休息= knt2brk(结);结=奥克纳(休息,4,2);n =长度(结)-k;ninterv =长度(中断)-1;temp =((2:ninterv + 1)+断裂(1:ninterv))/ 2);temp = temp([1 1],:) + Gauss * Diff(breaks);COLSITES = TEMP(:)。';站点= [0,辣静,1];Colmat = Spcol(Knots,K,Brk2knt(网站,3)); intmat = colmat([2 1+(1:(n-2))*3,1+(n-1)*3],:); y = spmak(knots,[0 fnval(z,colsites) 0]/intmat.'); fnplt(y,'C')epsilon = epsilon / 3;尽管1 vtau = fnval(y,colsites);重量= [0 1 0;[2 * vtau。'零(n-2,1)Repmat(epsilon,n-2,1)];1 0 0];colloc = zeros(n,n);为了j = 1:n colloc(j,:) =权重(j,:) * colmat(3 *(J-1)+(1:3),:);结尾cofs = colloc \ [0 vtau。* vtau + 1 0]。';z = spmak(结,cofs。');fnplt(z,'B');maxdif = max(max(abs(z.coefs-y.coefs))));如果(maxdif休息那结尾%现在重申y = z;结尾结尾斧头= GCA;h = ax.children;传奇(h([30 29 25 24]),......{'epsilon = .1'的初始猜测(x ^ 2-1)'迭代'......'epsilon的初始猜测= .1 / 3 ^ j,j = 1:5'......'迭代'},'地点'那'nw');
次に,休息
の最终的な分布を示します。この结合は纽knt.
がうまく机械していることががます。
breaks = fnbrk(fn2fm(z,'pp'),'B');bb = repmat(休息,3,1);Cc = Repmat([0; -1; NaN],1,长度(断裂));绘图(BB(:),CC(:),'r');抓住离开斧头= GCA;h = ax.children;图例(h([31 30 26 25 1]),......{'epsilon = .1'的初始猜测(x ^ 2-1)'迭代'......'epsilon的初始猜测= .1 / 3 ^ j,j = 1:5'......'迭代''epsilon的休息= .1 / 3 ^ 5'},'地点'那'nw');
次のodeをを解こううしているいるを思い出してててて
epsilon d ^ 2g(x)+(g(x))^ 2 = 1 on [0..1]
。
xx = linspace(0,1,201);绘图(XX,1 - epsilon * fnval(fnder(z,2),xx) - (fnval(z,xx))。^ 2)标题('对于最小的epsilon的计算解决方案'的剩余物);