matlab分段拟合问题

x=[1234567891015202530354045505560];y=[39.439.249.249.643.84949.644.648.65048.45452.4... x = [1 2 3 4 5 6 7 8 9 10 15 20 25 30 35 40 45 50 55 60]; y = [39.4 39.2 49.2 49.6 43.8 49 49.6 44.6 48.6 50 48.4 54 52.4 56.4 62.4 57 59.2 61.6 64 59.4]; 需要拟合的函数为: y = a + b*log10(x) x<=8 y = a + b... x = [1 2 3 4 5 6 7 8 9 10 15 20 25 30 35 40 45 50 55 60]; y = [39.4 39.2 49.2 49.6 43.8 49 49.6 44.6 48.6 50 48.4 54 52.4 56.4 62.4 57 59.2 61.6 64 59.4]; 需要拟合的函数为: y = a + b*log10(x) x<=8 y = a + b*log10(8) + c*log10(x/10) x>=8 求出参数a,b,c的值。拟合出来的曲线是连续的,不是分成两段分别拟合,也就是拟合出来的两条曲线在x=8处值是一样的。 展开 噢,不好意思写错了,第二个式子是: y = a + b*log10(8) + c*log10(x/8) x>=8 展开
 我来答
塞森巴茂彦
2020-03-14 · TA获得超过3667个赞
知道大有可为答主
回答量:3128
采纳率:28%
帮助的人:241万
展开全部

先看看,你原来的问题有没有矛盾
如果要x=8的时候,两个函数相等,那么明显有 c*log10(8/10)=0
明显只有c=0的时候才成立,那么函数前后两端表达式一模一样,就不需要分段了
如果硬是要分两段,两端在x=8处的值相等,那么只能是两端的a,b不是相同的
那函数就不只是a,b,c 三个参数了
如果把函数条件改一下,改成以下那样
就不会矛盾,因为log10(8/8)=0,那样在x=8时两条表达是才能统一
y
=
a
+
b*log10(x)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 x<=8
y
=
a
+
b*log10(8)
+
c*log10(x/8)
 
 
x>=8
这样的话,就可以设置一个分段函数fun对数句拟合
x
=
[1
2
3
4
5
6
7
8
9
10
15
20
25
30
35
40
45
50
55
60];
y
=
[39.4
39.2
49.2
49.6
43.8
49
49.6
44.6
48.6
50
48.4
54
52.4
56.4
62.4
57
59.2
61.6
64
59.4];
fun=@(p,x)
(p(1)+p(2)*log10(x))+p(3)*log10(x/8).*(x>=8);
%匿名函数fun代表分段函数
pp=nlinfit(x,y,fun,[0
1
1])
%拟合,得到pp(1)=a,pp(2)=b,pp(3)=c
xx=min(x):max(x);%画图看拟合结果
plot(x,y,'ko');hold
on;
%黑点原来的数据
plot(xx,fun(pp,xx),'r-');hold
off;%红线拟合的函数曲线
pp
=
 
 40.4580
 
 8.2405
 
 7.3904
就是a=40.458
b=8.2405
c=7.3904

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式