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

时间:2017-05-09 18:11:55

标签: matlab equations

早上好, 我试图使用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))

提前谢谢!

1 个答案:

答案 0 :(得分:1)

正如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')