matlab - 如何在 Matlab 中数值求解具有两个矩阵的系统?
问题描述
我试图以数值方式找到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)
。
推荐阅读
- sql - SSIS 无法读取 excel 文件中的列结尾(Excel 连接管理器)
- excel - Excel:数据透视表中每个组的总和
- java - EMV TLV 解析有时不显示构造值(子项)
- node.js - RangeError:无效的 WebSocket 帧:必须清除 RSV2 和 RSV3
- reactjs - react-map-gl 自定义标记不会停留在缩放的确切位置
- azure-web-app-service - 为什么默认 ssl 证书不适用于 azure web 应用程序
- tensorflow - 使用 model.predict 训练 CartPole-v0 OpenGym 时出错
- python - 在张量流中使用 conv2d
- c++ - 无法弄清楚导致此崩溃的原因 (SIGABRT)
- matplotlib - plt.plot() 显示 X 的点,如何只有这条线?