我正在尝试使用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的列矩阵。拉普拉斯算子是计算矩阵拉普拉斯的预定义函数。
我将在此感谢任何帮助。我应该重塑输入矩阵和向量以使它们处于相同的维度或什么状态吗?
答案 0 :(得分:1)
你的猜测是正确的。 MATLAB ode套件只能解决矢量值ode,即形式 y ' = f (t, y )的颂歌。在您的情况下,您应该使用y
在矩阵和数组之间来回转换dy
和reshape
。
更准确地说,初始条件将转换为数组
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中,矩阵不会以这种方式编制索引。实际上,如果您定义ode45
,A = magic(5)
会给出A(11)
的第11个元素,即1. {/ p>