我试图在数值上找到A*cos x +B*sin x = C
A 和 B 是两个相同大小的已知方阵(例如 100x100),而 C 是已知向量(100x1)的解。如果没有第二项(即使用单个矩阵),我将使用 Jacobi 或 Gauss-Seidel 来解决这个问题并得到 x 但在这里,我不知道如何在 Matlab 中解决这个问题。可能,将问题解决为 : 会很有用A*X + B*sqrt(1-X^2) = C
。
我将不胜感激任何帮助、想法或建议 提前致谢
如果我理解正确,您可以fsolve
像这样使用(c
并且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)
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句