fsolve
解决了由
F(x)=0
对于x
.就我而言,x
是一个大小为m x n
的二维数组。现在假设 除了x
之外,还有一个向量y
需要求解 也。扩展变量数量的最佳方法是什么fsolve
鉴于fsolve
只允许一个参数,解决了问题?
我想避免的一种解决方案是重写问题 单个向量的项,x
和y
的条目堆叠如
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;
其中k1
和k2
是参数的两个向量。 当m=n=2
时,第二组方程由一个形式的方程组成
y(1)*dot(c1,x(1,:)) + y(2)*dot(c2,x(2,:)) = 0
其中c1
和c2
是参数的两个向量。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);