📄 18-曲线拟合和多项式拟合-2.m__.htm
字号:
<html><head><title>MATLAB.rar 18-曲线拟合和多项式拟合-2.m</title>
<LINK href="/inc/read_style.css" type=text/css rel=stylesheet></head>
<body>
<p><a href=http://www.pudn.com>www.pudn.com</a> > <a href="http://www.pudn.com/downloads111/sourcecode/graph/detail461284.html">MATLAB.rar</a> > 18-曲线拟合和多项式拟合-2.m</p><!-- saved from http://www.pudn.com -->
<script src="/inc/gg_read1.js"></script><BR>
<pre name="code" class="m">
% 曲线拟合
disp '***** 圆柱齿轮复合齿形系数Yfs与当量齿数Zv的关系 ******'
lx=input('选择曲线类型:1-双曲线;2-幂函数;3-负指数;4-S型;5-指数;6-对数;7-直线 = ');
x0=input(' 输入插值点:x0 = ');
n = 18;
x=zeros(n); y=zeros(n); ys=zeros(n); ya=zeros(n); s=zeros(n);
x=[12 13 14 15 16 17 18 19 20 25 30 35 40 45 50 60 70 80];
y=[5.05 4.91 4.79 4.70 4.61 4.55 4.48 4.43 4.38 4.22 4.13 4.08 4.05 4.02 4.01 3.88 3.88 3.88];
x1 = x(1); xn = x(n);
for i = 1 : n
ya(i) = y(i);
end
disp ' Zv Yfs'
for i = 1 : n
zy = [x(i) y(i)];
disp(zy)
end
% 绘制实验数据列表离散点图(红色,圆点,栅格,保持图形)
plot(x,y,'r.')
grid
hold on;
% 根据曲线类型进行变量代换
for i = 1 : n
switch lx
case 1
x(i) = 1 / x(i); y(i) = 1 / y(i);
case 2
x(i) = log(x(i)); y(i) = log(y(i));
case 3
x(i) = 1 / x(i); y(i) = log(y(i));
case 4
x(i) = exp(-x(i)); y(i) = log(y(i));
case 5
y(i) = log(y(i));
case 6
x(i) = log(x(i)) / log(10);
case 7
end
end
disp ' ***** 计算代换变量的累加与平方和 *****'
c = 0; d = 0; xc = 0; yc = 0; xy = 0;
for i = 1 : n
c = c + x(i); d = d + y(i);
xc = xc + x(i) ^2; yc = yc + y(i) ^2;
xy = xy + x(i) * y(i);
end
cxy = [c d xc yc xy];
disp ' C-X C-Y C-X^2 C-Y^2 C-(XY)^2'
disp (cxy)
dx = xc - c ^2 / n;
dy = yc - d ^2 / n;
dc = xy - c * d / n;
lxy = [dx dy dc];
disp ' Lxx Lyy Lxy'
disp (lxy)
disp ' ***** 计算拟合系数和常数 *****'
b = dc / dx;
fprintf (1,' 拟合系数 b = %3.6f \n',b)
a = (d - b * c) / n;
fprintf (1,' 代换常数 a = %3.6f \n',a)
switch lx
case 1
fprintf (1,' 拟合常数 a = %3.6f \n',a)
case 2
g = exp(a);
fprintf (1,' 拟合常数 a = %3.6f \n',g)
case 3
g = exp(a);
fprintf (1,' 拟合常数 a = %3.6f \n',g)
case 4
fprintf (1,' 拟合常数 a = %3.6f \n',a)
case 5
g = exp(a);
fprintf (1,' 拟合常数 a = %3.6f \n',g)
case 6
fprintf (1,' 拟合常数 a = %3.6f \n',a)
case 7
fprintf (1,' 拟合常数 a = %3.6f \n',a)
end
disp ' ***** 拟合效果和精度检验 *****'
r = dc / sqrt(dx * dy);
fprintf (1,' 相关系数 r = %3.6f \n',r)
d = 0; q = 0; yc = 0;
for i = 1 : n
ys(i) = a + b * x(i);
switch lx
case 1
ys(i) = 1 / ys(i);
case 2
ys(i) = exp(ys(i));
case 3
ys(i) = exp(ys(i));
case 4
ys(i) = 1 / ys(i);
case 5
ys(i) = exp(ys(i));
otherwise
end
s(i) = (ya(i) - ys(i)) ^ 2;
d = d + ya(i);
q = q + s(i);
yc = yc + ya(i) ^2;
end
dy = yc - d * d / n;
sgm = sqrt(q / (n - 2));
rr = 1 - q / dy;
fprintf (1,' 剩余平方和 Q = %3.6f \n',q)
fprintf (1,' 标准误差 s = %3.6f \n',sgm)
fprintf (1,' 相关指数 R2 = %3.6f \n',rr)
switch lx
case 7
f = (dy - q) * (n - 2) / q;
fprintf (1,' 统计量 F = %3.6f \n',f)
otherwise
end
% 计算插值点函数值,根据选择的曲线类型绘制拟合曲线(蓝色,实线)
xx = x1 : 1 : xn;
switch lx
case 1
y0 = x0 / (a * x0 + b );
yy = xx ./ (a .* xx + b );
case 2
y0 = g * x0 ^ b;
yy = g * xx .^ b;
case 3
y0 = g * exp(b / x0);
yy = g * exp(b ./ xx);
case 4
y0 = 1 / (a + b * exp(-x0));
yy = 1 ./ (a + b .* exp(-xx));
case 5
y0 = g * exp(b * x0);
yy = g * exp(b .* xx);
case 6
y0 = a + b * log(x0) / log(10);
yy = a + b .* log(xx) / log(10);
case 7
y0 = a + b * x0;
yy = a + b .* xx;
end
fprintf (1,' 插值点函数值 y0 = %3.4f \n',y0)
plot(xx, yy,'b-')
% 图形标题-拟合曲线类型和公式(字符黑体,公式斜体)
switch lx
case 1
title('\bf 实验数据离散点图 / 双曲线 \it y=x/(ax+b)')
case 2
title('\bf 实验数据离散点图 / 幂函数曲线 \it y=ax^b')
case 3
title('\bf 实验数据离散点图 / 负指数曲线 \it y=ae^{b/x}')
case 4
title('\bf 实验数据离散点图 / S型曲线 \it y=1/(a+be^{-x})')
case 5
title('\bf 实验数据离散点图 / 指数曲线 \it y=ae^{bx}')
case 6
title('\bf 实验数据离散点图 / 对数曲线 \it y=a+bln(x)')
case 7
title('\bf 实验数据离散点图 / 直线 \it y=a+bx')
end
</pre>
<script src="/inc/gg_read2.js"></script><BR>
<script src="http://s117.cnzz.com/stat.php?id=1236358&web_id=1236358&show=pic" language="JavaScript" charset="gb2312"></script>
</body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -