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

假设有一个复杂函数(以一元为例),且是关于自变量的隐函数,即 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 np
import 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 的。

你可能感兴趣的:(发布)