Matlab fsolve с векторами: как определить функцию? - PullRequest
0 голосов
/ 10 января 2020

Я пытаюсь понять, как fsolve работает с векторами. Я ожидал, что две функции ниже приведут к тому же результату, но это не так. Где моя ошибка?

% Define parameters
f1 = 1; f2 = 2; f3 = 3; g1 = 4; g2 = 5; g3 = 6; 

% Starting values
w0 = [3 2];

% Using Function F1
F1 = fsolve(@(w) fun1(w, f1, f2, f3, g1, g2, g3), w0);

% Using Function F2
h1 = [f1 g1];
h2 = [f2 g2];
h3 = [f3 g3];

F2 = fsolve(@(w) fun2(w, h1, h2, h3), w0);

% Define Functions
function F1 = fun1(w, f1, f2, f3, g1, g2, g3)
    F1(1) = f1*w(1) + f2*w(2) + f3;
    F1(2) = g1*w(1) + g2*w(2) + g3;
end

function F2 = fun2(w, h1, h2, h3)
    F2 = h1.*w + h2.*w + h3;
end

Результат есть.

F1 =
    1.0000   -2.0000
F2 =
   -1.0000   -0.6667

1 Ответ

1 голос
/ 10 января 2020

Если ваша ссылка fun2, тогда ваш fun1 должен быть записан, как указано ниже для эквивалентности

function F1 = fun1(w, f1, f2, f3, g1, g2, g3)
    F1(1) = f1*w(1) + f2*w(1) + f3;
    F1(2) = g1*w(2) + g2*w(2) + g3;
end

В противном случае вам следует переписать fun2 как

function F2 = fun2(w, h1, h2, h3)
    F2 = [h1',h2',h3']*[w';1];
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...