Я пытаюсь решить систему из шести нелинейных уравнений, используя fsolve (см. Ниже). В моих уравнениях есть дополнительные параметры, которые я хотел бы иметь возможность вводить в систему или изменять функциональность, не заходя в мою функцию и не редактируя их каждый раз вручную.
Это F
, rho
и A
. Сейчас я установил их все в 1 и смог найти решение, так что, по крайней мере, скрипт работает правильно.
function f = pressXmanifold(x)
F = [1,1,1];
rho = 1;
A = 1;
f(1) = x(1)-x(3) - ...
1/2*rho*(x(4)/F(1))^2*...
A*(x(4)/x(6)*F(3)/F(1))^(-2)*...
(1+(F(3)/F(1))^2+3*(F(3)/F(1))^2*((x(4)/x(6))^2-(x(4)/x(6))));
f(2) = x(2)-x(3) - ...
1/2*rho*(x(5)/F(2))^2*...
A*(x(5)/x(6)*F(3)/F(2))^(-2)*...
(1+(F(3)/F(2))^2+3*(F(3)/F(2))^2*((x(5)/x(6))^2-(x(5)/x(6))));
f(3) = x(1) - x(3);
f(4) = x(2) - x(3);
f(5) = x(4) - x(5);
f(6) = x(4)+x(5) - x(6);
end
Для F
Я бы хотел иметь возможность вводить любой массив 1 x 3 в мою функцию.
Для rho
я также хотел бы ввести значение.
Для A
это должно было бы измениться с итерациями, основанными на следующих критериях (заданных как оператор if).
if F(3)/F(1) <= 0.35 && x(3)/x(2) <= 1
A = 1;
elseif F(3)/F(1) > 0.35 && x(3)/x(2) <= 0.4
A = 0.9*(1-x(3)/x(2));
elseif F(3)/F(1) > 0.35 && x(3)/x(2) > 0.4
A = 0.55;
end
Пока я пробовал работать только с первыми двумя параметрами. f = pressXmanifold(x,F,rho)
и удаление первых двух строк в моей функции.
Но когда я пытаюсь следовать инструкциям на сайте MathWorks
options = optimoptions('fsolve','Display','none','PlotFcn',@optimplotfirstorderopt);
fun = @pressXmanifold;
x0 = [1,1,1,1,1,1];
x = fsolve(fun,x0,F,rho,options)
Невозможно выполнить присваивание, поскольку индексирование точек не поддерживается для переменных этого типа.
Ошибка в createOptionFeedback (строка 33)
параметры. (stopTestOptions {k}) = [];
Ошибка в prepareOptionsForSolver (строка 57)
optionFeedback = createOptionFeedback (options);
Ошибка в fsolve (строка 157)
[options, optionFeedback] = prepareOptionsForSolver (options, 'fsolve');