Решить систему нелинейных уравнений в 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
Другие вопросы по тегам