使用 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')
早上好, 我正在尝试使用 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')