Решить систему нелинейных уравнений в Matlab
Я пытаюсь решить 4 нелинейных уравнений в Matlab. я написал код, используя fsolve, но он не смог продолжить работу, и написал другой, используя решение, но после 4 часов работы без результата я сам его остановил. Я не знаю, что еще я могу использовать, чтобы решить это? это вообще разрешимо?
это код, который я написал, используя fsolve, x и y - векторы, а n - длина этих векторов, равная 1200. nu - степень свободы, равная 1196. p(1), p(2)... и p(4).) неизвестны
x = data1(:,1);
y = data1(:,2);
n = length(x);
p0 = [0 0 0 0];
options = optimset('Display','iter');
[p,fval] = fsolve(@myfunc,p0,options);
MyFunc:
function F = myfunc(p)
global x y n
r = y-p(1)*x.^3-p(2)*x.^2-p(3)*x-p(4);
F = [sum(x.^3)-(n-4-2)*sum(x.^3./r);
sum(x.^2)-(n-4-2)*sum(x.^2./r);
sum(x.^1)-(n-4-2)*sum(x.^1./r);
sum(x.^0)-(n-4-2)*sum(x.^0./r)];
1 ответ
Решение
Похоже, проблема слишком сложна для fsolve
или у вас плохое предположение. Однако код, который у вас есть, выглядит хорошо, если вы хотите использовать параметризованную анонимную функцию:
x = data1(:,1);
y = data1(:,2);
n = length(x);
p0 = [0 0 0 0];
options = optimset('Display','iter');
[p,fval] = fsolve(@(p) myfunc(p,x,y,n),p0,options);
затем myfunc
:
function F = myfunc(p,x,y,n)
r = y-p(1)*x.^3-p(2)*x.^2-p(3)*x-p(4);
F = [sum(x.^3)-(n-4-2)*sum(x.^3./r);
sum(x.^2)-(n-4-2)*sum(x.^2./r);
sum(x.^1)-(n-4-2)*sum(x.^1./r);
sum(x.^0)-(n-4-2)*sum(x.^0./r)];
end