У меня проблема с умножением вектора на обратную матрицу в Matlab. Код, я использую следующий:Умножение вектора на обратную матрицу в Matlab
% Final Time
T = 0.1;
% Number of grid cells
N=20;
%N=40;
L=20;
% Delta x
dx=1/N
% define cell centers
%x = 0+dx*0.5:dx:1-0.5*dx;
x = linspace(-L/2, L/2, N)';
%define number of time steps
NTime = 100; %NB! Stability conditions-dersom NTime var 50 ville en fått helt feil svar pga lambda>0,5
%NTime = 30;
%NTime = 10;
%NTime = 20;
%NTime = 4*21;
%NTime = 4*19;
% Time step dt
dt = T/NTime
% Define a vector that is useful for handling teh different cells
J = 1:N; % number the cells of the domain
J1 = 2:N-1; % the interior cells
J2 = 1:N-1; % numbering of the cell interfaces
%define vector for initial data
u0 = zeros(1,N);
L = x<0.5;
u0(L) = 0;
u0(~L) = 1;
plot(x,u0,'-r')
grid on
hold on
% define vector for solution
u = zeros(1,N);
u_old = zeros(1,N);
% useful quantity for the discrete scheme
r = dt/dx^2
mu = dt/dx;
% calculate the numerical solution u by going through a loop of NTime number
% of time steps
A=zeros(N,N);
alpha(1)=A(1,1);
d(1)=alpha(1);
b(1)=0;
c(1)=b(1);
gamma(1,2)=A(1,2);
% initial state
u_old = u0;
pause
for j = 2:NTime
A(j,j)=1+2*r;
A(j,j-1)=-(1/dx^2);
A(j,j+1)=-(1/dx^2);
u=u_old./A;
% plotting
plot(x,u,'-')
xlabel('X')
ylabel('P(X)')
hold on
grid on
% update "u_old" before you move forward to the next time level
u_old = u;
pause
end
hold off
сообщение об ошибке я получаю:
Matrix dimensions must agree.
Error in Implicit_new (line 72)
u=u_old./A;
Мой вопрос, поэтому, как можно выполнить и = u_old * [A^(- 1)] в Matlab?
Дэвид
ли вам действительно хотите разделить вектор на матрицу? Можете ли вы сделать небольшой пример небольшого вектора и матрицы и что вы ожидаете от результата этого разделения? – Nasser
Вы правы. То, что я на самом деле хочу, - это умножить вектор u на инверсию A. Есть ли простой способ сделать это в Matlab? (Матрица A тридиагональна). – David
Обратная матрица A по-прежнему является матрицей. Поэтому, если ваш вектор является вектором строки размера (1, n), и ваша матрица имеет размер (n, n), тогда просто сделайте 'v * A', и вы получите вектор строки размера (1, n). Пока внутренние измерения одинаковы, вы можете размножать вектор по матрице, т. Е. 'Row_vector * A' в порядке или' A * column_vector' в порядке – Nasser