弯曲测试的载荷-位移图的处理(1)

来源:互联网 发布:基于单片机论文 编辑:程序博客网 时间:2024/04/27 22:44

前言

这篇是将好久之前的想法付诸实践,也算是对自己想方设法应用并来提高自己的Python基础,这个过程也花了不少时间,毕竟自己还是没有怎么经常用Python。利用Python,期望实现将自己毕设中所做的力学测试(三点弯曲)的原始数据进行画图并自动找出其中线性区域,也就是弹性形变区,并求其斜率最后存入文件。

结果

废话不多说,先摆上成果。我相信,这里面包括思路、代码、编程方式等要改的肯定很多,但这也是我现在的水平了。一步一步来。

# -*- coding: utf-8 -*-import osimport numpy as npimport pandas as pdimport scipy.ndimagefrom matplotlib import pyplot as pltfrom scipy import optimizebase_dir = os.path.dirname(__file__)def experimental_data_read(filename):    file_path = os.path.join(base_dir, filename)    df = pd.read_excel(file_path)    return dfdef linear_region(df, y_start, y_stop):    x = df["X"]    y = df["Y"]    df_linear = df[(y > y_start) & (y < y_stop)].iloc[:1000]    return df_lineardef residuals(p, y, x):    k, b = p    return y - (k*x + b)def curve_plot(i, df, df_linear):    x = df["X"]    y = df["Y"]    x_linear = df_linear["X"]    y_linear = df_linear["Y"]    plt.figure()    plt.plot(x, y, label = "experimental data")    plt.plot(x_linear, y_linear, label = "linear part")    plt.legend()    plt.savefig(str(i), format="png")def least_square_fitting(rediduals, p0, df_linear):    x_linear = df_linear["X"]    y_linear = df_linear["Y"]    r = optimize.leastsq(residuals, p0, args=(y_linear, x_linear))    k, b = r[0]    return ky_start  = float(raw_input("Enter y_start:"))y_stop = float(raw_input("Enter y_stop:"))k = []for i in range(1,6):    filename = '.'.join((str(i),'xls'))    df = experimental_data_read(filename)    df_linear = linear_region(df, y_start, y_stop)      curve_plot(i, df, df_linear)    p0 = [1, 0]    k.append(least_square_fitting(residuals, p0, df_linear))slope = pd.Series(k)slope.to_csv('slope.csv')

一共是定义了5个函数来实现:experimental_data_readlinear_regionresidualsleast_square_fittingcurve_plot,这些都是可以直接通过函数名称明白其作用。

首先就是文件的读取,这个是参考了Django的读取模板(Template)的代码:

base_dir = os.path.dirname(__file__)

其实主要纠结比较久的部分就是如何自动寻找出一条曲线的线性区间,这在直观上很容易发现,但是若是让程序来判断的话,思路是想通过结合一阶导数和二阶导数来判断。但是具体在选用函数来实现时发生困难,目前还未实现,因此是手工输入线性区间范围,实现自动画图和求斜率,还未实现自动判断线性区间,先记录到这里。
结果图

原创粉丝点击