2015-11-20 2 views
0

У меня есть эта функция MatLab,Fsolve с переменными,

function [f]=ErrorFun(a,b,c) 
    global I  
    global phi 

    f = sum((a+b.*cos(phi)+c.*sin(phi)-I).^2); 
end 

length(a)=length(b)=length(phi)=length(c)=length(I)N .I хочет использовать fsolve, но я не знаю, как это сделать. ErrorFun - проблема наименьших квадратов.

ответ

0

документация говорит

X = fsolve(FUN,X0) начинается в матрице X0 и пытается решить уравнений в FUN. FUN принимает вход X и возвращает вектор (матрицу) значения уравнения F оценивается по адресу X.

поэтому вам нужно переписать свою функцию так, чтобы она принимала в качестве входного сигнала один вектор параметров. Например, в вашем случае,

function f = ErrorFun(x) 
    global I phi 
    n = length(phi) ; 
    a = x(1:n) ; 
    b = x(n+1:2*n) ; 
    c = x(2*n+1:3*n) ; 

    f = sum((a+b.*cos(phi)+c.*sin(phi)-I).^2) ; 
end 

затем вызвать fsolve с этой функцией и некоторый начальный вектор x0 = [a; b; c].

Смежные вопросы