我有这个matlab函数,
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
。我想使用fsolve,但我不知道该怎么做。 ErrorFun
是最小二乘问题。
答案 0 :(得分: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]
。