| 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> |