function nonlinear_eign () |
%*****************************************************************************80 |
% |
% Data-Driven Modeling Scientific Computation 7.7 |
% Author: Li-Jian Qu http://www.joyfulphysics.net |
% 2018年5月10日 |
% 利用 bvp4c 解如下非线性本征值问题 |
% y''+(100-beta)y+gamma*y^3=0 |
% y(-1)=0; y(1)=0; y'(-1)=0.1 |
<p>% 猜测未知参数 beta 初值<br /> |
beta=90;</p> |
<p>%<br /> |
% 猜测初始解<br /> |
%<br /> |
x_init = linspace ( -1, 1, 20 );<br /> |
solinit = bvpinit( x_init, @noneign_init, beta);</p> |
<p>% 应用 BVP4C 求解<br /> |
%<br /> |
sol = bvp4c ( @noneign_ode, @noneign_bc, solinit );</p> |
<p>% 应用 DEVAL 给出解的数值<br /> |
%<br /> |
x = linspace(-1,1,100);<br /> |
y = deval ( sol, x );<br /> |
beta_computed = sol.parameters;<br /> |
fprintf ( 1, '\n' );<br /> |
fprintf ( 1, ' Computed eigenvalue beta = %g\n', beta_computed );<br /> |
%<br /> |
% 画图<br /> |
%<br /> |
plot ( x, y(1,:), 'r-', 'Linewidth', 2 );<br /> |
xlabel ( '<--- X --->', 'Fontsize', 16 );<br /> |
ylabel ( '<--- Y(X) --->', 'Fontsize', 16 );<br /> |
title ( 'Nonlinear Eigenfunction Problem', 'Fontsize', 16 )<br /> |
grid on<br /> |
filename = 'noneign.png';<br /> |
print ( '-dpng', filename );<br /> |
fprintf ( 1, '\n' );<br /> |
fprintf ( 1, ' Saving plot file as "%s"\n', filename );<br /> |
%<br /> |
return<br /> |
end</p> |
<p>function dydx = noneign_ode ( x, y, beta )<br /> |
%% 此函数给出微分方程<br /> |
% 将方程写为一阶微分方程组的形式<br /> |
% dydx = f(x,y)<br /> |
gamma=1.0;<br /> |
dydx(1) = y(2);<br /> |
dydx(2) = (beta-100)<em>y(1)-gamma</em>y(1)^3;</p> |
<p>return<br /> |
end</p> |
<p>function bc = noneign_bc ( ya, yb, beta )<br /> |
%% 此函数给出边界条件<br /> |
%</p> |
<p>bc(1)=ya(1);<br /> |
bc(2)=yb(1);<br /> |
bc(3)=ya(2)-0.1;</p> |
<p>return<br /> |
end</p> |
<p>function y_init = noneign_init ( x )<br /> |
%% 此函数给出猜测解<br /> |
%<br /> |
y_init(1) = x^2-1;%cos((pi/2)<em>x);<br /> |
y_init(2) = 2</em>x;% -(pi/2)<em>sin((pi/2)</em>x);</p> |
<p>return<br /> |
end</p> |