python solve解方程,如何降低解的精度以缩短时间?
不是很明确你需要做到什么程度,但基本可以通过以下两个手段得到:
手工解方程得到解析解,然后套入公式
使用一些工具包例如numpy可以自动求解
以下都给出例子
import numpy as npimport matplotlib.pyplot as pltplt.axis("equal")a = np.linspace(1,10,100) # a 的变化范围可以自己挑,前两个参数控制,# 使用 numpy 自动求解res = []for x in a: A = np.mat("1, 2; {}, -1".format(x)) b = np.mat("{}, 10".format(x)).T res.append(np.linalg.solve(A, b))# 计算完毕后取出每对x和yx1 = [float(r[0]) for r in res]y1 = [float(r[1]) for r in res]plt.plot(x1, y1)###################################### 手工计算过程很简单不放上来了,直接上结果x2 = [(a1 + 20) / (2*a1 + 1) for a1 in a]y2 = [(a1**2 - 10) / (2*a1 + 1) for a1 in a]plt.plot(x2, y2)
完全的暴力:i=0while(~i&1)or(i%3!=2)or(i%5!=4)or(i%6!=5):i+=7printi考虑数学上的优化——设阶梯数为x,则可联立以下同余方程:x=1(mod2)x=2(mod3)x=4(mod5)x=5(mod6)x=0(mod7)前四个同余方程又可改写为:x=2-1=-1(mod2)x=3-1=-1(mod3)x=5-1=-1(mod5)x=6-1=-1(mod6)联立得:x=-1(modlcm(2,3,5,6)=30)交上最后一个同余方程得:x%30==29且x%7==0到这步时,便可以再打一个暴力:i=0whilei%30!=29:i+=7printi考虑继续优化——原同余方程又可改写为:x=30*m+29(m∈N)x=7*n(n∈N+)联立得:30*m+29=7*n即:n=(30*m+29)/7=4*m+4+(2*m+1)/7∵n∈N+∴(2*m+1)/7∈N∴m=3(mod7)∴m最小为3,n最小为17,x最小为119于是有O(1)的程序:print119
这个和你输入的数字的精度有关系,你试试输入整数呢?卞很保儿: import scipy.optimize import sympyprint(scipy.optimize.fsolve(lambda x: x**2 + 2*x + 1, 0)) print(sympy.solve('x**2 + 2*x + 1'))spicy.optimize.fsolve求数值解,需要给定初值,必要时需要选定求解器(不过解个二元一次而已无所谓了).sympy.solve求解析解.当然还有更细致的玩法.当然其实一元二次方程这种有求根公式的玩意……直接套求根公式就行……
积石山保安族东乡族撒拉族自治县19488476315: 求指教:Python怎样分别输出方程组的解? - ?
卞很保儿: 题主的问题没有毛病:solve([f],[x]),f是方程,x是变量,这个代码解的是关于x的方程f=0 其实很明显了,输出的是字典,也可以用type()确定变量类型,代码如下: L = solve([2*x+3*y-8,3*x-y-1],[x,y]) print(L[x]) print(L[y]) 要运算的话就是: a = L[x] b = L[y] print(a+b)
积石山保安族东乡族撒拉族自治县19488476315: python解方程遇到问题 - ?
卞很保儿: 完全的暴力:i=0while(~i&1)or(i%3!=2)or(i%5!=4)or(i%6!=5):i+=7printi考虑数学上的优化——设阶梯数为x,则可联立以下同余方程:x=1(mod2)x=2(mod3)x=4(mod5)x=5(mod6)x=0(mod7)前四个同余方程又可改写为:x=2-1=-1(mod2)x=...
积石山保安族东乡族撒拉族自治县19488476315: python sympy 求表达式的值 - ?
卞很保儿: Sympy是python中非常强大的符号运算库,可以以书写习惯表示数学表达式.下面介绍用Sympy求方程数值解的方法.下面代码全部在 from sympy import * init_printing(use_unicode=True) # 按书写习惯输出 下运行.数学表达式的输入 首先声明...
积石山保安族东乡族撒拉族自治县19488476315: 如何循环python解一元二次方程 - ?
卞很保儿: 12345678910111213141516171819202122 import numpy as np def solve_quad(a,b,c): if a == 0: print('您输入的不是二次方程!') else: delta = b*b-4*a*c x = -b/(2*a) if delta == 0: print('方程有惟一解,X=%f'%(x)) return x elif delta > 0: x1 ...
积石山保安族东乡族撒拉族自治县19488476315: Python中计算方程的解得出某个数字乘以I,这个I是什么意思? - ?
卞很保儿: 复数在Python里面一般用J或者j表示,只有出现这种表示的时候才能用real和imag去提取实部虚部.你解方程(用solve)出现的I也是复数,但是从解的tuple里提取出来的是mul对象,没有real和imag属性,不能直接提取值.
积石山保安族东乡族撒拉族自治县19488476315: 用python写一元二次方程的解程序 - ?
卞很保儿: 解答:令(x+1)/x^2= t 那么原方程化为 t -2/t=1 即t^2 -t -2=0 解得t= -1或 2 若t= -1 即 (x+1)/ x^2= -1 那么x^2+x+1=0 无解 若t=2 即x+1=2x^2 那么2x^2-x-1=(2x+1)(x-1)=0 解得x= -1/2 或 1
积石山保安族东乡族撒拉族自治县19488476315: 如何用 solve 函数解系数是向量的方程 - ?
卞很保儿: 用MATLAB解方程的三个实例1、对于多项式p(x)=x3-6x2-72x-27,求多项式p(x)=0的根,可用多项式求根函数roots(p),其中p为多项式系数向量,即>>p = p =1.00 -6.00 -72.00 -27.00 p是多项式的MATLAB描述方法,我们可用poly2str(p,'x')函数 ,...
积石山保安族东乡族撒拉族自治县19488476315: 如何利用python解矩阵方程 - ?
卞很保儿: python解矩阵方程 和 其他高级语言解矩阵方程相似.都是先构造系数矩阵和右端向量(或合并的增广矩阵),再用高斯法或约当法... 等方法求解.
积石山保安族东乡族撒拉族自治县19488476315: 如何使用fsolve函数? - ?
卞很保儿: *非线性方程组的求解 对于非线性方程组F(X)=0,用fsolve函数求其数值解.fsolve函数的调用格式为: X=fsolve('fun',X0,option) 其中X为返回的解,fun是用于定义需求解的非线性方程组的函数文件名,X0是求根过程的初值,option为最优化工具...