# bvpinit

## 语法

``solinit = bvpinit(x,yinit)``
``solinit = bvpinit(sol,[anew bnew])``
``solinit = bvpinit(___,parameters)``

## 说明

``solinit = bvpinit(x,yinit)` 使用初始网格 `x` 和初始解估计值 `yinit` 来得出边界值问题解的初始估计值。然后，您可以使用初始估计值 `solinit` 作为 `bvp4c` 或 `bvp5c` 的输入之一来求解边界值问题。`

``solinit = bvpinit(sol,[anew bnew])` 得出区间 `[anew bnew]` 上解的初始估计值，其中 `sol` 是从 `bvp4c` 或 `bvp5c` 获得的解结构体。新区间 `[anew bnew]` 必须大于在其上定义 `sol` 的以前的区间。之前的解 `sol` 被外插到新区间。`
``solinit = bvpinit(___,parameters)` 为边界值问题中具有未知值的参数指定初始估计值向量。您可以将此语法用于上述任一输入参量组合。`

## 示例

${{\mathit{y}}^{\prime }}^{\prime }=-\mathit{y}$.

$\mathit{y}\left(0\right)=\mathit{y}\left(\pi \right)=0$.

```function dydx = bvpfun(x,y) dydx = [y(2) -y(1)]; end ```

```function res = bcfun(ya,yb) res = [ya(1) yb(1)]; end ```

```function y = guess(x) y = [sin(x) cos(x)]; end ```

```xmesh = linspace(0,pi,10); solinit = bvpinit(xmesh,@guess);```

```sol = bvp4c(@bvpfun, @bcfun, solinit); plot(sol.x,sol.y,'-o')```

```function dydx = bvpfun(x,y) % equation being solved dydx = [y(2) -y(1)]; end %------------------------------------------- function res = bcfun(ya,yb) % boundary conditions res = [ya(1) yb(1)]; end %------------------------------------------- function y = guess(x) % guess at solution behavior y = [sin(x) cos(x)]; end %-------------------------------------------```

${{\mathit{y}}^{\prime }}^{\prime }=\mathit{y}$.

${{\mathit{y}}_{1}}^{\prime }={\mathit{y}}_{2}$,

${{\mathit{y}}_{2}}^{\prime }={\mathit{y}}_{1}$.

$\mathit{y}\left(0\right)=0$,

$\mathit{y}\left(3\right)=1$.

```function dydx = bvpfun(x,y) dydx = [y(2) y(1)]; end ```

```function res = bcfun(ya,yb) res = [ya(1) yb(1)-1]; end ```

```function y = guess(x) y = [exp(x) exp(x)]; end ```

```xmesh = linspace(0,3,5); solinit = bvpinit(xmesh,@guess);```

```sol = bvp4c(@bvpfun, @bcfun, solinit); plot(sol.x(1,:),sol.y(1,:),'-o')```

```hold on for k = 4:8 solinit = bvpinit(sol,[0 k]); sol = bvp4c(@bvpfun, @bcfun, solinit); plot(sol.x(1,:),sol.y(1,:),'-o') end```

```function dydx = bvpfun(x,y) % equation being solved dydx = [y(2) y(1)]; end %------------------------------------------- function res = bcfun(ya,yb) % boundary conditions res = [ya(1) yb(1)-1]; end %------------------------------------------- function y = guess(x) % guess at solution behavior y = [exp(x) exp(x)]; end %-------------------------------------------```

## 输入参数

• 对于两点边界值问题，`x` 的项必须唯一。即，如果 a < b，项必须满足 `x(1)` < `x(2)` < ... < `x(end)`。如果 a > b，项必须满足 `x(1)` > `x(2)` > ... > `x(end)`

• 对于多点边界值问题，通过重复 `x` 中的项，可以在端点 a 和 b 之外，在 [a,b] 中指定应用边界条件的点。例如，假设有以下向量

`x = [0 0.5 1 1 1.5 2];`
对于此网格，在以下三个点应用边界条件：端点 `0``2`，以及重复项 `1`。一般说来，重复项表示 [a,b] 中区域之间的边界点。重复项 `1` 将区间 `[0 2]` 分为两个区域：`[0 1]``[1 2]`

• 向量 - 对于解的每个分量，`bvpinit` 在所有网格点上复制向量的对应元素作为常量估计值。也即，`yinit(i)``x` 中所有网格点处解的第 `i` 个分量 `yinit(i,:)` 的常量估计值。

• 函数 - 对于给定网格点而言，估计值函数必须返回一个向量，该向量的元素是解的对应分量的估计值。此函数必须采用以下格式

`y = guess(x)`

`x` 是网格点，`y` 是其长度与解中的分量数相同的向量。例如，如果 `yinit` 是函数，则在每个网格点上，`bvpinit` 都会调用

`y(:,j) = guess(x(j))`

对于多点边界值问题，估计值函数必须采用以下格式

`y = guess(x,k)`

`y` 是区域 `k``x` 处的解的初始估计值。该函数必须接受输入参量 `k`，提供此输入参量的目的是为了灵活编写估计值函数。但是，该函数不必使用 `k`