早上好, 我试图使用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))
提前谢谢!
答案 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')