Решение нескольких уравнений в матричной форме с использованием fsolve (Matlab)

Доброе утро, я пытаюсь решить 8 уравнений с 8 неизвестными с помощью fsolve и хочу посмотреть, как меняются результаты с одним параметром (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))

Заранее спасибо!


person Maciek Wajsprych    schedule 09.05.2017    source источник
comment
Вы хотите решить 4 независимых набора уравнений, каждый из которых состоит из 8 неизвестных и уравнений. Таким образом, x0 правильно представляет собой матрицу 8x4, но fun1 также должна быть матрицей 8x4. Vn1, вероятно, должен быть вектором-строкой (1x4), и вы должны использовать x(i, :) вместо линейной индексации x(i).   -  person m7913d    schedule 09.05.2017
comment
Это работает. Большое спасибо!   -  person Maciek Wajsprych    schedule 09.05.2017
comment
Возможно, вы можете опубликовать свой исправленный код в качестве ответа и принять его. Это может быть полезно для других.   -  person m7913d    schedule 09.05.2017
comment
Ну конечно; естественно. Я пытался сделать это как ваш ответ, но, как я вижу, только я могу опубликовать его. Я хотел опубликовать это как признание для вас.   -  person Maciek Wajsprych    schedule 09.05.2017
comment
Это мило с твоей стороны, что ты хочешь признать меня. Вы можете проголосовать за мой комментарий или сослаться на мой комментарий в своем ответе, но самое главное, что решение доступно для всех. Я включил свой комментарий в ваш ответ, я думаю, вы можете принять его сейчас.   -  person m7913d    schedule 09.05.2017
comment
Там написано, что я могу принять свой ответ через 2 дня.   -  person Maciek Wajsprych    schedule 09.05.2017
comment
Я действительно ненавижу ограничения по времени.   -  person m7913d    schedule 09.05.2017
comment
Я сделаю это обязательно. Спасибо еще раз   -  person Maciek Wajsprych    schedule 09.05.2017


Ответы (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')
person Maciek Wajsprych    schedule 09.05.2017