您好,有个matlab的问题请教您一下

已知x=[0510152025303540];y=[065.188.4104111.3113.9116.5119.1121.6];要拟合xy的曲线,并求出这条拟合出来的曲... 已知x=[0 5 10 15 20 25 30 35 40];
y=[0 65.1 88.4 104 111.3 113.9 116.5 119.1 121.6];
要拟合xy的曲线,并求出这条拟合出来的曲线过点(0,80.6)的切线斜率,切点横坐标值,在同一个图中,谢谢
展开
 我来答
victoriajll
2013-03-10 · TA获得超过4884个赞
知道大有可为答主
回答量:654
采纳率:100%
帮助的人:1054万
展开全部
clc;clear;
x0=[0 5 10 15 20 25 30 35 40];
y0=[0 65.1 88.4 104 111.3 113.9 116.5 119.1 121.6];
p=polyfit(x0,y0,5);

syms x y
%多项式方程
y1=poly2sym(p);
eq1=y-y1;
dy=diff(y1);
%切线方程
y2=dy*x+80.6;
eq2=y-y2;
[x y]=solve(eq1,eq2);

%有3条满足局部相切的切线,这里画出两条
%我觉得不应该用5阶多项式拟合
%切点1及斜率
a1=double(x(1))
b1=double(y(1))
dy1=(b1-80.6)/a1

%切点2及斜率
a2=double(x(2))
b2=double(y(2))
dy2=(b2-80.6)/a2

xx=0:0.01:50;
yy=polyval(p,xx);
plot(xx,yy)
hold on
plot([0;50],[80.6;dy1*50+80.6])
plot([0;50],[80.6;dy2*50+80.6])

我用双指数拟合了一下,代码如下:你也可以参考一下
clc;clear;
x0=[0 5 10 15 20 25 30 35 40];
y0=[0 65.1 88.4 104 111.3 113.9 116.5 119.1 121.6];
f=@(A,x)A(1)*exp(A(2)*x)+A(3)*exp(A(4)*x);
A=nlinfit(x0,y0,f,[105 0.0036 -104 -0.17]);

syms x y
%原始方程
% y1=A(1)*exp(A(2)*x)+A(3)*exp(A(4)*x);
y1=f(A,x);
eq1=y-y1;
dy=diff(y1);
%切线方程
y2=dy*x+80.6;
eq2=y-y2;
[x y]=solve(eq1,eq2);

%这只有一条切线
%切点及斜率
a1=double(x)
b1=double(y)
dy1=(b1-80.6)/a1

xx=-10:0.01:20;
yy=f(A,xx);
plot(xx,yy)
hold on
plot([0;-10],[80.6;dy1*(-10)+80.6])
追问
谢谢,这个貌似就是我想要的结果了
追答
是指数拟合,还是多项式拟合?
满意请采纳,谢谢!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
时砂之王的
2013-03-09 · TA获得超过105个赞
知道答主
回答量:65
采纳率:0%
帮助的人:53.3万
展开全部
能不能具体说说拟合的函数,,
是对数函数,,还是阻滞增长函数??
追问
拟合出来的是一个5次多项式,就是选的跟散点比较贴合的曲线。。
追答

%%% 数据点

x=[0 5 10 15 20 25 30 35 40];

y=[0 65.1 88.4 104 111.3 113.9 116.5 119.1 121.6];

plot(x,y,'r*',0,80.6,'r*');

hold on;


%%% 拟合曲线

a=polyfit(x,y,5);

t = 0:0.01:40;

dy = diff(polyval(a,t));

plot(t,polyval(a,t));


%%%% 以0.01的精度寻找切点 %%%

n = polyval(a,0.01*1) - dy(1)*1 -80.6;

m = polyval(a,0.01*2) - dy(2)*2 -80.6;

k = 1000;

while abs(n)>abs(m)

    n = polyval(a,0.01*k) - dy(k)*k -80.6;

    m = polyval(a,0.01*(k+1)) - dy(k+1)*(k+1) -80.6;

    k = k + 1;

end


%%%% 切线

k = 1624;

plot(t,(dy(k)/0.01)*(t - 0.01*k) + polyval(a,0.01*k));

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

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式