Matlab非线性多元拟合nlinfit函数出问题
clearx=[1,1;2,2;-1,-2;0,-1;3,6]y=[10;23;-8;-3;19]a=[0.50.50.50.50.5]f=@(x,y)a(1)+a(2)...
clear
x=[1,1;2,2;-1,-2;0,-1;3,6]
y=[10;23;-8;-3;19]
a=[0.5 0.5 0.5 0.5 0.5]
f=@(x,y)a(1)+a(2)*x(:,1)+a(3)*x(:,2)+a(4)*x(:,1)*x(:,2)+a(5)*x(:,1)^2;
nlinfit(x,y,f,[0.5 0.5 0.5 0.5 0.5])
结果
??? Error using ==> nlinfit at 127
MODELFUN should return a vector of fitted values the same length
as Y. 展开
x=[1,1;2,2;-1,-2;0,-1;3,6]
y=[10;23;-8;-3;19]
a=[0.5 0.5 0.5 0.5 0.5]
f=@(x,y)a(1)+a(2)*x(:,1)+a(3)*x(:,2)+a(4)*x(:,1)*x(:,2)+a(5)*x(:,1)^2;
nlinfit(x,y,f,[0.5 0.5 0.5 0.5 0.5])
结果
??? Error using ==> nlinfit at 127
MODELFUN should return a vector of fitted values the same length
as Y. 展开
1个回答
展开全部
拟合函数的输入有两个参数,
第一个应该是你要拟合的参数,对应于这里a
第二个是输入的自变量,对应于这里的x
多维的可以用多列数据,注意行数和y相同
还要注意,函数式里向量间的*,\,^,要用.*,.\,.^
x=[1,1;2,2;-1,-2;0,-1;3,6];
y=[10;23;-8;-3;19];
a=[0.5 0.5 0.5 0.5 0.5];
f=@(a,x)a(1)+a(2)*x(:,1)+a(3)*x(:,2)+a(4)*x(:,1).*x(:,2)+a(5)*x(:,1).^2;
nlinfit(x,y,f,[0.5 0.5 0.5 0.5 0.5])
第一个应该是你要拟合的参数,对应于这里a
第二个是输入的自变量,对应于这里的x
多维的可以用多列数据,注意行数和y相同
还要注意,函数式里向量间的*,\,^,要用.*,.\,.^
x=[1,1;2,2;-1,-2;0,-1;3,6];
y=[10;23;-8;-3;19];
a=[0.5 0.5 0.5 0.5 0.5];
f=@(a,x)a(1)+a(2)*x(:,1)+a(3)*x(:,2)+a(4)*x(:,1).*x(:,2)+a(5)*x(:,1).^2;
nlinfit(x,y,f,[0.5 0.5 0.5 0.5 0.5])
追问
我想控制误差在10^(-4),请问这个用循环语句还是有误差函数可以用?
还有请问如果想学好MATLAB做数据处理有没有什么资料可以推荐的?谢谢了
追答
nlinfit是可以控制误差的
在使用nlinfit之前,用statset设置好参数,再调用nlinfit就好了
options = statset('TolFun',1e-4);
nlinfit(x,y,f,[0.5 0.5 0.5 0.5 0.5],options);
除了误差,其实还有很多拟合参数可以设置,具体要看statset的帮助
资料肯定是有的,不过我没有找,我基本上是看matlab自带的帮助文件的
所以不能给你推荐了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询