MATLAB 程序错在哪里? 5
程序一直错误大佬帮忙看看用打靶法求两点边值问题t0=0.forj=0,1,2,...solvethefollowingsystemnumericallyfromx=-1t...
程序一直错误大佬帮忙看看用打靶法求两点边值问题
t0=0.
for j=0,1,2,...
solve the following system numerically from x=-1 to x=1
D2u=f(x,u,Du)
u(x=-1)=1
Du(x=-1)=t(j)
D2v= fu(x,u,Du)v+fDu(x,u,Du)Dv
v(x=-1)=0
Dv(x=-1)=1.
set
t(j+1)=t(j)-(u(x=1)-1)/v(x=1).
end
plot(t,y) 展开
t0=0.
for j=0,1,2,...
solve the following system numerically from x=-1 to x=1
D2u=f(x,u,Du)
u(x=-1)=1
Du(x=-1)=t(j)
D2v= fu(x,u,Du)v+fDu(x,u,Du)Dv
v(x=-1)=0
Dv(x=-1)=1.
set
t(j+1)=t(j)-(u(x=1)-1)/v(x=1).
end
plot(t,y) 展开
展开全部
Matlab程序错的原因是没有理解打靶法算法的求解过程。
用打靶法求解二阶微分方程,是利用下列初值问题代替
u1'=u2, u1(a)=α
u2'=f(x,u1,u2),u2(b)=m
打靶法的求解思路是这样的:
(1)随意选取m的起始值
(2)求出上述初值问题的解
(3)若不符合|u1(b)-β<ε,就修正m的值,可以用ode函数计算
(4)重复计算,直到符合|u1(b)-β<ε,此时的u1(x)就是数值解
修正m的取值,其方法是很多的,线性差值法、牛顿法。
线性差值法的表达式代码
m(n+1)=m(n-1)+(m(n)-m(n-1))*(beta0-beta1(n-1))/(beta1(n)-beta1(n-1));
根据上述思路,编程后运行可以得到【x,y】值,以及图形。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询