Мне нужно решить систему нелинейных уравнений; для использования fsolve, я написал m-файл, содержащий мою функцию «myfun». Эта функция вызывается основным m-файлом.matlab: использование вектора неизвестных в fsolve
Как система, так и неизвестные должны быть записаны с использованием цикла «для».
Пример:
function F=myfun(x)
n=20;`
for j=1:n
c1=sqrt(x(j)^2-3*x(j));
c2=x(j)^(1/2);
F(j)=c1+c2;
end
Моя проблема заключается в том, что я должен заранее выделить память для моих векторов, как Р и х, в противном случае решатель считает numel (х) = 1. Но если я объявляю
F=zeros(n,1);
x=zeros(n,1);
У меня есть следующий вывод:
No solution found.
fsolve stopped because the problem appears regular as measured by the gradient,
but the vector of function values is not near zero as measured by the
default value of the function tolerance.
Любые предложения? Благодаря
Использование его в 'fsolve' требует от него функции, поэтому я бы предпочел анонимную функцию' fun = @ (x) sqrt (x.^2-3 * x) + sqrt (x) '. – MeMyselfAndI
Да, F все равно должен находиться внутри функции, как в OP. Анонимная функция - хорошая альтернатива. – jacob
Собственно, пример, который я опубликовал, не подходит; Я упростил проблему. Мой код походит, что более или менее: F = myfun (х) для я = 1: 20 J = 4 + I , если я> 2 && г <20 Р (к) = x (i) * (1-sqrt (x (i))) + x (i-2) * (1-sqrt (x (i-2))) + x (i + 1) * (1- sqrt (х (г + 1))); elseif i == 1 F (j) = x (i) * (1-sqrt (x (i))) + x (i + 1) * (1-sqrt (x (i + 1))); ElseIf ... конец конец –