使用 fsolve (Matlab) 求解矩阵形式的多方程

Solving multi equations in matrix form using fsolve (Matlab)

早上好, 我正在尝试使用 fsolve 求解具有 8 个未知数的 8 个方程,并想了解结果如何随着一个参数 (Vn1) 的变化而变化。使用时它不能正常工作——它会覆盖分数,最后只有最后一个值为 Vn1 的结果。你能帮帮我吗?

这是我的代码:

clear
clc

Vn=100;
Vn1=[10;11;12;13];
Vn3=20;
wn=1;
lambda1=0.1;
lambda3=0.2;
R1=0.99;
R3=0.98;

fun1 = @(x) [(Vn-Vn1+x(1)-x(2));
            x(2)-Vn3+x(3)-x(4);
            x(5)-wn.*(1+lambda1.*R1./(1-lambda1));
            x(6)-x(7).*(1+lambda3.*R3./(1-lambda3));
            x(7).*x(2)-wn.*(Vn-Vn1)-x(5.)*x(1);
            x(8).*x(4)-x(7).*(x(2)-Vn3)-x(6).*x(3);
            x(1)-Vn1+lambda1.*Vn1;
            x(3)-Vn3+lambda3.*Vn3];

x0(8,4)=0;
x = fsolve(fun1,x0);
plot(Vn1,x(8))

提前致谢!

正如 m7913d 在他的评论中所建议的,我想求解 4 个独立的方程组,每个方程组由 8 个未知数和 8 个方程组成。因此,x0 正确地是一个 8x4 矩阵,但 fun1 也应该是一个 8x4 矩阵。因此,Vn1 应该是行向量 (1x4),我应该使用 x(i, :) 而不是线性索引 x(i):

clear
clc

Vn=100;
Vn1=linspace(10,50,100);
Vn3=20;
wn=1;

lambda3=0.2;
lambda1=0.1;
R1=0.99;
R3=0.98;
fun1 = @(x) [(Vn-Vn1+x(1,:)-x(2,:));
            x(2,:)-Vn3+x(3,:)-x(4,:);
            x(5,:)-wn.*(1+lambda1.*R1./(1-lambda1));
            x(6,:)-x(7,:).*(1+lambda3.*R3./(1-lambda3));
            x(7,:).*x(2,:)-wn.*(Vn-Vn1)-x(5,:).*x(1,:);
            x(8,:).*x(4,:)-x(7,:).*(x(2,:)-Vn3)-x(6,:).*x(3,:);
            x(1,:)-Vn1+lambda1.*Vn1;
            x(3,:)-Vn3+lambda3.*Vn3];

x0(8,100)=10;
x = fsolve(fun1,x0);
plot(Vn1,x(8,:))
xlabel('Vn1')
ylabel('wr')