利用描点绘图法求解复杂函数

来源:互联网 发布:网络销售培训简介 编辑:程序博客网 时间:2024/05/18 01:06

假设有一个复杂函数(以一元为例),且是关于自变量的隐函数,即 f(x) = y 无法写出 x = g(y) 的表达式,那么就可以采用图像法求解。


需要用到的库为 numpy 和 matplotlib,在这里以 openSUSE 12.2 x64 为例:

sudo zypper in python-numpy python-matplotlib python-matplotlib-tk

其余 Linux 系统相似。Windows 系统需要去官方网站下载编译好的 exe 文件安装库。


范例代码:

#!usr/bin/env python# -*- coding: utf-8 -*-from __future__ import division#除法纠正import numpy as npimport matplotlib.pyplot as plt# 基本常数定义# 隐函数定义def f(x):y = f(x)return y# 定义自变量如何取值xx = np.arange(-1,1,0.1)def calc():#计算并绘图a,b = [],[]#建立绘制点的坐标列表for x in xx.tolist():#要将array对象转换成列表对象det = matrix(x)a.append(x)b.append(y)plt.plot(a,b)#绘制图形plt.show()#显示图形if __name__=='__main__':calc()

运行之后便可以得到曲线了:


左下角有移动、放大、保存图像等等选项,比较方便。

其实 plot 可以直接绘制函数图像,得到非常光滑的曲线,在曲线上取点所得的值也会准确很多;但这里之所以采用描点的方法,是出于对隐函数特殊情况的考虑,比如隐函数中有矩阵的计算的话,使用 numpy.linalg.det() 函数求矩阵的值,就对变量输入有着类型的要求,不能是数组,否则会产生诸如

ValueError: setting an array element with a sequence

这样的错误,我是觉得有点麻烦,而描点相对简单,更改自变量取值的步进长度就可以更改精度了,只要不是要求太精确的一般都可以满足需要。


至于二元函数 z = h(x,y),则同样可以通过绘制 3D 图像来求解。需要用到的是 mlab 这个库。具体可以 Google。


方法还有很多,numpy 和 matplotlib 的强大远远不止于此,但这一次课程设计,好像这样就比较够了。我感觉只要库强大,python 能做的是不输给 matlab 的。

原创粉丝点击