我一直在一个项目中,我需要找到给定非线性微分方程的解决方案,请参见下图:
现在,我尝试使用matlabs内置函数bvp4c,但是语法很困难,我不知道结果是否可靠。对于某些值,bvp4c函数只会生成一个错误。我还考虑了边界条件,请参见下图:
对不起,这些数字太大了。现在我知道这不是一个数学论坛,但是我需要从数字上解决这个问题,我想用可用的最佳方法解决它。到目前为止,我的代码如下:
const copy = str => {
const el = document.createElement('textarea'); // Create a <textarea> element
el.value = str; // Set its value to the string that you want copied
el.setAttribute('readonly', ''); // Make it readonly to be tamper-proof
el.style.position = 'absolute';
el.style.left = '-9999px'; // Move outside the screen to make it invisible
document.body.appendChild(el); // Append the <textarea> element to the HTML document
const selected =
document.getSelection().rangeCount > 0 // Check if there is any content selected previously
? document.getSelection().getRangeAt(0) // Store selection if found
: false; // Mark as false to know no selection existed before
el.select(); // Select the <textarea> content
document.execCommand('copy'); // Copy - only works as a result of a user action (e.g. click events)
document.body.removeChild(el); // Remove the <textarea> element
if (selected) { // If a selection existed before copying
document.getSelection().removeAllRanges(); // Unselect everything on the HTML document
document.getSelection().addRange(selected); // Restore the original selection
}
};
重复我的问题,哪种方法是最好的,最容易理解和实现的最简单方法?也许是射击?
最诚挚的问候SimpleP。
该图显示f对\ theta。整数应该是1。
答案 0 :(得分:2)
合并积分的通用方法是将F
的反导数f
添加到ODE系统。也就是说,作为第四成分和变量
F' = f with F(0)=0, F(alpha)=1
和其他组件需要移动一个索引,
function v=flow_init(x)
v=[sin(x); 1; 1; 1-cos(x)];
function dydx=flow_ode(x,y)
% y is [ f, f', f'', F ]
q=0.0005;
v=1;
dydx = [y(2); y(3); 2*q/v*y(1)*y(2)-4*y(2); y(1)];
function res=flow_bc(ya,yb)
res=[ya(1); ya(4); yb(1); yb(4)-1];
使用python:
q, v = 0.0005, 1
def flow_ode(t,u): return [ u[1], u[2], 2*q/v*u[0]*u[1]-4*u[1], u[0] ]
def flow_bc(u0, u1): return [ u0[0], u0[3], u1[0], u1[3]-1 ]
x = x_init = np.linspace(0,1,11);
u_init = [ 6*x*(1-x), 0*x, 0*x, x ]
res = solve_bvp(flow_ode, flow_bc, x_init, u_init, tol = 1e-5)
print res.message
if res.success:
x = x_sol = np.linspace(0,1,201);
u_sol = res.sol(x_sol);
plt.subplot(2,1,1)
plt.plot(x_sol, u_sol[0]); plt.plot(x, 6*x*(1-x), lw=0.5); plt.grid()
plt.subplot(2,1,2)
plt.plot(x_sol, u_sol[3]); plt.grid()
plt.show()
正如人们所看到的,这里的最初猜测非常接近。由于ODE是4f'+f'''=0
的小扰动,因此解必须接近其解a+b*sin(2x)+c*cos(2x)
,其解的边界条件为
f(x)=A * [ (1-cos(2))*sin(2*x)-sin(2)*(1-cos(2*x)) ]
= 4*A*sin(1) * sin(x)*sin(1-x)
使用A
,使得积分为1。