请用python实现拟合第一段水位>> t=[0 0.92 1.84 2.95 3.87 4.98 5.9 7.01 7.93 8.97 10.95 12.03 12.95 13.88 14.98 15.90 16.83 17.93 19.04 19.9 20.84 23.88 24.99 25.91];h=[968 948 931 913 898 881 869 852 839 822 1082 1050 1021 994 965 941 918 892 866 843 822 1059 1035 1018];>> c1=polyfit(t(1:10),h(1:10),3)a1=polyder(c1)c1 = -0.0785 1.3586 -22.1079 967.7356a1 = -0.2356 2.7173 -22.1079%其中a1系数为流量函数系数>> tp1=0:0.1:9;x1=-polyval(a1,tp1);>> plot(tp1,x1,'c.')>> axis([0 25 12 34])xlabel('小时')ylabel('厘米/小时')>> hold on拟合第二段水位>> t=[0 0.92 1.84 2.95 3.87 4.98 5.9 7.01 7.93 8.97 10.95 12.03 12.95 13.88 14.98 15.90 16.83 17.93 19.04 19.9 20.84 23.88 24.99 25.91];h=[968 948 931 913 898 881 869 852 839 822 1082 1050 1021 994 965 941 918 892 866 843 822 1059 1035 1018];>> c2=polyfit(t(10.9:21),h(10.9:21),4)a2=polyder(c2)c2 = 1.0e+03 * -0.0000 0.0003 -0.0044 -0.0018 1.3644a2 = -0.0186 0.7529 -8.7512 -1.8313%其中a2系数为流量函数系数>> tp2=10.9:0.1:21;x2=-polyval(a2,tp2);plot(tp2,x2,'c.')>> hold on
时间: 2024-02-18 14:01:37 浏览: 92
以下是Python代码实现:
```
import numpy as np
import matplotlib.pyplot as plt
# 数据
t = np.array([0, 0.92, 1.84, 2.95, 3.87, 4.98, 5.9, 7.01, 7.93, 8.97, 10.95, 12.03, 12.95, 13.88, 14.98, 15.90, 16.83, 17.93, 19.04, 19.9, 20.84, 23.88, 24.99, 25.91])
h = np.array([968, 948, 931, 913, 898, 881, 869, 852, 839, 822, 1082, 1050, 1021, 994, 965, 941, 918, 892, 866, 843, 822, 1059, 1035, 1018])
# 第一段拟合
c1 = np.polyfit(t[:10], h[:10], 3)
a1 = np.polyder(c1)
tp1 = np.arange(0, 9.1, 0.1)
x1 = -np.polyval(a1, tp1)
plt.plot(tp1, x1, 'c.')
plt.axis([0, 25, 12, 34])
# 第二段拟合
c2 = np.polyfit(t[10:21], h[10:21], 4)
a2 = np.polyder(c2)
tp2 = np.arange(10.9, 21.1, 0.1)
x2 = -np.polyval(a2, tp2)
plt.plot(tp2, x2, 'c.')
plt.xlabel('小时')
plt.ylabel('厘米/小时')
plt.show()
```
注意,这里的`polyder`函数用于求解多项式的导数,因此需要使用NumPy科学计算库。此外,需要注意上述代码中的数组索引是从0开始的,因此`t[:10]`表示取t数组的前10个元素,而`t[10:21]`表示取t数组的第11个到第21个元素。
阅读全文