您好,有个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)的切线斜率,切点横坐标值,在同一个图中,谢谢 展开
y=[0 65.1 88.4 104 111.3 113.9 116.5 119.1 121.6];
要拟合xy的曲线,并求出这条拟合出来的曲线过点(0,80.6)的切线斜率,切点横坐标值,在同一个图中,谢谢 展开
2个回答
展开全部
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])
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])
追问
谢谢,这个貌似就是我想要的结果了
追答
是指数拟合,还是多项式拟合?
满意请采纳,谢谢!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
能不能具体说说拟合的函数,,
是对数函数,,还是阻滞增长函数??
是对数函数,,还是阻滞增长函数??
追问
拟合出来的是一个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));
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询