请用python实现1)拟合第一供水时段>> xx1=-polyval(a1,[8 9]);xx2=-polyval(a2,[11 12]);xx12=[xx1 xx2];a12=polyfit([8 9 11 12],xx12,3)a12 = 1.0e+03 * -0.0012 0.0368 -0.3551 1.1363%其中a12系数为流量函数系数>> tp12=9:0.05:11;x12=polyval(a12,tp12);plot(tp12,x12,'R.')>> hold on2)拟合第二供水时段>> dt3=diff(t(22:24));dh3=diff(h(22:24));dht3=-dh3./dt3;t3=[20 20.8 t(22) t(23)];xx3=[-polyval(a2,t3(1:2)),dht3];a3=polyfit(t3,xx3,3)a3 = 0.0468 -3.6538 91.8283 -725.3839%其中a3系数为流量函数系数>> tp3=20.8:0.05:24;x3=polyval(a3,tp3);plot(tp3,x3,'R.');hold on
时间: 2024-02-18 14:01:42 浏览: 83
以下是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)
# 第二段拟合
c2 = np.polyfit(t[10:21], h[10:21], 4)
a2 = np.polyder(c2)
# 第一供水时段拟合
xx1 = -np.polyval(a1, [8, 9])
xx2 = -np.polyval(a2, [11, 12])
xx12 = np.concatenate((xx1, xx2))
a12 = np.polyfit([8, 9, 11, 12], xx12, 3)
tp12 = np.arange(9, 11.05, 0.05)
x12 = np.polyval(a12, tp12)
plt.plot(tp12, x12, 'r.')
# 第二供水时段拟合
dt3 = np.diff(t[22:24])
dh3 = np.diff(h[22:24])
dht3 = -dh3 / dt3
t3 = np.array([20, 20.8, t[22], t[23]])
xx3 = np.concatenate((-np.polyval(a2, t3[:2]), dht3))
a3 = np.polyfit(t3, xx3, 3)
tp3 = np.arange(20.8, 24.05, 0.05)
x3 = np.polyval(a3, tp3)
plt.plot(tp3, x3, 'r.')
plt.axis([0, 25, 12, 34])
plt.xlabel('小时')
plt.ylabel('厘米/小时')
plt.show()
```
需要注意的是,这里的数组索引同样是从0开始的,因此`t[22:24]`表示取t数组的第23个和第24个元素。同时,`np.concatenate`函数用于将两个数组合并为一个数组。
阅读全文