首页 > 解决方案 > 如何在 Matlab 中数值求解具有两个矩阵的系统?

问题描述

我试图以数值方式找到A*cos x +B*sin x = CA 和 B 是两个已知大小相同的方阵(例如 100x100),而 C 是已知向量(100x1)的解决方案。如果没有第二项(即使用单个矩阵),我将使用 Jacobi 或 Gauss-Seidel 来解决这个问题并得到 x 但在这里,我不知道如何在 Matlab 中继续解决这个问题。可能是,将问题解决为 : 会很有用A*X + B*sqrt(1-X^2) = C

我将不胜感激任何帮助、想法或建议在此先感谢

标签: matlabmatrixsystem

解决方案


如果我理解正确,您可以这样使用fsolvec并且X是向量):

A = ones(2,2);
B = ones(2,2);
c = ones(2,1);

% initial point
x0 = ones(length(A), 1);
% call to fsolve
sol = fsolve(@(x) A * cos(x) + B*sin(x) - c, x0);

F(x) = 0在这里,我们用F: R^N -> R^N和求解非线性方程组F(x) = A * cos(x) + B*sin(x) - c

只是为了完整起见,这是我以前的答案,即如何做到以防万一C并且X是矩阵而不是向量:

A = ones(2,2);
B = ones(2,2);
C = ones(2,2);

% initial point
x0 = ones(numel(A), 1);

% call to fsolve
fsolve(@(x) fun(x, A, B, C), x0)


function [y] = fun(x, A, B, C)
    % Transform the input vector x into a matrix
    X = reshape(x, size(A));
    % Evaluate the matrix equation
    Y = A * cos(X) + B*sin(X) - C;
    % flatten the matrix Y to a row vector y
    y = reshape(Y, [], 1);
end

这里的想法是将矩阵方程系统F: R^(N x N) -> R^(N x N)转换为等效的非线性系统F: R^(N*N) -> R^(N*N)


推荐阅读