用矩阵输入求解二阶微分

时间:2014-07-09 15:56:55

标签: matlab matrix ode differential-equations

我正在尝试使用Matlab中的ODE45以矩阵作为输入来求解二阶微分。我对几个错误感到震惊,其中包括:

"In an assignment  A(I) = B, the number of elements in B and
 I must be the same."

下面给出的双阶微分方程:

dy(1)= diag(ones(1,100) - 0.5*y(2))*Co;
dy(2)= -1 * Laplacian(y(1)) * y(2);

主要功能调用是:

[T,Y] = ode45(@rigid,[0.000 100.000],[Co Xo]);

这里,Co是尺寸为100x100的矩阵,Xo是尺寸为100x1的列矩阵。拉普拉斯算子是计算矩阵拉普拉斯的预定义函数。

我将在此感谢任何帮助。我应该重塑输入矩阵和向量以使它们处于相同的维度或什么状态吗?

1 个答案:

答案 0 :(得分:1)

你的猜测是正确的。 MATLAB ode套件只能解决矢量值ode,即形式 y ' = f (t, y )的颂歌。在您的情况下,您应该使用y在矩阵和数组之间来回转换dyreshape

更准确地说,初始条件将转换为数组

y0 = reshape([Co Xo], 100*101, 1);

虽然{/ 1}}将通过

获得
y

在计算了矩阵y_matrix = reshape(y, 100, 101); y1 = y_matrix(:,1:100); y2 = y_matrix(:,101); dy1之后,您将不得不将它们转换为数组

dy2

除了dy = reshape([dy1 dy2], 100*101, 1); 的限制之外,您的代码会产生该错误,因为在MATLAB中,矩阵不会以这种方式编制索引。实际上,如果您定义ode45A = magic(5)会给出A(11)的第11个元素,即1. {/ p>