用两组变量求解



fsolve解决了由

F(x)=0

对于x.就我而言,x是一个大小为m x n的二维数组。现在假设 除了x之外,还有一个向量y需要求解 也。扩展变量数量的最佳方法是什么fsolve鉴于fsolve只允许一个参数,解决了问题?

我想避免的一种解决方案是重写问题 单个向量的项,xy的条目堆叠如

x(1) ...  x(m x n), y(1) ... y(m-1)

我想避免这个解决方案,因为第一组的方程 的变量可以在二维中很好地定义。

是否有可能创建一个大小m x n x 2的三维数组,其中第一页(Matlab 术语中的第 3 维(是原始x矩阵,y的条目出现在第二页上?但是,如果y只有大小m-1,以至于第二页基本上是空的呢?这可能以某种方式吗?


编辑 这是带有m=n=2的模型的简化版本。 第一组中的方程是

x(1,1)*dot(k1,y)-y(1) = 0;
x(1,2)*dot(k2,y)-y(1) = 0;
x(2,1)*dot(k1,y)-y(2) = 0;
x(2,2)*dot(k2,y)-y(2) = 0;

其中k1k2是参数的两个向量。 当m=n=2时,第二组方程由一个形式的方程组成

y(1)*dot(c1,x(1,:)) + y(2)*dot(c2,x(2,:)) = 0

其中c1c2是参数的两个向量。y的最后一个条目,这里y(2),始终是一个参数。

您可以将它们组合成单个向量,但不需要修改 F。例如,假设你有一个函数 F(x, y(,其中 x 和 y 的大小是任意的,那么像下面这样的东西应该可以工作

function [x, y] = fsolve2(F, x0, y0)
% flatten x0 and y0 into a single column vector
xy0 = [x0(:); y0(:)];
% utility functions for recovering x and y from combined vector
xstart = 1;
xend = xstart + numel(x0) - 1;
xsize = size(x0);
getx = @(xy) reshape(xy(xstart:xend), xsize);
ystart = xend + 1;
yend = ystart + numel(y0) - 1;
ysize = size(y0);
gety = @(xy) reshape(xy(ystart:yend), ysize);
% define G which takes xy and calls F
G = @(xy) F(getx(xy), gety(xy));
xy = fsolve(G, xy0);
% unwrap xy into x and y
x = getx(xy);
y = gety(xy);
end

可以调用

x, y = fsolve2(F, x0, y0);

相关内容

  • 没有找到相关文章

最新更新