matlab 多元非线性函数拟合
非线性的函数,最好能提供简单一点的方法x1=[1640.881640.881640.881640.881640.881621.351621.351621.351621.3...
非线性的函数,最好能提供简单一点的方法
x1=[1640.88
1640.88
1640.88
1640.88
1640.88
1621.35
1621.35
1621.35
1621.35
];
x2=[0.000000277778
0.0000000810185
0.0000000607639
0.0000000405093
0.0000000270062
0.000000559965
0.000000163323
0.0000000816615
0.000000054441
];
y=[0.8
1.96
2.62
3.68
5.14
0.62
1.67
3.18
5.18
];
需要建立形如y=a*x1^b*x2^c 的函数拟合 展开
x1=[1640.88
1640.88
1640.88
1640.88
1640.88
1621.35
1621.35
1621.35
1621.35
];
x2=[0.000000277778
0.0000000810185
0.0000000607639
0.0000000405093
0.0000000270062
0.000000559965
0.000000163323
0.0000000816615
0.000000054441
];
y=[0.8
1.96
2.62
3.68
5.14
0.62
1.67
3.18
5.18
];
需要建立形如y=a*x1^b*x2^c 的函数拟合 展开
2个回答
展开全部
因为这个函数的形式比较特殊,对其两边取对数后得到
log(y)=log(a)+b*log(x1)+c*log(x2)
于是立即就转换为了线性拟合
[1 log(x1) log(x2)]*[log(a) b c]'=log(y)
于是[log(a) b c]'=[1 log(x1) log(x2)]\log(y)
这样就可以得到a,b,c了。不需要进行非线性拟合。
下面是程序:(对于x1、x2、y的赋值部分这里就不写了,你自己在前面加上即可)
p=[ones(length(y),1) log([x1 x2])]\log(y);%就这一句话就搞定了
a=exp(p(1)),b=p(2),c=p(3)%这就是拟合后的参数值
y%这是采样点y的值
a*x1.^b.*x2.^c%这是拟合后在采样点得到的值,可以和y比较一下,很接近。
log(y)=log(a)+b*log(x1)+c*log(x2)
于是立即就转换为了线性拟合
[1 log(x1) log(x2)]*[log(a) b c]'=log(y)
于是[log(a) b c]'=[1 log(x1) log(x2)]\log(y)
这样就可以得到a,b,c了。不需要进行非线性拟合。
下面是程序:(对于x1、x2、y的赋值部分这里就不写了,你自己在前面加上即可)
p=[ones(length(y),1) log([x1 x2])]\log(y);%就这一句话就搞定了
a=exp(p(1)),b=p(2),c=p(3)%这就是拟合后的参数值
y%这是采样点y的值
a*x1.^b.*x2.^c%这是拟合后在采样点得到的值,可以和y比较一下,很接近。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一个m文件
clear
clc
k0=[1 1 1];
k=fminsearch(@fun,k0)
第二个m文件
function f=fun(k)
x1=[1640.88 1640.88 1640.88 1640.88 1640.88 ...
1621.35 1621.35 1621.35 1621.35];
x2=[0.000000277778 0.0000000810185 0.0000000607639 0.0000000405093 ...
0.0000000270062 0.000000559965 0.000000163323 0.0000000816615 ...
0.000000054441];
x=[x1;x2];
y=[0.8 1.96 2.62 3.68 5.14 0.62 1.67 3.18 5.18];
f=sum((y-k(1)*x(1,:).^k(2).*x(2,:).^k(3)).^2);
clear
clc
k0=[1 1 1];
k=fminsearch(@fun,k0)
第二个m文件
function f=fun(k)
x1=[1640.88 1640.88 1640.88 1640.88 1640.88 ...
1621.35 1621.35 1621.35 1621.35];
x2=[0.000000277778 0.0000000810185 0.0000000607639 0.0000000405093 ...
0.0000000270062 0.000000559965 0.000000163323 0.0000000816615 ...
0.000000054441];
x=[x1;x2];
y=[0.8 1.96 2.62 3.68 5.14 0.62 1.67 3.18 5.18];
f=sum((y-k(1)*x(1,:).^k(2).*x(2,:).^k(3)).^2);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询